IPTypes.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:7k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*++
  2. Copyright (c) Microsoft Corporation. All rights reserved.
  3. Module Name:
  4.     iptypes.h
  5. --*/
  6. #ifndef IP_TYPES_INCLUDED
  7. #define IP_TYPES_INCLUDED
  8. #if _MSC_VER > 1000
  9. #pragma once
  10. #endif
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. #pragma warning(disable:4201)
  15. #include <time.h>
  16. // Definitions and structures used by getnetworkparams and getadaptersinfo apis
  17. #define MAX_ADAPTER_DESCRIPTION_LENGTH  128 // arb.
  18. #define MAX_ADAPTER_NAME_LENGTH         256 // arb.
  19. #define MAX_ADAPTER_ADDRESS_LENGTH      8   // arb.
  20. #define DEFAULT_MINIMUM_ENTITIES        32  // arb.
  21. #define MAX_HOSTNAME_LEN                128 // arb.
  22. #define MAX_DOMAIN_NAME_LEN             128 // arb.
  23. #define MAX_SCOPE_ID_LEN                256 // arb.
  24. //
  25. // types
  26. //
  27. // Node Type
  28. #define BROADCAST_NODETYPE              1
  29. #define PEER_TO_PEER_NODETYPE           2
  30. #define MIXED_NODETYPE                  4
  31. #define HYBRID_NODETYPE                 8
  32. //
  33. // IP_ADDRESS_STRING - store an IP address as a dotted decimal string
  34. //
  35. typedef struct {
  36.     char String[4 * 4];
  37. } IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;
  38. //
  39. // IP_ADDR_STRING - store an IP address with its corresponding subnet mask,
  40. // both as dotted decimal strings
  41. //
  42. typedef struct _IP_ADDR_STRING {
  43.     struct _IP_ADDR_STRING* Next;
  44.     IP_ADDRESS_STRING IpAddress;
  45.     IP_MASK_STRING IpMask;
  46.     DWORD Context;
  47. } IP_ADDR_STRING, *PIP_ADDR_STRING;
  48. //
  49. // ADAPTER_INFO - per-adapter information. All IP addresses are stored as
  50. // strings
  51. //
  52. typedef struct _IP_ADAPTER_INFO {
  53.     struct _IP_ADAPTER_INFO* Next;
  54.     DWORD ComboIndex;
  55.     char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
  56.     char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
  57.     UINT AddressLength;
  58.     BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
  59.     DWORD Index;
  60.     UINT Type;
  61.     UINT DhcpEnabled;
  62.     PIP_ADDR_STRING CurrentIpAddress;
  63.     IP_ADDR_STRING IpAddressList;
  64.     IP_ADDR_STRING GatewayList;
  65.     IP_ADDR_STRING DhcpServer;
  66.     BOOL HaveWins;
  67.     IP_ADDR_STRING PrimaryWinsServer;
  68.     IP_ADDR_STRING SecondaryWinsServer;
  69.     time_t LeaseObtained;
  70.     time_t LeaseExpires;
  71. } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
  72. #ifdef _WINSOCK2API_
  73. //
  74. // The following types require Winsock2.
  75. //
  76. typedef enum {
  77.     IpPrefixOriginOther = 0,
  78.     IpPrefixOriginManual,
  79.     IpPrefixOriginWellKnown,
  80.     IpPrefixOriginDhcp,
  81.     IpPrefixOriginRouterAdvertisement,
  82. } IP_PREFIX_ORIGIN;
  83. typedef enum {
  84.     IpSuffixOriginOther = 0,
  85.     IpSuffixOriginManual,
  86.     IpSuffixOriginWellKnown,
  87.     IpSuffixOriginDhcp,
  88.     IpSuffixOriginLinkLayerAddress,
  89.     IpSuffixOriginRandom,
  90. } IP_SUFFIX_ORIGIN;
  91. typedef enum {
  92.     IpDadStateInvalid    = 0,
  93.     IpDadStateTentative,
  94.     IpDadStateDuplicate,
  95.     IpDadStateDeprecated,
  96.     IpDadStatePreferred,
  97. } IP_DAD_STATE;
  98. typedef struct _IP_ADAPTER_UNICAST_ADDRESS {
  99.     union {
  100.         ULONGLONG Alignment;
  101.         struct { 
  102.             ULONG Length;
  103.             DWORD Flags;
  104.         };
  105.     };
  106.     struct _IP_ADAPTER_UNICAST_ADDRESS *Next;
  107.     SOCKET_ADDRESS Address;
  108.     IP_PREFIX_ORIGIN PrefixOrigin;
  109.     IP_SUFFIX_ORIGIN SuffixOrigin;
  110.     IP_DAD_STATE DadState;
  111.     ULONG ValidLifetime;
  112.     ULONG PreferredLifetime;
  113.     ULONG LeaseLifetime;
  114. } IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS;
  115. typedef struct _IP_ADAPTER_ANYCAST_ADDRESS {
  116.     union {
  117.         ULONGLONG Alignment;
  118.         struct { 
  119.             ULONG Length;
  120.             DWORD Flags;
  121.         };
  122.     };
  123.     struct _IP_ADAPTER_ANYCAST_ADDRESS *Next;
  124.     SOCKET_ADDRESS Address;
  125. } IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS;
  126. typedef struct _IP_ADAPTER_MULTICAST_ADDRESS {
  127.     union {
  128.         ULONGLONG Alignment;
  129.         struct {
  130.             ULONG Length;
  131.             DWORD Flags;
  132.         };
  133.     };
  134.     struct _IP_ADAPTER_MULTICAST_ADDRESS *Next;
  135.     SOCKET_ADDRESS Address;
  136. } IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS;
  137. //
  138. // Per-address Flags
  139. //
  140. #define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE 0x01
  141. #define IP_ADAPTER_ADDRESS_TRANSIENT    0x02
  142. typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS {
  143.     union {
  144.         ULONGLONG Alignment;
  145.         struct {
  146.             ULONG Length;
  147.             DWORD Reserved;
  148.         };
  149.     };
  150.     struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next;
  151.     SOCKET_ADDRESS Address;
  152. } IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS;
  153. //
  154. // Per-adapter Flags
  155. //
  156. #define IP_ADAPTER_DDNS_ENABLED            0x01
  157. #define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x02
  158. #define IP_ADAPTER_DHCP_ENABLED            0x04
  159. //
  160. // OperStatus values from RFC 2863
  161. //
  162. typedef enum {
  163.     IfOperStatusUp = 1,
  164.     IfOperStatusDown,
  165.     IfOperStatusTesting,
  166.     IfOperStatusUnknown,
  167.     IfOperStatusDormant,
  168.     IfOperStatusNotPresent,
  169.     IfOperStatusLowerLayerDown
  170. } IF_OPER_STATUS;
  171. typedef struct _IP_ADAPTER_ADDRESSES {
  172.     union {
  173.         ULONGLONG Alignment;
  174.         struct {
  175.             ULONG Length;
  176.             DWORD IfIndex;
  177.         };
  178.     };
  179.     struct _IP_ADAPTER_ADDRESSES *Next;
  180.     PCHAR AdapterName;
  181.     PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress;
  182.     PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress;
  183.     PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress;
  184.     PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress;
  185.     PWCHAR DnsSuffix;
  186.     PWCHAR Description;
  187.     PWCHAR FriendlyName;
  188.     BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
  189.     DWORD PhysicalAddressLength;
  190.     DWORD Flags;
  191.     DWORD Mtu;
  192.     DWORD IfType;
  193.     IF_OPER_STATUS OperStatus;
  194. } IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES;
  195. //
  196. // Flags used as argument to GetAdaptersAddresses()
  197. //
  198. #define GAA_FLAG_SKIP_UNICAST      0x0001
  199. #define GAA_FLAG_SKIP_ANYCAST      0x0002
  200. #define GAA_FLAG_SKIP_MULTICAST    0x0004
  201. #define GAA_FLAG_SKIP_DNS_SERVER   0x0008
  202. #endif /* _WINSOCK2API_ */
  203. //
  204. // IP_PER_ADAPTER_INFO - per-adapter IP information such as DNS server list.
  205. //
  206. typedef struct _IP_PER_ADAPTER_INFO {
  207.     UINT AutoconfigEnabled;
  208.     UINT AutoconfigActive;
  209.     PIP_ADDR_STRING CurrentDnsServer;
  210.     IP_ADDR_STRING DnsServerList;
  211. } IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO;
  212. //
  213. // FIXED_INFO - the set of IP-related information which does not depend on DHCP
  214. //
  215. typedef struct {
  216.     char HostName[MAX_HOSTNAME_LEN + 4] ;
  217.     char DomainName[MAX_DOMAIN_NAME_LEN + 4];
  218.     PIP_ADDR_STRING CurrentDnsServer;
  219.     IP_ADDR_STRING DnsServerList;
  220.     UINT NodeType;
  221.     char ScopeId[MAX_SCOPE_ID_LEN + 4];
  222.     UINT EnableRouting;
  223.     UINT EnableProxy;
  224.     UINT EnableDns;
  225. } FIXED_INFO, *PFIXED_INFO;
  226. #pragma warning(default:4201)
  227. #ifdef __cplusplus
  228. }
  229. #endif
  230. #endif