1 /** 2 * This file is part of the mingw-w64 runtime package. 3 * No warranty is given; refer to the file DISCLAIMER within this package. 4 */ 5 #ifndef _WS2IPDEF_ 6 #define _WS2IPDEF_ 7 8 #include <_mingw_unicode.h> 9 #include <winapifamily.h> 10 11 #ifdef __LP64__ 12 #pragma push_macro("u_long") 13 #undef u_long 14 #define u_long __ms_u_long 15 #endif 16 17 #include <in6addr.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 typedef struct ipv6_mreq { 24 struct in6_addr ipv6mr_multiaddr; 25 unsigned int ipv6mr_interface; 26 } IPV6_MREQ; 27 28 struct sockaddr_in6_old { 29 short sin6_family; 30 u_short sin6_port; 31 u_long sin6_flowinfo; 32 struct in6_addr sin6_addr; 33 }; 34 35 typedef union sockaddr_gen { 36 struct sockaddr Address; 37 struct sockaddr_in AddressIn; 38 struct sockaddr_in6_old AddressIn6; 39 } sockaddr_gen; 40 41 struct sockaddr_in6 { 42 short sin6_family; 43 u_short sin6_port; 44 u_long sin6_flowinfo; 45 struct in6_addr sin6_addr; 46 __C89_NAMELESS union { 47 u_long sin6_scope_id; 48 SCOPE_ID sin6_scope_struct; 49 }; 50 }; 51 52 typedef struct sockaddr_in6 SOCKADDR_IN6; 53 typedef struct sockaddr_in6 *PSOCKADDR_IN6; 54 typedef struct sockaddr_in6 *LPSOCKADDR_IN6; 55 56 typedef struct _INTERFACE_INFO { 57 u_long iiFlags; 58 sockaddr_gen iiAddress; 59 sockaddr_gen iiBroadcastAddress; 60 sockaddr_gen iiNetmask; 61 } INTERFACE_INFO,*LPINTERFACE_INFO; 62 63 typedef enum _MULTICAST_MODE_TYPE { 64 MCAST_INCLUDE = 0, 65 MCAST_EXCLUDE 66 } MULTICAST_MODE_TYPE; 67 68 typedef struct _sockaddr_in6_pair { 69 PSOCKADDR_IN6 SourceAddress; 70 PSOCKADDR_IN6 DestinationAddress; 71 } SOCKADDR_IN6_PAIR, *PSOCKADDR_IN6_PAIR; 72 73 typedef union _SOCKADDR_INET { 74 SOCKADDR_IN Ipv4; 75 SOCKADDR_IN6 Ipv6; 76 ADDRESS_FAMILY si_family; 77 } SOCKADDR_INET, *PSOCKADDR_INET; 78 79 typedef struct group_filter { 80 ULONG gf_interface; 81 SOCKADDR_STORAGE gf_group; 82 MULTICAST_MODE_TYPE gf_fmode; 83 ULONG gf_numsrc; 84 SOCKADDR_STORAGE gf_slist[1]; 85 } GROUP_FILTER, *PGROUP_FILTER; 86 87 typedef struct group_req { 88 ULONG gr_interface; 89 SOCKADDR_STORAGE gr_group; 90 } GROUP_REQ, *PGROUP_REQ; 91 92 typedef struct group_source_req { 93 ULONG gsr_interface; 94 SOCKADDR_STORAGE gsr_group; 95 SOCKADDR_STORAGE gsr_source; 96 } GROUP_SOURCE_REQ, *PGROUP_SOURCE_REQ; 97 98 #define IPV6_HOPOPTS 1 99 #define IPV6_HDRINCL 2 100 #define IPV6_UNICAST_HOPS 4 101 #define IPV6_MULTICAST_IF 9 102 #define IPV6_MULTICAST_HOPS 10 103 #define IPV6_MULTICAST_LOOP 11 104 #define IPV6_ADD_MEMBERSHIP 12 105 #define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP 106 #define IPV6_DROP_MEMBERSHIP 13 107 #define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP 108 #define IPV6_DONTFRAG 14 109 #define IPV6_PKTINFO 19 110 #define IPV6_HOPLIMIT 21 111 #define IPV6_PROTECTION_LEVEL 23 112 #define IPV6_RECVIF 24 113 #define IPV6_RECVDSTADDR 25 114 #define IPV6_CHECKSUM 26 115 #define IPV6_V6ONLY 27 116 #define IPV6_IFLIST 28 117 #define IPV6_ADD_IFLIST 29 118 #define IPV6_DEL_IFLIST 30 119 #define IPV6_UNICAST_IF 31 120 #define IPV6_RTHDR 32 121 #define IPV6_RECVRTHDR 38 122 #define IPV6_TCLASS 39 123 #define IPV6_RECVTCLASS 40 124 125 #define WS2TCPIP_INLINE __CRT_INLINE 126 127 int IN6_ADDR_EQUAL(const struct in6_addr *,const struct in6_addr *); 128 WS2TCPIP_INLINE int IN6_ADDR_EQUAL(const struct in6_addr *a, const struct in6_addr *b) { 129 return !memcmp(a, b, sizeof(struct in6_addr)); 130 } 131 132 #define IN6_ARE_ADDR_EQUAL IN6_ADDR_EQUAL 133 134 #ifdef __cplusplus 135 } 136 #endif 137 138 #ifdef __LP64__ 139 #pragma pop_macro("u_long") 140 #endif 141 142 #endif /*_WS2IPDEF_ */ 143