master
1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6#ifndef IP_TYPES_INCLUDED
7#define IP_TYPES_INCLUDED
8
9#include <winapifamily.h>
10#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= 0x0A00
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16#include <time.h>
17#include <ifdef.h>
18#include <nldef.h>
19
20#define MAX_ADAPTER_DESCRIPTION_LENGTH 128
21#define MAX_ADAPTER_NAME_LENGTH 256
22#define MAX_ADAPTER_ADDRESS_LENGTH 8
23#define DEFAULT_MINIMUM_ENTITIES 32
24#define MAX_HOSTNAME_LEN 128
25#define MAX_DOMAIN_NAME_LEN 128
26#define MAX_SCOPE_ID_LEN 256
27#define MAX_DHCPV6_DUID_LENGTH 130
28#define MAX_DNS_SUFFIX_STRING_LENGTH 256
29
30#define BROADCAST_NODETYPE 1
31#define PEER_TO_PEER_NODETYPE 2
32#define MIXED_NODETYPE 4
33#define HYBRID_NODETYPE 8
34
35 typedef struct {
36 char String[4*4];
37 } IP_ADDRESS_STRING,*PIP_ADDRESS_STRING,IP_MASK_STRING,*PIP_MASK_STRING;
38
39 typedef struct _IP_ADDR_STRING {
40 struct _IP_ADDR_STRING *Next;
41 IP_ADDRESS_STRING IpAddress;
42 IP_MASK_STRING IpMask;
43 DWORD Context;
44 } IP_ADDR_STRING,*PIP_ADDR_STRING;
45
46 typedef struct _IP_ADAPTER_INFO {
47 struct _IP_ADAPTER_INFO *Next;
48 DWORD ComboIndex;
49 char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
50 char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
51 UINT AddressLength;
52 BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
53 DWORD Index;
54 UINT Type;
55 UINT DhcpEnabled;
56 PIP_ADDR_STRING CurrentIpAddress;
57 IP_ADDR_STRING IpAddressList;
58 IP_ADDR_STRING GatewayList;
59 IP_ADDR_STRING DhcpServer;
60 WINBOOL HaveWins;
61 IP_ADDR_STRING PrimaryWinsServer;
62 IP_ADDR_STRING SecondaryWinsServer;
63#ifdef _WIN64
64 __time64_t LeaseObtained;
65 __time64_t LeaseExpires;
66#else
67 __time32_t LeaseObtained;
68 __time32_t LeaseExpires;
69#endif
70 } IP_ADAPTER_INFO,*PIP_ADAPTER_INFO;
71
72#ifdef _WINSOCK2API_
73
74 typedef NL_PREFIX_ORIGIN IP_PREFIX_ORIGIN;
75 typedef NL_SUFFIX_ORIGIN IP_SUFFIX_ORIGIN;
76 typedef NL_DAD_STATE IP_DAD_STATE;
77
78 typedef struct _IP_ADAPTER_UNICAST_ADDRESS_XP {
79 __C89_NAMELESS union {
80 ULONGLONG Alignment;
81 __C89_NAMELESS struct {
82 ULONG Length;
83 DWORD Flags;
84 };
85 };
86 struct _IP_ADAPTER_UNICAST_ADDRESS_XP *Next;
87 SOCKET_ADDRESS Address;
88 IP_PREFIX_ORIGIN PrefixOrigin;
89 IP_SUFFIX_ORIGIN SuffixOrigin;
90 IP_DAD_STATE DadState;
91 ULONG ValidLifetime;
92 ULONG PreferredLifetime;
93 ULONG LeaseLifetime;
94 } IP_ADAPTER_UNICAST_ADDRESS_XP,*PIP_ADAPTER_UNICAST_ADDRESS_XP;
95
96 typedef struct _IP_ADAPTER_UNICAST_ADDRESS_LH {
97 __C89_NAMELESS union {
98 ULONGLONG Alignment;
99 __C89_NAMELESS struct {
100 ULONG Length;
101 DWORD Flags;
102 };
103 };
104 struct _IP_ADAPTER_UNICAST_ADDRESS_LH *Next;
105 SOCKET_ADDRESS Address;
106 IP_PREFIX_ORIGIN PrefixOrigin;
107 IP_SUFFIX_ORIGIN SuffixOrigin;
108 IP_DAD_STATE DadState;
109 ULONG ValidLifetime;
110 ULONG PreferredLifetime;
111 ULONG LeaseLifetime;
112 UINT8 OnLinkPrefixLength;
113 } IP_ADAPTER_UNICAST_ADDRESS_LH,*PIP_ADAPTER_UNICAST_ADDRESS_LH;
114
115#if (_WIN32_WINNT >= 0x0600)
116 typedef IP_ADAPTER_UNICAST_ADDRESS_LH IP_ADAPTER_UNICAST_ADDRESS;
117 typedef IP_ADAPTER_UNICAST_ADDRESS_LH *PIP_ADAPTER_UNICAST_ADDRESS;
118#else /* _WIN32_WINNT >= 0x0501 */
119 typedef IP_ADAPTER_UNICAST_ADDRESS_XP IP_ADAPTER_UNICAST_ADDRESS;
120 typedef IP_ADAPTER_UNICAST_ADDRESS_XP *PIP_ADAPTER_UNICAST_ADDRESS;
121#endif
122
123 typedef struct _IP_ADAPTER_ANYCAST_ADDRESS_XP {
124 __C89_NAMELESS union {
125 ULONGLONG Alignment;
126 __C89_NAMELESS struct {
127 ULONG Length;
128 DWORD Flags;
129 };
130 };
131 struct _IP_ADAPTER_ANYCAST_ADDRESS_XP *Next;
132 SOCKET_ADDRESS Address;
133 } IP_ADAPTER_ANYCAST_ADDRESS_XP,*PIP_ADAPTER_ANYCAST_ADDRESS_XP;
134 typedef IP_ADAPTER_ANYCAST_ADDRESS_XP IP_ADAPTER_ANYCAST_ADDRESS;
135 typedef IP_ADAPTER_ANYCAST_ADDRESS_XP *PIP_ADAPTER_ANYCAST_ADDRESS;
136
137 typedef struct _IP_ADAPTER_MULTICAST_ADDRESS_XP {
138 __C89_NAMELESS union {
139 ULONGLONG Alignment;
140 __C89_NAMELESS struct {
141 ULONG Length;
142 DWORD Flags;
143 };
144 };
145 struct _IP_ADAPTER_MULTICAST_ADDRESS_XP *Next;
146 SOCKET_ADDRESS Address;
147 } IP_ADAPTER_MULTICAST_ADDRESS_XP,*PIP_ADAPTER_MULTICAST_ADDRESS_XP;
148 typedef IP_ADAPTER_MULTICAST_ADDRESS_XP IP_ADAPTER_MULTICAST_ADDRESS;
149 typedef IP_ADAPTER_MULTICAST_ADDRESS_XP *PIP_ADAPTER_MULTICAST_ADDRESS;
150
151#define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE 0x01
152#define IP_ADAPTER_ADDRESS_TRANSIENT 0x02
153#define IP_ADAPTER_ADDRESS_PRIMARY 0x04
154
155 typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS_XP {
156 __C89_NAMELESS union {
157 ULONGLONG Alignment;
158 __C89_NAMELESS struct {
159 ULONG Length;
160 DWORD Reserved;
161 };
162 };
163 struct _IP_ADAPTER_DNS_SERVER_ADDRESS_XP *Next;
164 SOCKET_ADDRESS Address;
165 } IP_ADAPTER_DNS_SERVER_ADDRESS_XP,*PIP_ADAPTER_DNS_SERVER_ADDRESS_XP;
166 typedef IP_ADAPTER_DNS_SERVER_ADDRESS_XP IP_ADAPTER_DNS_SERVER_ADDRESS;
167 typedef IP_ADAPTER_DNS_SERVER_ADDRESS_XP *PIP_ADAPTER_DNS_SERVER_ADDRESS;
168
169 typedef struct _IP_ADAPTER_PREFIX_XP {
170 __C89_NAMELESS union {
171 ULONGLONG Alignment;
172 __C89_NAMELESS struct {
173 ULONG Length;
174 DWORD Flags;
175 };
176 };
177 struct _IP_ADAPTER_PREFIX_XP *Next;
178 SOCKET_ADDRESS Address;
179 ULONG PrefixLength;
180 } IP_ADAPTER_PREFIX_XP,*PIP_ADAPTER_PREFIX_XP;
181 typedef IP_ADAPTER_PREFIX_XP IP_ADAPTER_PREFIX;
182 typedef IP_ADAPTER_PREFIX_XP *PIP_ADAPTER_PREFIX;
183
184 typedef struct _IP_ADAPTER_WINS_SERVER_ADDRESS_LH {
185 __C89_NAMELESS union {
186 ULONGLONG Alignment;
187 __C89_NAMELESS struct {
188 ULONG Length;
189 DWORD Reserved;
190 };
191 };
192 struct _IP_ADAPTER_WINS_SERVER_ADDRESS_LH *Next;
193 SOCKET_ADDRESS Address;
194 } IP_ADAPTER_WINS_SERVER_ADDRESS_LH,*PIP_ADAPTER_WINS_SERVER_ADDRESS_LH;
195#if (_WIN32_WINNT >= 0x0600)
196 typedef IP_ADAPTER_WINS_SERVER_ADDRESS_LH IP_ADAPTER_WINS_SERVER_ADDRESS;
197 typedef IP_ADAPTER_WINS_SERVER_ADDRESS_LH *PIP_ADAPTER_WINS_SERVER_ADDRESS;
198#endif
199
200 typedef struct _IP_ADAPTER_GATEWAY_ADDRESS_LH {
201 __C89_NAMELESS union {
202 ULONGLONG Alignment;
203 __C89_NAMELESS struct {
204 ULONG Length;
205 DWORD Reserved;
206 };
207 };
208 struct _IP_ADAPTER_GATEWAY_ADDRESS_LH *Next;
209 SOCKET_ADDRESS Address;
210 } IP_ADAPTER_GATEWAY_ADDRESS_LH,*PIP_ADAPTER_GATEWAY_ADDRESS_LH;
211#if (_WIN32_WINNT >= 0x0600)
212 typedef IP_ADAPTER_GATEWAY_ADDRESS_LH IP_ADAPTER_GATEWAY_ADDRESS;
213 typedef IP_ADAPTER_GATEWAY_ADDRESS_LH *PIP_ADAPTER_GATEWAY_ADDRESS;
214#endif
215
216 typedef struct _IP_ADAPTER_DNS_SUFFIX {
217 struct _IP_ADAPTER_DNS_SUFFIX *Next;
218 WCHAR String[MAX_DNS_SUFFIX_STRING_LENGTH];
219 } IP_ADAPTER_DNS_SUFFIX, *PIP_ADAPTER_DNS_SUFFIX;
220
221#define IP_ADAPTER_DDNS_ENABLED 0x01
222#define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x02
223#define IP_ADAPTER_DHCP_ENABLED 0x04
224#define IP_ADAPTER_RECEIVE_ONLY 0x08
225#define IP_ADAPTER_NO_MULTICAST 0x10
226#define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x20
227#define IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED 0x40
228#define IP_ADAPTER_IPV4_ENABLED 0x80
229#define IP_ADAPTER_IPV6_ENABLED 0x100
230#define IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG 0x200
231
232 typedef struct _IP_ADAPTER_ADDRESSES_LH {
233 __C89_NAMELESS union {
234 ULONGLONG Alignment;
235 __C89_NAMELESS struct {
236 ULONG Length;
237 IF_INDEX IfIndex;
238 };
239 };
240 struct _IP_ADAPTER_ADDRESSES_LH *Next;
241 PCHAR AdapterName;
242 PIP_ADAPTER_UNICAST_ADDRESS_LH FirstUnicastAddress;
243 PIP_ADAPTER_ANYCAST_ADDRESS_XP FirstAnycastAddress;
244 PIP_ADAPTER_MULTICAST_ADDRESS_XP FirstMulticastAddress;
245 PIP_ADAPTER_DNS_SERVER_ADDRESS_XP FirstDnsServerAddress;
246 PWCHAR DnsSuffix;
247 PWCHAR Description;
248 PWCHAR FriendlyName;
249 BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
250 ULONG PhysicalAddressLength;
251 __C89_NAMELESS union {
252 ULONG Flags;
253 __C89_NAMELESS struct {
254 ULONG DdnsEnabled : 1;
255 ULONG RegisterAdapterSuffix : 1;
256 ULONG Dhcpv4Enabled : 1;
257 ULONG ReceiveOnly : 1;
258 ULONG NoMulticast : 1;
259 ULONG Ipv6OtherStatefulConfig : 1;
260 ULONG NetbiosOverTcpipEnabled : 1;
261 ULONG Ipv4Enabled : 1;
262 ULONG Ipv6Enabled : 1;
263 ULONG Ipv6ManagedAddressConfigurationSupported : 1;
264 };
265 };
266 ULONG Mtu;
267 IFTYPE IfType;
268 IF_OPER_STATUS OperStatus;
269 IF_INDEX Ipv6IfIndex;
270 ULONG ZoneIndices[16];
271 PIP_ADAPTER_PREFIX_XP FirstPrefix;
272
273 ULONG64 TransmitLinkSpeed;
274 ULONG64 ReceiveLinkSpeed;
275 PIP_ADAPTER_WINS_SERVER_ADDRESS_LH FirstWinsServerAddress;
276 PIP_ADAPTER_GATEWAY_ADDRESS_LH FirstGatewayAddress;
277 ULONG Ipv4Metric;
278 ULONG Ipv6Metric;
279 IF_LUID Luid;
280 SOCKET_ADDRESS Dhcpv4Server;
281 NET_IF_COMPARTMENT_ID CompartmentId;
282 NET_IF_NETWORK_GUID NetworkGuid;
283 NET_IF_CONNECTION_TYPE ConnectionType;
284 TUNNEL_TYPE TunnelType;
285
286 SOCKET_ADDRESS Dhcpv6Server;
287 BYTE Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH];
288 ULONG Dhcpv6ClientDuidLength;
289 ULONG Dhcpv6Iaid;
290#if (NTDDI_VERSION >= 0x06000100) /* NTDDI_VISTASP1 */
291 PIP_ADAPTER_DNS_SUFFIX FirstDnsSuffix;
292#endif
293 } IP_ADAPTER_ADDRESSES_LH, *PIP_ADAPTER_ADDRESSES_LH;
294
295 typedef struct _IP_ADAPTER_ADDRESSES_XP {
296 __C89_NAMELESS union {
297 ULONGLONG Alignment;
298 __C89_NAMELESS struct {
299 ULONG Length;
300 DWORD IfIndex;
301 };
302 };
303 struct _IP_ADAPTER_ADDRESSES_XP *Next;
304 PCHAR AdapterName;
305 PIP_ADAPTER_UNICAST_ADDRESS_XP FirstUnicastAddress;
306 PIP_ADAPTER_ANYCAST_ADDRESS_XP FirstAnycastAddress;
307 PIP_ADAPTER_MULTICAST_ADDRESS_XP FirstMulticastAddress;
308 PIP_ADAPTER_DNS_SERVER_ADDRESS_XP FirstDnsServerAddress;
309 PWCHAR DnsSuffix;
310 PWCHAR Description;
311 PWCHAR FriendlyName;
312 BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
313 DWORD PhysicalAddressLength;
314 DWORD Flags;
315 DWORD Mtu;
316 DWORD IfType;
317 IF_OPER_STATUS OperStatus;
318 DWORD Ipv6IfIndex;
319 DWORD ZoneIndices[16];
320 PIP_ADAPTER_PREFIX_XP FirstPrefix;
321 } IP_ADAPTER_ADDRESSES_XP,*PIP_ADAPTER_ADDRESSES_XP;
322
323#if (_WIN32_WINNT >= 0x0600)
324 typedef IP_ADAPTER_ADDRESSES_LH IP_ADAPTER_ADDRESSES;
325 typedef IP_ADAPTER_ADDRESSES_LH *PIP_ADAPTER_ADDRESSES;
326#else /* _WIN32_WINNT >= 0x0501 */
327 typedef IP_ADAPTER_ADDRESSES_XP IP_ADAPTER_ADDRESSES;
328 typedef IP_ADAPTER_ADDRESSES_XP *PIP_ADAPTER_ADDRESSES;
329#endif
330
331#define GAA_FLAG_SKIP_UNICAST 0x0001
332#define GAA_FLAG_SKIP_ANYCAST 0x0002
333#define GAA_FLAG_SKIP_MULTICAST 0x0004
334#define GAA_FLAG_SKIP_DNS_SERVER 0x0008
335#define GAA_FLAG_INCLUDE_PREFIX 0x0010
336#define GAA_FLAG_SKIP_FRIENDLY_NAME 0x0020
337#define GAA_FLAG_INCLUDE_WINS_INFO 0x0040
338#define GAA_FLAG_INCLUDE_GATEWAYS 0x0080
339#define GAA_FLAG_INCLUDE_ALL_INTERFACES 0x0100
340#define GAA_FLAG_INCLUDE_ALL_COMPARTMENTS 0x0200
341#define GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER 0x0400
342#endif /* _WINSOCK2API_ */
343
344 typedef struct _IP_PER_ADAPTER_INFO {
345 UINT AutoconfigEnabled;
346 UINT AutoconfigActive;
347 PIP_ADDR_STRING CurrentDnsServer;
348 IP_ADDR_STRING DnsServerList;
349 } IP_PER_ADAPTER_INFO,*PIP_PER_ADAPTER_INFO;
350
351 typedef struct {
352 char HostName[MAX_HOSTNAME_LEN + 4];
353 char DomainName[MAX_DOMAIN_NAME_LEN + 4];
354 PIP_ADDR_STRING CurrentDnsServer;
355 IP_ADDR_STRING DnsServerList;
356 UINT NodeType;
357 char ScopeId[MAX_SCOPE_ID_LEN + 4];
358 UINT EnableRouting;
359 UINT EnableProxy;
360 UINT EnableDns;
361 } FIXED_INFO,*PFIXED_INFO;
362
363#ifndef IP_INTERFACE_NAME_INFO_DEFINED
364#define IP_INTERFACE_NAME_INFO_DEFINED
365
366 typedef struct ip_interface_name_info {
367 ULONG Index;
368 ULONG MediaType;
369 UCHAR ConnectionType;
370 UCHAR AccessType;
371 GUID DeviceGuid;
372 GUID InterfaceGuid;
373 } IP_INTERFACE_NAME_INFO,*PIP_INTERFACE_NAME_INFO;
374#endif
375
376#ifdef __cplusplus
377}
378#endif
379
380#endif /* #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= 0x0A00 */
381
382#endif /* IP_TYPES_INCLUDED */
383