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