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