1/**
2 * Windows API header module
3 *
4 * Translated from MinGW Windows headers
5 *
6 * Authors: Stewart Gordon
7 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8 * Source: $(DRUNTIMESRC core/sys/windows/_ipexport.d)
9 */
10module core.sys.windows.ipexport;
11version (Windows):
12@system:
13
14import core.sys.windows.windef;
15
16enum size_t MAX_ADAPTER_NAME = 128;
17
18// IP STATUS flags
19enum : IP_STATUS {
20    IP_SUCCESS         =     0,
21    IP_STATUS_BASE     = 11000,
22    IP_BUF_TOO_SMALL,
23    IP_DEST_NET_UNREACHABLE,
24    IP_DEST_HOST_UNREACHABLE,
25    IP_DEST_PROT_UNREACHABLE,
26    IP_DEST_PORT_UNREACHABLE,
27    IP_NO_RESOURCES,
28    IP_BAD_OPTION,
29    IP_HW_ERROR,
30    IP_PACKET_TOO_BIG,
31    IP_REQ_TIMED_OUT,
32    IP_BAD_REQ,
33    IP_BAD_ROUTE,
34    IP_TTL_EXPIRED_TRANSIT,
35    IP_TTL_EXPIRED_REASSEM,
36    IP_PARAM_PROBLEM,
37    IP_SOURCE_QUENCH,
38    IP_OPTION_TOO_BIG,
39    IP_BAD_DESTINATION,
40    IP_ADDR_DELETED,
41    IP_SPEC_MTU_CHANGE,
42    IP_MTU_CHANGE,
43    IP_UNLOAD,      // = IP_STATUS_BASE + 22
44    IP_GENERAL_FAILURE = IP_STATUS_BASE + 50,
45    MAX_IP_STATUS      = IP_GENERAL_FAILURE,
46    IP_PENDING         = IP_STATUS_BASE + 255
47}
48
49// IP header Flags values
50enum byte IP_FLAG_DF = 2;
51
52// IP Option types
53enum : ubyte {
54    IP_OPT_EOL          = 0,
55    IP_OPT_NOP          = 0x01,
56    IP_OPT_RR           = 0x07,
57    IP_OPT_SECURITY     = 0x82,
58    IP_OPT_LSRR         = 0x83,
59    IP_OPT_SSRR         = 0x89,
60    IP_OPT_TS           = 0x44,
61    IP_OPT_SID          = 0x88,
62    IP_OPT_ROUTER_ALERT = 0x94
63}
64
65enum ubyte MAX_OPT_SIZE = 40;
66
67alias uint IPAddr, IPMask, IP_STATUS;
68
69struct IP_OPTION_INFORMATION {
70    ubyte  Ttl;
71    ubyte  Tos;
72    ubyte  Flags;
73    ubyte  OptionsSize;
74    ubyte* OptionsData;
75}
76alias IP_OPTION_INFORMATION* PIP_OPTION_INFORMATION;
77
78struct ICMP_ECHO_REPLY {
79  IPAddr Address;
80  uint   Status;
81  uint   RoundTripTime;
82  ushort DataSize;
83  ushort Reserved;
84  void*  Data;
85  IP_OPTION_INFORMATION Options;
86}
87alias ICMP_ECHO_REPLY* PICMP_ECHO_REPLY;
88
89struct IP_ADAPTER_INDEX_MAP {
90    ULONG                   Index;
91    WCHAR[MAX_ADAPTER_NAME] Name = 0;
92}
93alias IP_ADAPTER_INDEX_MAP* PIP_ADAPTER_INDEX_MAP;
94
95struct IP_INTERFACE_INFO {
96    LONG                    NumAdapters;
97    IP_ADAPTER_INDEX_MAP[1] _Adapter;
98
99    IP_ADAPTER_INDEX_MAP* Adapter() return { return _Adapter.ptr; }
100}
101alias IP_INTERFACE_INFO* PIP_INTERFACE_INFO;
102
103struct IP_UNIDIRECTIONAL_ADAPTER_ADDRESS {
104    ULONG     NumAdapters;
105    IPAddr[1] _Address;
106
107    IPAddr* Address() return { return _Address.ptr; }
108}
109alias IP_UNIDIRECTIONAL_ADAPTER_ADDRESS* PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS;
110