Reactos
1/*
2 * PROJECT: ReactOS PSDK
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: TCPMIB Header
5 * COPYRIGHT: Copyright 2025 Carl Bialorucki <carl.bialorucki@reactos.org>
6 */
7
8#ifndef _TCPMIB_
9#define _TCPMIB_
10
11#define TCPIP_OWNING_MODULE_SIZE 16
12#define MIB_TCP_MAXCONN_DYNAMIC ((ULONG)-1)
13
14typedef enum {
15 MIB_TCP_STATE_CLOSED = 1,
16 MIB_TCP_STATE_LISTEN = 2,
17 MIB_TCP_STATE_SYN_SENT = 3,
18 MIB_TCP_STATE_SYN_RCVD = 4,
19 MIB_TCP_STATE_ESTAB = 5,
20 MIB_TCP_STATE_FIN_WAIT1 = 6,
21 MIB_TCP_STATE_FIN_WAIT2 = 7,
22 MIB_TCP_STATE_CLOSE_WAIT = 8,
23 MIB_TCP_STATE_CLOSING = 9,
24 MIB_TCP_STATE_LAST_ACK = 10,
25 MIB_TCP_STATE_TIME_WAIT = 11,
26 MIB_TCP_STATE_DELETE_TCB = 12,
27
28 MIB_TCP_STATE_RESERVED = 100
29} MIB_TCP_STATE;
30
31typedef enum {
32 TcpConnectionOffloadStateInHost,
33 TcpConnectionOffloadStateOffloading,
34 TcpConnectionOffloadStateOffloaded,
35 TcpConnectionOffloadStateUploading,
36 TcpConnectionOffloadStateMax,
37} TCP_CONNECTION_OFFLOAD_STATE, *PTCP_CONNECTION_OFFLOAD_STATE;
38
39typedef struct _MIB_TCPROW {
40 union {
41 DWORD dwState;
42 MIB_TCP_STATE State;
43 };
44 DWORD dwLocalAddr;
45 DWORD dwLocalPort;
46 DWORD dwRemoteAddr;
47 DWORD dwRemotePort;
48} MIB_TCPROW, *PMIB_TCPROW;
49
50typedef struct _MIB_TCPTABLE {
51 DWORD dwNumEntries;
52 MIB_TCPROW table[1];
53} MIB_TCPTABLE, *PMIB_TCPTABLE;
54
55#define SIZEOF_TCPTABLE(x) \
56 (FIELD_OFFSET(MIB_TCPTABLE, table[0]) + ((x) * sizeof(MIB_TCPROW)) + ALIGN_SIZE)
57
58typedef struct _MIB_TCPROW2 {
59 DWORD dwState;
60 DWORD dwLocalAddr;
61 DWORD dwLocalPort;
62 DWORD dwRemoteAddr;
63 DWORD dwRemotePort;
64 DWORD dwOwningPid;
65 TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
66} MIB_TCPROW2, *PMIB_TCPROW2;
67
68typedef struct _MIB_TCPTABLE2 {
69 DWORD dwNumEntries;
70 MIB_TCPROW2 table[1];
71} MIB_TCPTABLE2, *PMIB_TCPTABLE2;
72
73#define SIZEOF_TCPTABLE2(x) \
74 (FIELD_OFFSET(MIB_TCPTABLE2, table[0]) + ((x) * sizeof(MIB_TCPROW2)) + ALIGN_SIZE)
75
76typedef struct _MIB_TCPROW_OWNER_PID {
77 DWORD dwState;
78 DWORD dwLocalAddr;
79 DWORD dwLocalPort;
80 DWORD dwRemoteAddr;
81 DWORD dwRemotePort;
82 DWORD dwOwningPid;
83} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;
84
85typedef struct _MIB_TCPTABLE_OWNER_PID {
86 DWORD dwNumEntries;
87 MIB_TCPROW_OWNER_PID table[1];
88} MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;
89
90#define SIZEOF_TCPTABLE_OWNER_PID(x) \
91 (FIELD_OFFSET(MIB_TCPTABLE_OWNER_PID, table[0]) + ((x) * sizeof(MIB_TCPROW_OWNER_PID)) + ALIGN_SIZE)
92
93typedef struct _MIB_TCPROW_OWNER_MODULE {
94 DWORD dwState;
95 DWORD dwLocalAddr;
96 DWORD dwLocalPort;
97 DWORD dwRemoteAddr;
98 DWORD dwRemotePort;
99 DWORD dwOwningPid;
100 LARGE_INTEGER liCreateTimestamp;
101 ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
102} MIB_TCPROW_OWNER_MODULE, *PMIB_TCPROW_OWNER_MODULE;
103
104typedef struct _MIB_TCPTABLE_OWNER_MODULE {
105 DWORD dwNumEntries;
106 MIB_TCPROW_OWNER_MODULE table[1];
107} MIB_TCPTABLE_OWNER_MODULE, *PMIB_TCPTABLE_OWNER_MODULE;
108
109#define SIZEOF_TCPTABLE_OWNER_MODULE(x) \
110 (FIELD_OFFSET(MIB_TCPTABLE_OWNER_MODULE, table[0]) + ((x) * sizeof(MIB_TCPROW_OWNER_MODULE)) + ALIGN_SIZE)
111
112typedef enum {
113 TcpRtoAlgorithmOther = 1,
114 TcpRtoAlgorithmConstant = 2,
115 TcpRtoAlgorithmRsre = 3,
116 TcpRtoAlgorithmVanj = 4,
117
118 MIB_TCP_RTO_OTHER = 1,
119 MIB_TCP_RTO_CONSTANT = 2,
120 MIB_TCP_RTO_RSRE = 3,
121 MIB_TCP_RTO_VANJ = 4,
122} TCP_RTO_ALGORITHM, *PTCP_RTO_ALGORITHM;
123
124typedef struct _MIB_TCPSTATS {
125 union {
126 DWORD dwRtoAlgorithm;
127 TCP_RTO_ALGORITHM RtoAlgorithm;
128 };
129 DWORD dwRtoMin;
130 DWORD dwRtoMax;
131 DWORD dwMaxConn;
132 DWORD dwActiveOpens;
133 DWORD dwPassiveOpens;
134 DWORD dwAttemptFails;
135 DWORD dwEstabResets;
136 DWORD dwCurrEstab;
137 DWORD dwInSegs;
138 DWORD dwOutSegs;
139 DWORD dwRetransSegs;
140 DWORD dwInErrs;
141 DWORD dwOutRsts;
142 DWORD dwNumConns;
143} MIB_TCPSTATS, *PMIB_TCPSTATS;
144
145#if (NTDDI_VERSION >= NTDDI_WIN10_RS3)
146typedef struct _MIB_TCPSTATS2 {
147 TCP_RTO_ALGORITHM RtoAlgorithm;
148 DWORD dwRtoMin;
149 DWORD dwRtoMax;
150 DWORD dwMaxConn;
151 DWORD dwActiveOpens;
152 DWORD dwPassiveOpens;
153 DWORD dwAttemptFails;
154 DWORD dwEstabResets;
155 DWORD dwCurrEstab;
156 DWORD64 dw64InSegs;
157 DWORD64 dw64OutSegs;
158 DWORD dwRetransSegs;
159 DWORD dwInErrs;
160 DWORD dwOutRsts;
161 DWORD dwNumConns;
162} MIB_TCPSTATS2, *PMIB_TCPSTATS2;
163#endif // (NTDDI_VERSION >= NTDDI_WIN10_RS3)
164
165#ifdef _WS2IPDEF_
166typedef struct _MIB_TCP6ROW {
167 MIB_TCP_STATE State;
168 IN6_ADDR LocalAddr;
169 DWORD dwLocalScopeId;
170 DWORD dwLocalPort;
171 IN6_ADDR RemoteAddr;
172 DWORD dwRemoteScopeId;
173 DWORD dwRemotePort;
174} MIB_TCP6ROW, *PMIB_TCP6ROW;
175
176typedef struct _MIB_TCP6TABLE {
177 DWORD dwNumEntries;
178 MIB_TCP6ROW table[1];
179} MIB_TCP6TABLE, *PMIB_TCP6TABLE;
180
181#define SIZEOF_TCP6TABLE(x) \
182 (FIELD_OFFSET(MIB_TCP6TABLE, table[0]) + ((x) * sizeof(MIB_TCP6ROW)) + ALIGN_SIZE)
183
184typedef struct _MIB_TCP6ROW2 {
185 IN6_ADDR LocalAddr;
186 DWORD dwLocalScopeId;
187 DWORD dwLocalPort;
188 IN6_ADDR RemoteAddr;
189 DWORD dwRemoteScopeId;
190 DWORD dwRemotePort;
191 MIB_TCP_STATE State;
192 DWORD dwOwningPid;
193 TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
194} MIB_TCP6ROW2, *PMIB_TCP6ROW2;
195
196typedef struct _MIB_TCP6TABLE2 {
197 DWORD dwNumEntries;
198 MIB_TCP6ROW2 table[1];
199} MIB_TCP6TABLE2, *PMIB_TCP6TABLE2;
200
201#define SIZEOF_TCP6TABLE2(x) \
202 (FIELD_OFFSET(MIB_TCP6TABLE2, table[0]) + ((x) * sizeof(MIB_TCP6ROW2)) + ALIGN_SIZE)
203
204typedef struct _MIB_TCP6ROW_OWNER_PID {
205 UCHAR ucLocalAddr[16];
206 DWORD dwLocalScopeId;
207 DWORD dwLocalPort;
208 UCHAR ucRemoteAddr[16];
209 DWORD dwRemoteScopeId;
210 DWORD dwRemotePort;
211 DWORD dwState;
212 DWORD dwOwningPid;
213} MIB_TCP6ROW_OWNER_PID, *PMIB_TCP6ROW_OWNER_PID;
214
215typedef struct _MIB_TCP6TABLE_OWNER_PID {
216 DWORD dwNumEntries;
217 _Field_size_(dwNumEntries)
218 MIB_TCP6ROW_OWNER_PID table[1];
219} MIB_TCP6TABLE_OWNER_PID, *PMIB_TCP6TABLE_OWNER_PID;
220
221#define SIZEOF_TCP6TABLE_OWNER_PID(x) \
222 (FIELD_OFFSET(MIB_TCP6TABLE_OWNER_PID, table[0]) + ((x) * sizeof(MIB_TCP6ROW_OWNER_PID)) + ALIGN_SIZE)
223
224typedef struct _MIB_TCP6ROW_OWNER_MODULE {
225 UCHAR ucLocalAddr[16];
226 DWORD dwLocalScopeId;
227 DWORD dwLocalPort;
228 UCHAR ucRemoteAddr[16];
229 DWORD dwRemoteScopeId;
230 DWORD dwRemotePort;
231 DWORD dwState;
232 DWORD dwOwningPid;
233 LARGE_INTEGER liCreateTimestamp;
234 ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
235} MIB_TCP6ROW_OWNER_MODULE, *PMIB_TCP6ROW_OWNER_MODULE;
236
237typedef struct _MIB_TCP6TABLE_OWNER_MODULE {
238 DWORD dwNumEntries;
239 _Field_size_(dwNumEntries)
240 MIB_TCP6ROW_OWNER_MODULE table[1];
241} MIB_TCP6TABLE_OWNER_MODULE, *PMIB_TCP6TABLE_OWNER_MODULE;
242
243#define SIZEOF_TCP6TABLE_OWNER_MODULE(x) \
244 (FIELD_OFFSET(MIB_TCP6TABLE_OWNER_MODULE, table[0]) + ((x) * sizeof(MIB_TCP6ROW_OWNER_MODULE)) + ALIGN_SIZE)
245#endif // _WS2IPDEF_
246
247#endif // _TCPMIB_