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 *);
IN6_ADDR_EQUAL(const struct in6_addr * a,const struct in6_addr * b)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