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