ws2ipdef.h (7821B) - Raw
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 /* options at IPPROTO_IP level */ 24 #define IP_OPTIONS 1 25 #define IP_HDRINCL 2 26 #define IP_TOS 3 27 #define IP_TTL 4 28 #define IP_MULTICAST_IF 9 29 #define IP_MULTICAST_TTL 10 30 #define IP_MULTICAST_LOOP 11 31 #define IP_ADD_MEMBERSHIP 12 32 #define IP_DROP_MEMBERSHIP 13 33 #define IP_DONTFRAGMENT 14 34 #define IP_ADD_SOURCE_MEMBERSHIP 15 35 #define IP_DROP_SOURCE_MEMBERSHIP 16 36 #define IP_BLOCK_SOURCE 17 37 #define IP_UNBLOCK_SOURCE 18 38 #define IP_PKTINFO 19 39 #define IP_HOPLIMIT 21 40 #define IP_RECVTTL 21 41 #define IP_RECEIVE_BROADCAST 22 42 #define IP_RECVIF 24 43 #define IP_RECVDSTADDR 25 44 #define IP_IFLIST 28 45 #define IP_ADD_IFLIST 29 46 #define IP_DEL_IFLIST 30 47 #define IP_UNICAST_IF 31 48 #define IP_RTHDR 32 49 #define IP_GET_IFLIST 33 50 #define IP_RECVRTHDR 38 51 #define IP_TCLASS 39 52 #define IP_RECVTCLASS 40 53 #define IP_RECVTOS 40 54 #define IP_ORIGINAL_ARRIVAL_IF 47 55 #define IP_ECN 50 56 #define IP_PKTINFO_EX 51 57 #define IP_WFP_REDIRECT_RECORDS 60 58 #define IP_WFP_REDIRECT_CONTEXT 70 59 #define IP_MTU_DISCOVER 71 60 #define IP_MTU 73 61 #define IP_NRT_INTERFACE 74 62 #define IP_RECVERR 75 63 #define IP_USER_MTU 76 64 65 #define IP_UNSPECIFIED_TYPE_OF_SERVICE -1 66 #define IP_UNSPECIFIED_USER_MTU MAXULONG 67 68 #define IPV6_ADDRESS_BITS RTL_BITS_OF(IN6_ADDR) 69 70 /* options at IPPROTO_IPV6 level */ 71 #define IPV6_HOPOPTS 1 72 #define IPV6_HDRINCL 2 73 #define IPV6_UNICAST_HOPS 4 74 #define IPV6_MULTICAST_IF 9 75 #define IPV6_MULTICAST_HOPS 10 76 #define IPV6_MULTICAST_LOOP 11 77 #define IPV6_ADD_MEMBERSHIP 12 78 #define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP 79 #define IPV6_DROP_MEMBERSHIP 13 80 #define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP 81 #define IPV6_DONTFRAG 14 82 #define IPV6_PKTINFO 19 83 #define IPV6_HOPLIMIT 21 84 #define IPV6_PROTECTION_LEVEL 23 85 #define IPV6_RECVIF 24 86 #define IPV6_RECVDSTADDR 25 87 #define IPV6_CHECKSUM 26 88 #define IPV6_V6ONLY 27 89 #define IPV6_IFLIST 28 90 #define IPV6_ADD_IFLIST 29 91 #define IPV6_DEL_IFLIST 30 92 #define IPV6_UNICAST_IF 31 93 #define IPV6_RTHDR 32 94 #define IPV6_GET_IFLIST 33 95 #define IPV6_RECVRTHDR 38 96 #define IPV6_TCLASS 39 97 #define IPV6_RECVTCLASS 40 98 #define IPV6_ECN 50 99 #define IPV6_PKTINFO_EX 51 100 #define IPV6_WFP_REDIRECT_RECORDS 60 101 #define IPV6_WFP_REDIRECT_CONTEXT 70 102 #define IPV6_MTU_DISCOVER 71 103 #define IPV6_MTU 72 104 #define IPV6_NRT_INTERFACE 74 105 #define IPV6_RECVERR 75 106 #define IPV6_USER_MTU 76 107 108 #define IP_UNSPECIFIED_HOP_LIMIT -1 109 110 #define IP_PROTECTION_LEVEL IPV6_PROTECTION_LEVEL 111 112 #define PROTECTION_LEVEL_UNRESTRICTED 10 113 #define PROTECTION_LEVEL_EDGERESTRICTED 20 114 #define PROTECTION_LEVEL_RESTRICTED 30 115 116 #if NTDDI_VERSION < NTDDI_VISTA 117 #define PROTECTION_LEVEL_DEFAULT PROTECTION_LEVEL_EDGERESTRICTED 118 #else 119 #define PROTECTION_LEVEL_DEFAULT ((UINT)-1) 120 #endif 121 122 typedef struct ipv6_mreq { 123 struct in6_addr ipv6mr_multiaddr; 124 unsigned int ipv6mr_interface; 125 } IPV6_MREQ; 126 127 struct sockaddr_in6_old { 128 short sin6_family; 129 u_short sin6_port; 130 u_long sin6_flowinfo; 131 struct in6_addr sin6_addr; 132 }; 133 134 typedef union sockaddr_gen { 135 struct sockaddr Address; 136 struct sockaddr_in AddressIn; 137 struct sockaddr_in6_old AddressIn6; 138 } sockaddr_gen; 139 140 struct sockaddr_in6 { 141 short sin6_family; 142 u_short sin6_port; 143 u_long sin6_flowinfo; 144 struct in6_addr sin6_addr; 145 __C89_NAMELESS union { 146 u_long sin6_scope_id; 147 SCOPE_ID sin6_scope_struct; 148 }; 149 }; 150 151 typedef struct sockaddr_in6 SOCKADDR_IN6; 152 typedef struct sockaddr_in6 *PSOCKADDR_IN6; 153 typedef struct sockaddr_in6 *LPSOCKADDR_IN6; 154 155 typedef struct _INTERFACE_INFO { 156 u_long iiFlags; 157 sockaddr_gen iiAddress; 158 sockaddr_gen iiBroadcastAddress; 159 sockaddr_gen iiNetmask; 160 } INTERFACE_INFO,*LPINTERFACE_INFO; 161 162 typedef struct _INTERFACE_INFO_EX { 163 u_long iiFlags; 164 SOCKET_ADDRESS iiAddress; 165 SOCKET_ADDRESS iiBroadcastAddress; 166 SOCKET_ADDRESS iiNetmask; 167 } INTERFACE_INFO_EX, *LPINTERFACE_INFO_EX; 168 169 #define IFF_UP 0x00000001 170 #define IFF_BROADCAST 0x00000002 171 #define IFF_LOOPBACK 0x00000004 172 #define IFF_POINTTOPOINT 0x00000008 173 #define IFF_MULTICAST 0x00000010 174 175 typedef enum _PMTUD_STATE { 176 IP_PMTUDISC_NOT_SET, 177 IP_PMTUDISC_DO, 178 IP_PMTUDISC_DONT, 179 IP_PMTUDISC_PROBE, 180 IP_PMTUDISC_MAX 181 } PMTUD_STATE, *PPMTUD_STATE; 182 183 #define MCAST_JOIN_GROUP 41 184 #define MCAST_LEAVE_GROUP 42 185 #define MCAST_BLOCK_SOURCE 43 186 #define MCAST_UNBLOCK_SOURCE 44 187 #define MCAST_JOIN_SOURCE_GROUP 45 188 #define MCAST_LEAVE_SOURCE_GROUP 46 189 190 typedef enum _MULTICAST_MODE_TYPE { 191 MCAST_INCLUDE = 0, 192 MCAST_EXCLUDE 193 } MULTICAST_MODE_TYPE; 194 195 typedef struct ip_mreq_source { 196 IN_ADDR imr_multiaddr; 197 IN_ADDR imr_sourceaddr; 198 IN_ADDR imr_interface; 199 } IP_MREQ_SOURCE, *PIP_MREQ_SOURCE; 200 201 typedef struct ip_msfilter { 202 IN_ADDR imsf_multiaddr; 203 IN_ADDR imsf_interface; 204 MULTICAST_MODE_TYPE imsf_fmode; 205 ULONG imsf_numsrc; 206 IN_ADDR imsf_slist[1]; 207 } IP_MSFILTER, *PIP_MSFILTER; 208 209 #define IP_MSFILTER_SIZE(NumSources) (sizeof(IP_MSFILTER) - sizeof(IN_ADDR) + (NumSources) * sizeof(IN_ADDR)) 210 211 typedef struct _sockaddr_in6_pair { 212 PSOCKADDR_IN6 SourceAddress; 213 PSOCKADDR_IN6 DestinationAddress; 214 } SOCKADDR_IN6_PAIR, *PSOCKADDR_IN6_PAIR; 215 216 typedef union _SOCKADDR_INET { 217 SOCKADDR_IN Ipv4; 218 SOCKADDR_IN6 Ipv6; 219 ADDRESS_FAMILY si_family; 220 } SOCKADDR_INET, *PSOCKADDR_INET; 221 222 typedef struct group_filter { 223 ULONG gf_interface; 224 SOCKADDR_STORAGE gf_group; 225 MULTICAST_MODE_TYPE gf_fmode; 226 ULONG gf_numsrc; 227 SOCKADDR_STORAGE gf_slist[1]; 228 } GROUP_FILTER, *PGROUP_FILTER; 229 230 typedef struct group_req { 231 ULONG gr_interface; 232 SOCKADDR_STORAGE gr_group; 233 } GROUP_REQ, *PGROUP_REQ; 234 235 typedef struct group_source_req { 236 ULONG gsr_interface; 237 SOCKADDR_STORAGE gsr_group; 238 SOCKADDR_STORAGE gsr_source; 239 } GROUP_SOURCE_REQ, *PGROUP_SOURCE_REQ; 240 241 #define WS2TCPIP_INLINE __CRT_INLINE 242 243 int IN6_ADDR_EQUAL(const struct in6_addr *,const struct in6_addr *); 244 WS2TCPIP_INLINE int IN6_ADDR_EQUAL(const struct in6_addr *a, const struct in6_addr *b) { 245 return !memcmp(a, b, sizeof(struct in6_addr)); 246 } 247 248 #define IN6_ARE_ADDR_EQUAL IN6_ADDR_EQUAL 249 250 #define TCP_OFFLOAD_NO_PREFERENCE 0 251 #define TCP_OFFLOAD_NOT_PREFERRED 1 252 #define TCP_OFFLOAD_PREFERRED 2 253 254 /* TCP_NODELAY is in winsock.h and winsock2.h */ 255 #define TCP_EXPEDITED_1122 0x0002 256 #define TCP_KEEPALIVE 3 257 #define TCP_MAXSEG 4 258 #define TCP_MAXRT 5 259 #define TCP_STDURG 6 260 #define TCP_NOURG 7 261 #define TCP_ATMARK 8 262 #define TCP_NOSYNRETRIES 9 263 #define TCP_TIMESTAMPS 10 264 #define TCP_OFFLOAD_PREFERENCE 11 265 #define TCP_CONGESTION_ALGORITHM 12 266 #define TCP_DELAY_FIN_ACK 13 267 #define TCP_MAXRTMS 14 268 #define TCP_FASTOPEN 15 269 #define TCP_KEEPCNT 16 270 #define TCP_KEEPIDLE TCP_KEEPALIVE 271 #define TCP_KEEPINTVL 17 272 #define TCP_FAIL_CONNECT_ON_ICMP_ERROR 18 273 #define TCP_ICMP_ERROR_INFO 19 274 275 #ifdef __cplusplus 276 } 277 #endif 278 279 #ifdef __LP64__ 280 #pragma pop_macro("u_long") 281 #endif 282 283 #endif /*_WS2IPDEF_ */