Home | History | Annotate | Download | only in include
      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