zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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