OSDN Git Service

Make <winnls.h> header effectively self-contained.
[mingw/mingw-org-wsl.git] / w32api / include / iptypes.h
1 /*
2  * iptypes.h
3  *
4  * Internet Protocol Type Definitions and Manifest Constants
5  *
6  *
7  * $Id$
8  *
9  * Written by Corinna Vinschen <corinna@vinschen.de>
10  * Copyright (C) 2000-2002, 2006, 2018, MinGW.org Project
11  *
12  *
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:
19  *
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
22  * Software.
23  *
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.
31  *
32  */
33 #ifndef _IPTYPES_H
34 #pragma GCC system_header
35 #define _IPTYPES_H
36
37 #include <windef.h>
38 #define __need_time_t  1
39 #include <sys/types.h>
40 #undef __need_time_t
41
42 _BEGIN_C_DECLS
43
44 #define DEFAULT_MINIMUM_ENTITIES                        32
45
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
52
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
63
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
73 #endif
74
75 typedef struct { char String[16]; }
76 IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;
77
78 typedef struct _IP_ADDR_STRING
79 { struct _IP_ADDR_STRING                *Next;
80   IP_ADDRESS_STRING                      IpAddress;
81   IP_MASK_STRING                         IpMask;
82   DWORD                                  Context;
83 } IP_ADDR_STRING, *PIP_ADDR_STRING;
84
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;
93  * WE can do better...
94  */
95 #undef __dhcp_time_t
96 #ifdef _WIN64
97 /* ...by introducing a local type replacement macro, to ensure that the
98  * field definitions become unequivocally 64-bit on Win64...
99  */
100 # define __dhcp_time_t  __time64_t
101 #else
102 /* ...and 32-bit, on Win32.
103  */
104 # define __dhcp_time_t  __time32_t
105 #endif
106 { struct _IP_ADAPTER_INFO       *Next;
107   DWORD                          ComboIndex;
108   char                           AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
109   char                           Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
110   UINT                           AddressLength;
111   BYTE                           Address[MAX_ADAPTER_ADDRESS_LENGTH];
112   DWORD                          Index;
113   UINT                           Type;
114   UINT                           DhcpEnabled;
115   PIP_ADDR_STRING                CurrentIpAddress;
116   IP_ADDR_STRING                 IpAddressList;
117   IP_ADDR_STRING                 GatewayList;
118   IP_ADDR_STRING                 DhcpServer;
119   BOOL                           HaveWins;
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;
125 #undef __dhcp_time_t
126
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;
133
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;
139   UINT                           NodeType;
140   char                           ScopeId[MAX_SCOPE_ID_LEN + 4];
141   UINT                           EnableRouting;
142   UINT                           EnableProxy;
143   UINT                           EnableDns;
144 } FIXED_INFO, *PFIXED_INFO;
145
146 #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP) && defined _WINSOCK2_H
147
148 typedef enum
149 { IfOperStatusUp                =        1,
150   IfOperStatusDown,
151   IfOperStatusTesting,
152   IfOperStatusUnknown,
153   IfOperStatusDormant,
154   IfOperStatusNotPresent,
155   IfOperStatusLowerLayerDown
156 } IF_OPER_STATUS;
157
158 typedef enum
159 { IpDadStateInvalid             =        0,
160   IpDadStateTentative,
161   IpDadStateDuplicate,
162   IpDadStateDeprecated,
163   IpDadStatePreferred
164 } IP_DAD_STATE;
165
166 typedef enum
167 { IpPrefixOriginOther           =        0,
168   IpPrefixOriginManual,
169   IpPrefixOriginWellKnown,
170   IpPrefixOriginDhcp,
171   IpPrefixOriginRouterAdvertisement
172 } IP_PREFIX_ORIGIN;
173
174 typedef enum
175 { IpSuffixOriginOther           =        0,
176   IpSuffixOriginManual,
177   IpSuffixOriginWellKnown,
178   IpSuffixOriginDhcp,
179   IpSuffixOriginLinkLayerAddress,
180   IpSuffixOriginRandom
181 } IP_SUFFIX_ORIGIN;
182
183 typedef enum
184 { ScopeLevelInterface           =        1,
185   ScopeLevelLink                =        2,
186   ScopeLevelSubnet              =        3,
187   ScopeLevelAdmin               =        4,
188   ScopeLevelSite                =        5,
189   ScopeLevelOrganization        =        8,
190   ScopeLevelGlobal              =       14
191 } SCOPE_LEVEL;
192
193 typedef struct
194 { ULONG                                  Index;
195   ULONG                                  MediaType;
196   UCHAR                                  ConnectionType;
197   UCHAR                                  AccessType;
198   GUID                                   DeviceGuid;
199   GUID                                   InterfaceGuid;
200 } IP_INTERFACE_NAME_INFO, *PIP_INTERFACE_NAME_INFO;
201
202 typedef struct _IP_ADAPTER_ANYCAST_ADDRESS
203 { _ANONYMOUS_UNION union
204   { ULONGLONG                              Alignment;
205     _ANONYMOUS_STRUCT struct
206     { ULONG                                  Length;
207       DWORD                                  Flags;
208     }                                      DUMMYSTRUCTNAME;
209   }                                      DUMMYUNIONNAME;
210   struct _IP_ADAPTER_ANYCAST_ADDRESS    *Next;
211   SOCKET_ADDRESS                         Address;
212 } IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS;
213
214 typedef struct _IP_ADAPTER_MULTICAST_ADDRESS
215 { _ANONYMOUS_UNION union
216   { ULONGLONG                              Alignment;
217     _ANONYMOUS_STRUCT struct
218     { ULONG                                  Length;
219       DWORD                                  Flags;
220     }                                      DUMMYSTRUCTNAME;
221   }                                      DUMMYUNIONNAME;
222   struct _IP_ADAPTER_MULTICAST_ADDRESS  *Next;
223   SOCKET_ADDRESS                         Address;
224 } IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS;
225
226 typedef struct _IP_ADAPTER_UNICAST_ADDRESS
227 { _ANONYMOUS_UNION union
228   { ULONGLONG                              Alignment;
229     _ANONYMOUS_STRUCT struct
230     { ULONG                                  Length;
231       DWORD                                  Flags;
232     }                                      DUMMYSTRUCTNAME;
233   }                                      DUMMYUNIONNAME;
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;
239   ULONG                                  ValidLifetime;
240   ULONG                                  PreferredLifetime;
241   ULONG                                  LeaseLifetime;
242 } IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS;
243
244 typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS
245 { _ANONYMOUS_UNION union
246   { ULONGLONG                              Alignment;
247     _ANONYMOUS_STRUCT struct
248     { ULONG                                  Length;
249       DWORD                                  Reserved;
250     }                                      DUMMYSTRUCTNAME;
251   }                                      DUMMYUNIONNAME;
252   struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next;
253   SOCKET_ADDRESS                         Address;
254 } IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS;
255
256 typedef struct _IP_ADAPTER_PREFIX
257 { _ANONYMOUS_UNION union
258   { ULONGLONG                              Alignment;
259     _ANONYMOUS_STRUCT struct
260     { ULONG                                  Length;
261       DWORD                                  Flags;
262     }                                      DUMMYSTRUCTNAME;
263   }                                      DUMMYUNIONNAME;
264   struct _IP_ADAPTER_PREFIX             *Next;
265   SOCKET_ADDRESS                         Address;
266   ULONG                                  PrefixLength;
267 } IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX;
268
269 typedef struct _IP_ADAPTER_ADDRESSES
270 { _ANONYMOUS_UNION union
271   { ULONGLONG                              Alignment;
272     _ANONYMOUS_STRUCT struct
273     { ULONG                                  Length;
274       DWORD                                  IfIndex;
275     }                                      DUMMYSTRUCTNAME;
276   }                                      DUMMYUNIONNAME;
277   struct _IP_ADAPTER_ADDRESSES          *Next;
278   PCHAR                                  AdapterName;
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;
283   PWCHAR                                 DnsSuffix;
284   PWCHAR                                 Description;
285   PWCHAR                                 FriendlyName;
286   BYTE                                   PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
287   DWORD                                  PhysicalAddressLength;
288   DWORD                                  Flags;
289   DWORD                                  Mtu;
290   DWORD                                  IfType;
291   IF_OPER_STATUS                         OperStatus;
292   DWORD                                  Ipv6IfIndex;
293   DWORD                                  ZoneIndices[16];
294   PIP_ADAPTER_PREFIX                     FirstPrefix;
295 } IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES;
296
297 #endif  /* WinXP && _WINSOCK2_H */
298
299 _END_C_DECLS
300
301 #endif  /* !_IPTYPES_H: $RCSfile$: end of file */