1 /** 2 * @file iptypes.h 3 * Copyright 2012, 2013 MinGW.org project 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 */ 24 #ifndef _IPTYPES_H 25 #define _IPTYPES_H 26 #pragma GCC system_header 27 #include <_mingw.h> 28 29 #include <sys/types.h> 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 #define DEFAULT_MINIMUM_ENTITIES 32 35 #define MAX_ADAPTER_ADDRESS_LENGTH 8 36 #define MAX_ADAPTER_DESCRIPTION_LENGTH 128 37 #define MAX_ADAPTER_NAME_LENGTH 256 38 #define MAX_DOMAIN_NAME_LEN 128 39 #define MAX_HOSTNAME_LEN 128 40 #define MAX_SCOPE_ID_LEN 256 41 #define BROADCAST_NODETYPE 1 42 #define PEER_TO_PEER_NODETYPE 2 43 #define MIXED_NODETYPE 4 44 #define HYBRID_NODETYPE 8 45 #define IF_OTHER_ADAPTERTYPE 0 46 #define IF_ETHERNET_ADAPTERTYPE 1 47 #define IF_TOKEN_RING_ADAPTERTYPE 2 48 #define IF_FDDI_ADAPTERTYPE 3 49 #define IF_PPP_ADAPTERTYPE 4 50 #define IF_LOOPBACK_ADAPTERTYPE 5 51 52 typedef struct { 53 char String[16]; 54 } IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING; 55 typedef struct _IP_ADDR_STRING { 56 struct _IP_ADDR_STRING* Next; 57 IP_ADDRESS_STRING IpAddress; 58 IP_MASK_STRING IpMask; 59 DWORD Context; 60 } IP_ADDR_STRING, *PIP_ADDR_STRING; 61 typedef struct _IP_ADAPTER_INFO { 62 struct _IP_ADAPTER_INFO* Next; 63 DWORD ComboIndex; 64 char AdapterName[MAX_ADAPTER_NAME_LENGTH+4]; 65 char Description[MAX_ADAPTER_DESCRIPTION_LENGTH+4]; 66 UINT AddressLength; 67 BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; 68 DWORD Index; 69 UINT Type; 70 UINT DhcpEnabled; 71 PIP_ADDR_STRING CurrentIpAddress; 72 IP_ADDR_STRING IpAddressList; 73 IP_ADDR_STRING GatewayList; 74 IP_ADDR_STRING DhcpServer; 75 BOOL HaveWins; 76 IP_ADDR_STRING PrimaryWinsServer; 77 IP_ADDR_STRING SecondaryWinsServer; 78 time_t LeaseObtained; 79 time_t LeaseExpires; 80 } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO; 81 typedef struct _IP_PER_ADAPTER_INFO { 82 UINT AutoconfigEnabled; 83 UINT AutoconfigActive; 84 PIP_ADDR_STRING CurrentDnsServer; 85 IP_ADDR_STRING DnsServerList; 86 } IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO; 87 typedef struct _FIXED_INFO { 88 char HostName[MAX_HOSTNAME_LEN+4] ; 89 char DomainName[MAX_DOMAIN_NAME_LEN+4]; 90 PIP_ADDR_STRING CurrentDnsServer; 91 IP_ADDR_STRING DnsServerList; 92 UINT NodeType; 93 char ScopeId[MAX_SCOPE_ID_LEN+4]; 94 UINT EnableRouting; 95 UINT EnableProxy; 96 UINT EnableDns; 97 } FIXED_INFO, *PFIXED_INFO; 98 99 #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP) 100 #define IP_ADAPTER_DDNS_ENABLED 0x00000001 101 #define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x00000002 102 #define IP_ADAPTER_DHCP_ENABLED 0x00000004 103 #define IP_ADAPTER_RECEIVE_ONLY 0x00000008 104 #define IP_ADAPTER_NO_MULTICAST 0x00000010 105 #define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x00000020 106 #define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE 0x00000001 107 #define IP_ADAPTER_ADDRESS_TRANSIENT 0x00000002 108 109 #if defined(_WINSOCK2_H) 110 typedef enum { 111 IfOperStatusUp = 1, 112 IfOperStatusDown, 113 IfOperStatusTesting, 114 IfOperStatusUnknown, 115 IfOperStatusDormant, 116 IfOperStatusNotPresent, 117 IfOperStatusLowerLayerDown 118 } IF_OPER_STATUS; 119 typedef enum { 120 IpDadStateInvalid = 0, 121 IpDadStateTentative, 122 IpDadStateDuplicate, 123 IpDadStateDeprecated, 124 IpDadStatePreferred 125 } IP_DAD_STATE; 126 typedef enum { 127 IpPrefixOriginOther = 0, 128 IpPrefixOriginManual, 129 IpPrefixOriginWellKnown, 130 IpPrefixOriginDhcp, 131 IpPrefixOriginRouterAdvertisement 132 } IP_PREFIX_ORIGIN; 133 typedef enum { 134 IpSuffixOriginOther = 0, 135 IpSuffixOriginManual, 136 IpSuffixOriginWellKnown, 137 IpSuffixOriginDhcp, 138 IpSuffixOriginLinkLayerAddress, 139 IpSuffixOriginRandom 140 } IP_SUFFIX_ORIGIN; 141 typedef enum { 142 ScopeLevelInterface = 1, 143 ScopeLevelLink = 2, 144 ScopeLevelSubnet = 3, 145 ScopeLevelAdmin = 4, 146 ScopeLevelSite = 5, 147 ScopeLevelOrganization = 8, 148 ScopeLevelGlobal = 14 149 } SCOPE_LEVEL; 150 typedef struct { 151 ULONG Index; 152 ULONG MediaType; 153 UCHAR ConnectionType; 154 UCHAR AccessType; 155 GUID DeviceGuid; 156 GUID InterfaceGuid; 157 } IP_INTERFACE_NAME_INFO,*PIP_INTERFACE_NAME_INFO; 158 typedef struct _IP_ADAPTER_ANYCAST_ADDRESS { 159 _ANONYMOUS_UNION union { 160 ULONGLONG Alignment; 161 _ANONYMOUS_STRUCT struct { 162 ULONG Length; 163 DWORD Flags; 164 } DUMMYSTRUCTNAME; 165 } DUMMYUNIONNAME; 166 struct _IP_ADAPTER_ANYCAST_ADDRESS* Next; 167 SOCKET_ADDRESS Address; 168 } IP_ADAPTER_ANYCAST_ADDRESS,*PIP_ADAPTER_ANYCAST_ADDRESS; 169 typedef struct _IP_ADAPTER_MULTICAST_ADDRESS { 170 _ANONYMOUS_UNION union { 171 ULONGLONG Alignment; 172 _ANONYMOUS_STRUCT struct { 173 ULONG Length; 174 DWORD Flags; 175 } DUMMYSTRUCTNAME; 176 } DUMMYUNIONNAME; 177 struct _IP_ADAPTER_MULTICAST_ADDRESS* Next; 178 SOCKET_ADDRESS Address; 179 } IP_ADAPTER_MULTICAST_ADDRESS,*PIP_ADAPTER_MULTICAST_ADDRESS; 180 typedef struct _IP_ADAPTER_UNICAST_ADDRESS { 181 _ANONYMOUS_UNION union { 182 ULONGLONG Alignment; 183 _ANONYMOUS_STRUCT struct { 184 ULONG Length; 185 DWORD Flags; 186 } DUMMYSTRUCTNAME; 187 } DUMMYUNIONNAME; 188 struct _IP_ADAPTER_UNICAST_ADDRESS* Next; 189 SOCKET_ADDRESS Address; 190 IP_PREFIX_ORIGIN PrefixOrigin; 191 IP_SUFFIX_ORIGIN SuffixOrigin; 192 IP_DAD_STATE DadState; 193 ULONG ValidLifetime; 194 ULONG PreferredLifetime; 195 ULONG LeaseLifetime; 196 } IP_ADAPTER_UNICAST_ADDRESS,*PIP_ADAPTER_UNICAST_ADDRESS; 197 typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS { 198 _ANONYMOUS_UNION union { 199 ULONGLONG Alignment; 200 _ANONYMOUS_STRUCT struct { 201 ULONG Length; 202 DWORD Reserved; 203 } DUMMYSTRUCTNAME; 204 } DUMMYUNIONNAME; 205 struct _IP_ADAPTER_DNS_SERVER_ADDRESS* Next; 206 SOCKET_ADDRESS Address; 207 } IP_ADAPTER_DNS_SERVER_ADDRESS,*PIP_ADAPTER_DNS_SERVER_ADDRESS; 208 typedef struct _IP_ADAPTER_PREFIX { 209 _ANONYMOUS_UNION union { 210 ULONGLONG Alignment; 211 _ANONYMOUS_STRUCT struct { 212 ULONG Length; 213 DWORD Flags; 214 } DUMMYSTRUCTNAME; 215 } DUMMYUNIONNAME; 216 struct _IP_ADAPTER_PREFIX* Next; 217 SOCKET_ADDRESS Address; 218 ULONG PrefixLength; 219 } IP_ADAPTER_PREFIX,*PIP_ADAPTER_PREFIX; 220 typedef struct _IP_ADAPTER_ADDRESSES { 221 _ANONYMOUS_UNION union { 222 ULONGLONG Alignment; 223 _ANONYMOUS_STRUCT struct { 224 ULONG Length; 225 DWORD IfIndex; 226 } DUMMYSTRUCTNAME; 227 } DUMMYUNIONNAME; 228 struct _IP_ADAPTER_ADDRESSES* Next; 229 PCHAR AdapterName; 230 PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress; 231 PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress; 232 PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress; 233 PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress; 234 PWCHAR DnsSuffix; 235 PWCHAR Description; 236 PWCHAR FriendlyName; 237 BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]; 238 DWORD PhysicalAddressLength; 239 DWORD Flags; 240 DWORD Mtu; 241 DWORD IfType; 242 IF_OPER_STATUS OperStatus; 243 DWORD Ipv6IfIndex; 244 DWORD ZoneIndices[16]; 245 PIP_ADAPTER_PREFIX FirstPrefix; 246 } IP_ADAPTER_ADDRESSES,*PIP_ADAPTER_ADDRESSES; 247 #endif /* _WINSOCK2_H */ 248 #endif /* _WIN32_WINNT >= _WIN32_WINNT_WINXP */ 249 250 #ifdef __cplusplus 251 } 252 #endif 253 #endif /* _IPTYPES_H */ 254