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