iptypes.h 11 KB

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