Home | History | Annotate | Download | only in c-ares
      1 #ifndef HEADER_CARES_IPHLPAPI_H
      2 #define HEADER_CARES_IPHLPAPI_H
      3 
      4 /* Copyright 1998 by the Massachusetts Institute of Technology.
      5  * Copyright (C) 2004 - 2011 by Daniel Stenberg et al
      6  *
      7  * Permission to use, copy, modify, and distribute this
      8  * software and its documentation for any purpose and without
      9  * fee is hereby granted, provided that the above copyright
     10  * notice appear in all copies and that both that copyright
     11  * notice and this permission notice appear in supporting
     12  * documentation, and that the name of M.I.T. not be used in
     13  * advertising or publicity pertaining to distribution of the
     14  * software without specific, written prior permission.
     15  * M.I.T. makes no representations about the suitability of
     16  * this software for any purpose.  It is provided "as is"
     17  * without express or implied warranty.
     18  */
     19 
     20 #if defined(USE_WINSOCK)
     21 
     22 #ifndef INET_ADDRSTRLEN
     23 #define INET_ADDRSTRLEN  22
     24 #endif
     25 
     26 #ifndef INET6_ADDRSTRLEN
     27 #define INET6_ADDRSTRLEN 65
     28 #endif
     29 
     30 /* ---------------------------------- */
     31 #if !defined(_WS2DEF_)           && \
     32     !defined(__CSADDR_DEFINED__) && \
     33     !defined(__CSADDR_T_DEFINED)
     34 /* ---------------------------------- */
     35 
     36 typedef struct _SOCKET_ADDRESS {
     37   LPSOCKADDR lpSockaddr;
     38   INT iSockaddrLength;
     39 } SOCKET_ADDRESS, *PSOCKET_ADDRESS;
     40 
     41 typedef struct _CSADDR_INFO {
     42   SOCKET_ADDRESS LocalAddr;
     43   SOCKET_ADDRESS RemoteAddr;
     44   INT iSocketType;
     45   INT iProtocol;
     46 } CSADDR_INFO, *PCSADDR_INFO;
     47 
     48 /* --------------------------------- */
     49 #endif /* ! _WS2DEF_           && \  */
     50 /*        ! __CSADDR_DEFINED__ && \  */
     51 /*        ! __CSADDR_T_DEFINED       */
     52 /* --------------------------------- */
     53 
     54 /* ------------------------------- */
     55 #if !defined(IP_ADAPTER_DDNS_ENABLED)
     56 /* ------------------------------- */
     57 
     58 #define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE  0x0001
     59 #define IP_ADAPTER_ADDRESS_TRANSIENT     0x0002
     60 
     61 #define IP_ADAPTER_DDNS_ENABLED                0x0001
     62 #define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX     0x0002
     63 #define IP_ADAPTER_DHCP_ENABLED                0x0004
     64 #define IP_ADAPTER_RECEIVE_ONLY                0x0008
     65 #define IP_ADAPTER_NO_MULTICAST                0x0010
     66 #define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG  0x0020
     67 
     68 #define GAA_FLAG_SKIP_UNICAST        0x0001
     69 #define GAA_FLAG_SKIP_ANYCAST        0x0002
     70 #define GAA_FLAG_SKIP_MULTICAST      0x0004
     71 #define GAA_FLAG_SKIP_DNS_SERVER     0x0008
     72 #define GAA_FLAG_INCLUDE_PREFIX      0x0010
     73 #define GAA_FLAG_SKIP_FRIENDLY_NAME  0x0020
     74 
     75 typedef enum {
     76   IpPrefixOriginOther = 0,
     77   IpPrefixOriginManual,
     78   IpPrefixOriginWellKnown,
     79   IpPrefixOriginDhcp,
     80   IpPrefixOriginRouterAdvertisement
     81 } IP_PREFIX_ORIGIN;
     82 
     83 typedef enum {
     84   IpSuffixOriginOther = 0,
     85   IpSuffixOriginManual,
     86   IpSuffixOriginWellKnown,
     87   IpSuffixOriginDhcp,
     88   IpSuffixOriginLinkLayerAddress,
     89   IpSuffixOriginRandom
     90 } IP_SUFFIX_ORIGIN;
     91 
     92 typedef enum {
     93   IpDadStateInvalid = 0,
     94   IpDadStateTentative,
     95   IpDadStateDuplicate,
     96   IpDadStateDeprecated,
     97   IpDadStatePreferred
     98 } IP_DAD_STATE;
     99 
    100 typedef enum {
    101   IfOperStatusUp = 1,
    102   IfOperStatusDown,
    103   IfOperStatusTesting,
    104   IfOperStatusUnknown,
    105   IfOperStatusDormant,
    106   IfOperStatusNotPresent,
    107   IfOperStatusLowerLayerDown
    108 } IF_OPER_STATUS;
    109 
    110 typedef enum {
    111   ScopeLevelInterface    = 0x0001,
    112   ScopeLevelLink         = 0x0002,
    113   ScopeLevelSubnet       = 0x0003,
    114   ScopeLevelAdmin        = 0x0004,
    115   ScopeLevelSite         = 0x0005,
    116   ScopeLevelOrganization = 0x0008,
    117   ScopeLevelGlobal       = 0x000E
    118 } SCOPE_LEVEL;
    119 
    120 typedef struct _IP_ADAPTER_UNICAST_ADDRESS {
    121   union {
    122     ULONGLONG Alignment;
    123     struct {
    124       ULONG Length;
    125       DWORD Flags;
    126     } s;
    127   } u;
    128   struct _IP_ADAPTER_UNICAST_ADDRESS *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 } IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS;
    137 
    138 typedef struct _IP_ADAPTER_ANYCAST_ADDRESS {
    139   union {
    140     ULONGLONG Alignment;
    141     struct {
    142       ULONG Length;
    143       DWORD Flags;
    144     } s;
    145   } u;
    146   struct _IP_ADAPTER_ANYCAST_ADDRESS *Next;
    147   SOCKET_ADDRESS Address;
    148 } IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS;
    149 
    150 typedef struct _IP_ADAPTER_MULTICAST_ADDRESS {
    151   union {
    152     ULONGLONG Alignment;
    153     struct {
    154       ULONG Length;
    155       DWORD Flags;
    156     } s;
    157   } u;
    158   struct _IP_ADAPTER_MULTICAST_ADDRESS *Next;
    159   SOCKET_ADDRESS Address;
    160 } IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS;
    161 
    162 typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS {
    163   union {
    164     ULONGLONG Alignment;
    165     struct {
    166       ULONG Length;
    167       DWORD Reserved;
    168     } s;
    169   } u;
    170   struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next;
    171   SOCKET_ADDRESS Address;
    172 } IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS;
    173 
    174 typedef struct _IP_ADAPTER_PREFIX {
    175   union {
    176     ULONGLONG Alignment;
    177     struct {
    178       ULONG Length;
    179       DWORD Flags;
    180     } s;
    181   } u;
    182   struct _IP_ADAPTER_PREFIX *Next;
    183   SOCKET_ADDRESS Address;
    184   ULONG PrefixLength;
    185 } IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX;
    186 
    187 typedef struct _IP_ADAPTER_ADDRESSES {
    188   union {
    189     ULONGLONG Alignment;
    190     struct {
    191       ULONG Length;
    192       DWORD IfIndex;
    193     } s;
    194   } u;
    195   struct _IP_ADAPTER_ADDRESSES *Next;
    196   PCHAR AdapterName;
    197   PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress;
    198   PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress;
    199   PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress;
    200   PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress;
    201   PWCHAR DnsSuffix;
    202   PWCHAR Description;
    203   PWCHAR FriendlyName;
    204   BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
    205   DWORD PhysicalAddressLength;
    206   DWORD Flags;
    207   DWORD Mtu;
    208   DWORD IfType;
    209   IF_OPER_STATUS OperStatus;
    210   DWORD Ipv6IfIndex;
    211   DWORD ZoneIndices[16];
    212   PIP_ADAPTER_PREFIX FirstPrefix;
    213 } IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES;
    214 
    215 /* -------------------------------- */
    216 #endif /* ! IP_ADAPTER_DDNS_ENABLED */
    217 /* -------------------------------- */
    218 
    219 #endif /* USE_WINSOCK */
    220 
    221 #endif /* HEADER_CARES_IPHLPAPI_H */
    222