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