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