4 * Internet Protocol Type Definitions and Manifest Constants
9 * Written by Corinna Vinschen <corinna@vinschen.de>
10 * Copyright (C) 2000-2002, 2006, 2018, MinGW.org Project
13 * Permission is hereby granted, free of charge, to any person obtaining a
14 * copy of this software and associated documentation files (the "Software"),
15 * to deal in the Software without restriction, including without limitation
16 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 * and/or sell copies of the Software, and to permit persons to whom the
18 * Software is furnished to do so, subject to the following conditions:
20 * The above copyright notice and this permission notice (including the next
21 * paragraph) shall be included in all copies or substantial portions of the
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
30 * DEALINGS IN THE SOFTWARE.
34 #pragma GCC system_header
38 #define __need_time_t 1
39 #include <sys/types.h>
44 #define DEFAULT_MINIMUM_ENTITIES 32
46 #define MAX_ADAPTER_ADDRESS_LENGTH 8
47 #define MAX_ADAPTER_DESCRIPTION_LENGTH 128
48 #define MAX_ADAPTER_NAME_LENGTH 256
49 #define MAX_DOMAIN_NAME_LEN 128
50 #define MAX_HOSTNAME_LEN 128
51 #define MAX_SCOPE_ID_LEN 256
53 #define BROADCAST_NODETYPE 1
54 #define PEER_TO_PEER_NODETYPE 2
55 #define MIXED_NODETYPE 4
56 #define HYBRID_NODETYPE 8
57 #define IF_OTHER_ADAPTERTYPE 0
58 #define IF_ETHERNET_ADAPTERTYPE 1
59 #define IF_TOKEN_RING_ADAPTERTYPE 2
60 #define IF_FDDI_ADAPTERTYPE 3
61 #define IF_PPP_ADAPTERTYPE 4
62 #define IF_LOOPBACK_ADAPTERTYPE 5
64 #if _WIN32_WINNT >= _WIN32_WINNT_WINXP
65 #define IP_ADAPTER_DDNS_ENABLED 0x00000001
66 #define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x00000002
67 #define IP_ADAPTER_DHCP_ENABLED 0x00000004
68 #define IP_ADAPTER_RECEIVE_ONLY 0x00000008
69 #define IP_ADAPTER_NO_MULTICAST 0x00000010
70 #define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x00000020
71 #define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE 0x00000001
72 #define IP_ADAPTER_ADDRESS_TRANSIENT 0x00000002
75 typedef struct { char String[16]; }
76 IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;
78 typedef struct _IP_ADDR_STRING
79 { struct _IP_ADDR_STRING *Next;
80 IP_ADDRESS_STRING IpAddress;
81 IP_MASK_STRING IpMask;
83 } IP_ADDR_STRING, *PIP_ADDR_STRING;
85 typedef struct _IP_ADAPTER_INFO
86 /* This structure includes a pair of fields, which are declared, according to
87 * https://msdn.microsoft.com/en-us/library/windows/desktop/aa366062(v=vs.85).aspx
88 * as being of type time_t, yet they MUST be equivalent to __time32_t on 32-bit
89 * versions or MS-Windows, and to __time64_t on 64-bit versions. Since VS-2005,
90 * Microsoft have made the definition of time_t ambiguous, on 32-bit Windows,
91 * and have placed the onus on users to specify _USE_32_BIT_TIME_T in any
92 * translation unit which uses this structure, to resolve the ambiguity;
97 /* ...by introducing a local type replacement macro, to ensure that the
98 * field definitions become unequivocally 64-bit on Win64...
100 # define __dhcp_time_t __time64_t
102 /* ...and 32-bit, on Win32.
104 # define __dhcp_time_t __time32_t
106 { struct _IP_ADAPTER_INFO *Next;
108 char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
109 char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
111 BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
115 PIP_ADDR_STRING CurrentIpAddress;
116 IP_ADDR_STRING IpAddressList;
117 IP_ADDR_STRING GatewayList;
118 IP_ADDR_STRING DhcpServer;
120 IP_ADDR_STRING PrimaryWinsServer;
121 IP_ADDR_STRING SecondaryWinsServer;
122 __dhcp_time_t LeaseObtained;
123 __dhcp_time_t LeaseExpires;
124 } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
127 typedef struct _IP_PER_ADAPTER_INFO
128 { UINT AutoconfigEnabled;
129 UINT AutoconfigActive;
130 PIP_ADDR_STRING CurrentDnsServer;
131 IP_ADDR_STRING DnsServerList;
132 } IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO;
134 typedef struct _FIXED_INFO
135 { char HostName[MAX_HOSTNAME_LEN + 4] ;
136 char DomainName[MAX_DOMAIN_NAME_LEN + 4];
137 PIP_ADDR_STRING CurrentDnsServer;
138 IP_ADDR_STRING DnsServerList;
140 char ScopeId[MAX_SCOPE_ID_LEN + 4];
144 } FIXED_INFO, *PFIXED_INFO;
146 #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP) && defined _WINSOCK2_H
149 { IfOperStatusUp = 1,
154 IfOperStatusNotPresent,
155 IfOperStatusLowerLayerDown
159 { IpDadStateInvalid = 0,
162 IpDadStateDeprecated,
167 { IpPrefixOriginOther = 0,
168 IpPrefixOriginManual,
169 IpPrefixOriginWellKnown,
171 IpPrefixOriginRouterAdvertisement
175 { IpSuffixOriginOther = 0,
176 IpSuffixOriginManual,
177 IpSuffixOriginWellKnown,
179 IpSuffixOriginLinkLayerAddress,
184 { ScopeLevelInterface = 1,
186 ScopeLevelSubnet = 3,
189 ScopeLevelOrganization = 8,
190 ScopeLevelGlobal = 14
196 UCHAR ConnectionType;
200 } IP_INTERFACE_NAME_INFO, *PIP_INTERFACE_NAME_INFO;
202 typedef struct _IP_ADAPTER_ANYCAST_ADDRESS
203 { _ANONYMOUS_UNION union
204 { ULONGLONG Alignment;
205 _ANONYMOUS_STRUCT struct
210 struct _IP_ADAPTER_ANYCAST_ADDRESS *Next;
211 SOCKET_ADDRESS Address;
212 } IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS;
214 typedef struct _IP_ADAPTER_MULTICAST_ADDRESS
215 { _ANONYMOUS_UNION union
216 { ULONGLONG Alignment;
217 _ANONYMOUS_STRUCT struct
222 struct _IP_ADAPTER_MULTICAST_ADDRESS *Next;
223 SOCKET_ADDRESS Address;
224 } IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS;
226 typedef struct _IP_ADAPTER_UNICAST_ADDRESS
227 { _ANONYMOUS_UNION union
228 { ULONGLONG Alignment;
229 _ANONYMOUS_STRUCT struct
234 struct _IP_ADAPTER_UNICAST_ADDRESS *Next;
235 SOCKET_ADDRESS Address;
236 IP_PREFIX_ORIGIN PrefixOrigin;
237 IP_SUFFIX_ORIGIN SuffixOrigin;
238 IP_DAD_STATE DadState;
240 ULONG PreferredLifetime;
242 } IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS;
244 typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS
245 { _ANONYMOUS_UNION union
246 { ULONGLONG Alignment;
247 _ANONYMOUS_STRUCT struct
252 struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next;
253 SOCKET_ADDRESS Address;
254 } IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS;
256 typedef struct _IP_ADAPTER_PREFIX
257 { _ANONYMOUS_UNION union
258 { ULONGLONG Alignment;
259 _ANONYMOUS_STRUCT struct
264 struct _IP_ADAPTER_PREFIX *Next;
265 SOCKET_ADDRESS Address;
267 } IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX;
269 typedef struct _IP_ADAPTER_ADDRESSES
270 { _ANONYMOUS_UNION union
271 { ULONGLONG Alignment;
272 _ANONYMOUS_STRUCT struct
277 struct _IP_ADAPTER_ADDRESSES *Next;
279 PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress;
280 PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress;
281 PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress;
282 PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress;
286 BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
287 DWORD PhysicalAddressLength;
291 IF_OPER_STATUS OperStatus;
293 DWORD ZoneIndices[16];
294 PIP_ADAPTER_PREFIX FirstPrefix;
295 } IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES;
297 #endif /* WinXP && _WINSOCK2_H */
301 #endif /* !_IPTYPES_H: $RCSfile$: end of file */