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 src/core/sys/windows/_iprtrmib.d)
9  */
10 module core.sys.windows.iprtrmib;
11 version (Windows):
12 @system:
13 
14 import core.sys.windows.ipifcons;
15 import core.sys.windows.windef;
16 
17 // FIXME: check types of constants
18 
19 enum size_t
20     MAXLEN_PHYSADDR        =   8,
21     MAXLEN_IFDESCR         = 256,
22     MAX_INTERFACE_NAME_LEN = 256;
23 
24 enum {
25     MIB_IPNET_TYPE_OTHER = 1,
26     MIB_IPNET_TYPE_INVALID,
27     MIB_IPNET_TYPE_DYNAMIC,
28     MIB_IPNET_TYPE_STATIC
29 }
30 
31 enum {
32     MIB_TCP_RTO_OTHER = 1,
33     MIB_TCP_RTO_CONSTANT,
34     MIB_TCP_RTO_RSRE,
35     MIB_TCP_RTO_VANJ
36 }
37 
38 enum {
39     MIB_TCP_STATE_CLOSED = 1,
40     MIB_TCP_STATE_LISTEN,
41     MIB_TCP_STATE_SYN_SENT,
42     MIB_TCP_STATE_SYN_RCVD,
43     MIB_TCP_STATE_ESTAB,
44     MIB_TCP_STATE_FIN_WAIT1,
45     MIB_TCP_STATE_FIN_WAIT2,
46     MIB_TCP_STATE_CLOSE_WAIT,
47     MIB_TCP_STATE_CLOSING,
48     MIB_TCP_STATE_LAST_ACK,
49     MIB_TCP_STATE_TIME_WAIT,
50     MIB_TCP_STATE_DELETE_TCB // = 12
51 }
52 
53 enum DWORD
54     MIB_USE_CURRENT_TTL        = -1,
55     MIB_USE_CURRENT_FORWARDING = -1,
56     MIB_TCP_MAXCONN_DYNAMIC    = -1;
57 
58 struct MIB_IPADDRROW {
59     DWORD  dwAddr;
60     DWORD  dwIndex;
61     DWORD  dwMask;
62     DWORD  dwBCastAddr;
63     DWORD  dwReasmSize;
64     ushort unused1;
65     ushort unused2;
66 }
67 alias MIB_IPADDRROW* PMIB_IPADDRROW;
68 
69 struct MIB_IPADDRTABLE {
70     DWORD            dwNumEntries;
71     MIB_IPADDRROW[1] _table;
72 
73     MIB_IPADDRROW* table() return { return _table.ptr; }
74 }
75 alias MIB_IPADDRTABLE* PMIB_IPADDRTABLE;
76 
77 struct MIB_IPFORWARDROW {
78     DWORD dwForwardDest;
79     DWORD dwForwardMask;
80     DWORD dwForwardPolicy;
81     DWORD dwForwardNextHop;
82     DWORD dwForwardIfIndex;
83     DWORD dwForwardType;
84     DWORD dwForwardProto;
85     DWORD dwForwardAge;
86     DWORD dwForwardNextHopAS;
87     DWORD dwForwardMetric1;
88     DWORD dwForwardMetric2;
89     DWORD dwForwardMetric3;
90     DWORD dwForwardMetric4;
91     DWORD dwForwardMetric5;
92 }
93 alias MIB_IPFORWARDROW* PMIB_IPFORWARDROW;
94 
95 struct MIB_IPFORWARDTABLE {
96     DWORD               dwNumEntries;
97     MIB_IPFORWARDROW[1] _table;
98 
99     MIB_IPFORWARDROW* table() return { return _table.ptr; }
100 }
101 alias MIB_IPFORWARDTABLE* PMIB_IPFORWARDTABLE;
102 
103 struct MIB_IPNETROW {
104     DWORD dwIndex;
105     DWORD dwPhysAddrLen;
106     BYTE[MAXLEN_PHYSADDR] bPhysAddr;
107     DWORD dwAddr;
108     DWORD dwType;
109 }
110 alias MIB_IPNETROW* PMIB_IPNETROW;
111 
112 struct MIB_IPNETTABLE {
113     DWORD           dwNumEntries;
114     MIB_IPNETROW[1] _table;
115 
116     MIB_IPNETROW* table() return { return _table.ptr; }
117 }
118 alias MIB_IPNETTABLE* PMIB_IPNETTABLE;
119 
120 struct MIBICMPSTATS {
121     DWORD dwMsgs;
122     DWORD dwErrors;
123     DWORD dwDestUnreachs;
124     DWORD dwTimeExcds;
125     DWORD dwParmProbs;
126     DWORD dwSrcQuenchs;
127     DWORD dwRedirects;
128     DWORD dwEchos;
129     DWORD dwEchoReps;
130     DWORD dwTimestamps;
131     DWORD dwTimestampReps;
132     DWORD dwAddrMasks;
133     DWORD dwAddrMaskReps;
134 }
135 alias MIBICMPSTATS* PMIBICMPSTATS;
136 
137 struct MIBICMPINFO {
138     MIBICMPSTATS icmpInStats;
139     MIBICMPSTATS icmpOutStats;
140 }
141 alias MIBICMPINFO* PMIBICMPINFO;
142 
143 struct MIB_ICMP {
144     MIBICMPINFO stats;
145 }
146 alias MIB_ICMP* PMIB_ICMP;
147 
148 struct MIB_IFROW {
149     WCHAR[MAX_INTERFACE_NAME_LEN] wszName = 0;
150     DWORD dwIndex;
151     DWORD dwType;
152     DWORD dwMtu;
153     DWORD dwSpeed;
154     DWORD dwPhysAddrLen;
155     BYTE[MAXLEN_PHYSADDR] bPhysAddr;
156     DWORD dwAdminStatus;
157     DWORD dwOperStatus;
158     DWORD dwLastChange;
159     DWORD dwInOctets;
160     DWORD dwInUcastPkts;
161     DWORD dwInNUcastPkts;
162     DWORD dwInDiscards;
163     DWORD dwInErrors;
164     DWORD dwInUnknownProtos;
165     DWORD dwOutOctets;
166     DWORD dwOutUcastPkts;
167     DWORD dwOutNUcastPkts;
168     DWORD dwOutDiscards;
169     DWORD dwOutErrors;
170     DWORD dwOutQLen;
171     DWORD dwDescrLen;
172     BYTE[MAXLEN_IFDESCR] bDescr;
173 }
174 alias MIB_IFROW* PMIB_IFROW;
175 
176 struct MIB_IFTABLE {
177     DWORD        dwNumEntries;
178     MIB_IFROW[1] _table;
179 
180     MIB_IFROW* table() return { return _table.ptr; }
181 }
182 alias MIB_IFTABLE* PMIB_IFTABLE;
183 
184 struct MIB_IPSTATS {
185     DWORD dwForwarding;
186     DWORD dwDefaultTTL;
187     DWORD dwInReceives;
188     DWORD dwInHdrErrors;
189     DWORD dwInAddrErrors;
190     DWORD dwForwDatagrams;
191     DWORD dwInUnknownProtos;
192     DWORD dwInDiscards;
193     DWORD dwInDelivers;
194     DWORD dwOutRequests;
195     DWORD dwRoutingDiscards;
196     DWORD dwOutDiscards;
197     DWORD dwOutNoRoutes;
198     DWORD dwReasmTimeout;
199     DWORD dwReasmReqds;
200     DWORD dwReasmOks;
201     DWORD dwReasmFails;
202     DWORD dwFragOks;
203     DWORD dwFragFails;
204     DWORD dwFragCreates;
205     DWORD dwNumIf;
206     DWORD dwNumAddr;
207     DWORD dwNumRoutes;
208 }
209 alias MIB_IPSTATS* PMIB_IPSTATS;
210 
211 struct MIB_TCPSTATS {
212     DWORD dwRtoAlgorithm;
213     DWORD dwRtoMin;
214     DWORD dwRtoMax;
215     DWORD dwMaxConn;
216     DWORD dwActiveOpens;
217     DWORD dwPassiveOpens;
218     DWORD dwAttemptFails;
219     DWORD dwEstabResets;
220     DWORD dwCurrEstab;
221     DWORD dwInSegs;
222     DWORD dwOutSegs;
223     DWORD dwRetransSegs;
224     DWORD dwInErrs;
225     DWORD dwOutRsts;
226     DWORD dwNumConns;
227 }
228 alias MIB_TCPSTATS* PMIB_TCPSTATS;
229 
230 struct MIB_TCPROW {
231     DWORD dwState;
232     DWORD dwLocalAddr;
233     DWORD dwLocalPort;
234     DWORD dwRemoteAddr;
235     DWORD dwRemotePort;
236 }
237 alias MIB_TCPROW* PMIB_TCPROW;
238 
239 struct MIB_TCPTABLE {
240     DWORD         dwNumEntries;
241     MIB_TCPROW[1] _table;
242 
243     MIB_TCPROW* table() return { return _table.ptr; }
244 }
245 alias MIB_TCPTABLE* PMIB_TCPTABLE;
246 
247 struct MIB_UDPSTATS {
248     DWORD dwInDatagrams;
249     DWORD dwNoPorts;
250     DWORD dwInErrors;
251     DWORD dwOutDatagrams;
252     DWORD dwNumAddrs;
253 }
254 alias MIB_UDPSTATS* PMIB_UDPSTATS;
255 
256 struct MIB_UDPROW {
257     DWORD dwLocalAddr;
258     DWORD dwLocalPort;
259 }
260 alias MIB_UDPROW* PMIB_UDPROW;
261 
262 struct MIB_UDPTABLE {
263     DWORD         dwNumEntries;
264     MIB_UDPROW[1] _table;
265 
266     MIB_UDPROW* table() return { return _table.ptr; }
267 }
268 alias MIB_UDPTABLE* PMIB_UDPTABLE;
269