blob: 2d2f60b5724b48f107631f6211a3b086eb436b76 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
|
/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1992 Microsoft Corporation
Module Name:
datatcp.c
Abstract:
Header file for the TCP/IP (Network Interface, IP, ICMP,
TCP, UDP) Extensible Object data definitions.
This file contains definitions to construct the dynamic data
which is returned by the Configuration Registry. Data from
various system API calls is placed into the structures shown
here.
Created:
Christos Tsollis 08/28/92
Revision History:
--*/
#ifndef _DATATCP_H_
#define _DATATCP_H_
/****************************************************************************\
18 Jan 92
russbl
Adding a Counter to the Extensible Objects Code
1. Modify the object definition in extdata.h:
a. Add a define for the offset of the counter in the
data block for the given object type.
b. Add a PERF_COUNTER_DEFINITION to the <object>_DATA_DEFINITION.
2. Add the Titles to the Registry in perfctrs.ini and perfhelp.ini:
a. Add Text for the Counter Name and the Text for the Help.
b. Add them to the bottom so we don't have to change all the
numbers.
c. Change the Last Counter and Last Help entries under
PerfLib in software.ini.
d. To do this at setup time, see section in pmintrnl.txt for
protocol.
3. Now add the counter to the object definition in extdata.c.
This is the initializing, constant data which will actually go
into the structure you added to the <object>_DATA_DEFINITION in
step 1.b. The type of the structure you are initializing is a
PERF_COUNTER_DEFINITION. These are defined in winperf.h.
4. Add code in extobjct.c to collect the data.
Note: adding an object is a little more work, but in all the same
places. See the existing code for examples. In addition, you must
increase the *NumObjectTypes parameter to Get<object>PerfomanceData
on return from that routine.
\****************************************************************************/
//
// The routines that load these structures assume that all fields
// are packed and aligned on DWORD boundries. Alpha support may
// change this assumption so the pack pragma is used here to insure
// the DWORD packing assumption remains valid.
//
#pragma pack (4)
//
// Extensible Object definitions
//
// Update the following sort of define when adding an object type.
#define TCPIP_NUM_PERF_OBJECT_TYPES 5
//----------------------------------------------------------------------------
//
// The Network Interface object type counter definitions.
//
// These are used in the counter definitions to describe the relative
// position of each counter in the returned data.
//
#define IF_OCTETS_OFFSET sizeof(DWORD)
#define IF_PACKETS_OFFSET IF_OCTETS_OFFSET + sizeof(DWORD)
#define IF_INPKTS_OFFSET IF_PACKETS_OFFSET + sizeof(DWORD)
#define IF_OUTPKTS_OFFSET IF_INPKTS_OFFSET + sizeof(DWORD)
#define IF_SPEED_OFFSET IF_OUTPKTS_OFFSET + sizeof(DWORD)
#define IF_INOCTETS_OFFSET IF_SPEED_OFFSET + sizeof(DWORD)
#define IF_INUCASTPKTS_OFFSET IF_INOCTETS_OFFSET + sizeof(DWORD)
#define IF_INNUCASTPKTS_OFFSET IF_INUCASTPKTS_OFFSET + sizeof(DWORD)
#define IF_INDISCARDS_OFFSET IF_INNUCASTPKTS_OFFSET + sizeof(DWORD)
#define IF_INERRORS_OFFSET IF_INDISCARDS_OFFSET + sizeof(DWORD)
#define IF_INUNKNOWNPROTOS_OFFSET IF_INERRORS_OFFSET + sizeof(DWORD)
#define IF_OUTOCTETS_OFFSET IF_INUNKNOWNPROTOS_OFFSET +sizeof(DWORD)
#define IF_OUTUCASTPKTS_OFFSET IF_OUTOCTETS_OFFSET + sizeof(DWORD)
#define IF_OUTNUCASTPKTS_OFFSET IF_OUTUCASTPKTS_OFFSET + sizeof(DWORD)
#define IF_OUTDISCARDS_OFFSET IF_OUTNUCASTPKTS_OFFSET + sizeof(DWORD)
#define IF_OUTERRORS_OFFSET IF_OUTDISCARDS_OFFSET + sizeof(DWORD)
#define IF_OUTQLEN_OFFSET IF_OUTERRORS_OFFSET + sizeof(DWORD)
#define SIZE_OF_IF_DATA IF_OUTQLEN_OFFSET + sizeof(DWORD)
//
// This is the counter structure presently returned for
// each Network Interface.
//
typedef struct _NET_INTERFACE_DATA_DEFINITION {
PERF_OBJECT_TYPE NetInterfaceObjectType;
PERF_COUNTER_DEFINITION Octets;
PERF_COUNTER_DEFINITION Packets;
PERF_COUNTER_DEFINITION InPackets;
PERF_COUNTER_DEFINITION OutPackets;
PERF_COUNTER_DEFINITION Speed;
PERF_COUNTER_DEFINITION InOctets;
PERF_COUNTER_DEFINITION InUcastPackets;
PERF_COUNTER_DEFINITION InNonUcastPackets;
PERF_COUNTER_DEFINITION InDiscards;
PERF_COUNTER_DEFINITION InErrors;
PERF_COUNTER_DEFINITION InUnknownProtos;
PERF_COUNTER_DEFINITION OutOctets;
PERF_COUNTER_DEFINITION OutUcastPackets;
PERF_COUNTER_DEFINITION OutNonUcastPackets;
PERF_COUNTER_DEFINITION OutDiscards;
PERF_COUNTER_DEFINITION OutErrors;
PERF_COUNTER_DEFINITION OutQueueLength;
} NET_INTERFACE_DATA_DEFINITION;
//----------------------------------------------------------------------------
//
// IP object type counter definitions.
//
// These are used in the counter definitions to describe the relative
// position of each counter in the returned data.
//
#define IP_DATAGRAMS_OFFSET sizeof(DWORD)
#define IP_INRECEIVES_OFFSET IP_DATAGRAMS_OFFSET + sizeof(DWORD)
#define IP_INHDRERRORS_OFFSET IP_INRECEIVES_OFFSET + sizeof(DWORD)
#define IP_INADDRERRORS_OFFSET IP_INHDRERRORS_OFFSET + sizeof(DWORD)
#define IP_FORWDATAGRAMS_OFFSET IP_INADDRERRORS_OFFSET + sizeof(DWORD)
#define IP_INUNKNOWNPROTOS_OFFSET IP_FORWDATAGRAMS_OFFSET + sizeof(DWORD)
#define IP_INDISCARDS_OFFSET IP_INUNKNOWNPROTOS_OFFSET +sizeof(DWORD)
#define IP_INDELIVERS_OFFSET IP_INDISCARDS_OFFSET + sizeof(DWORD)
#define IP_OUTREQUESTS_OFFSET IP_INDELIVERS_OFFSET + sizeof(DWORD)
#define IP_OUTDISCARDS_OFFSET IP_OUTREQUESTS_OFFSET + sizeof(DWORD)
#define IP_OUTNOROUTES_OFFSET IP_OUTDISCARDS_OFFSET + sizeof(DWORD)
#define IP_REASMREQDS_OFFSET IP_OUTNOROUTES_OFFSET + sizeof(DWORD)
#define IP_REASMOKS_OFFSET IP_REASMREQDS_OFFSET + sizeof(DWORD)
#define IP_REASMFAILS_OFFSET IP_REASMOKS_OFFSET + sizeof(DWORD)
#define IP_FRAGOKS_OFFSET IP_REASMFAILS_OFFSET + sizeof(DWORD)
#define IP_FRAGFAILS_OFFSET IP_FRAGOKS_OFFSET + sizeof(DWORD)
#define IP_FRAGCREATES_OFFSET IP_FRAGFAILS_OFFSET + sizeof(DWORD)
#define SIZE_OF_IP_DATA IP_FRAGCREATES_OFFSET + sizeof(DWORD)
//
// This is the counter structure presently returned for IP.
//
typedef struct _IP_DATA_DEFINITION {
PERF_OBJECT_TYPE IPObjectType;
PERF_COUNTER_DEFINITION Datagrams;
PERF_COUNTER_DEFINITION InReceives;
PERF_COUNTER_DEFINITION InHeaderErrors;
PERF_COUNTER_DEFINITION InAddrErrors;
PERF_COUNTER_DEFINITION ForwardDatagrams;
PERF_COUNTER_DEFINITION InUnknownProtos;
PERF_COUNTER_DEFINITION InDiscards;
PERF_COUNTER_DEFINITION InDelivers;
PERF_COUNTER_DEFINITION OutRequests;
PERF_COUNTER_DEFINITION OutDiscards;
PERF_COUNTER_DEFINITION OutNoRoutes;
PERF_COUNTER_DEFINITION ReassemblyRequireds;
PERF_COUNTER_DEFINITION ReassemblyOKs;
PERF_COUNTER_DEFINITION ReassemblyFails;
PERF_COUNTER_DEFINITION FragmentOKs;
PERF_COUNTER_DEFINITION FragmentFails;
PERF_COUNTER_DEFINITION FragmentCreates;
} IP_DATA_DEFINITION;
//----------------------------------------------------------------------------
//
// ICMP object type counter definitions.
//
// These are used in the counter definitions to describe the relative
// position of each counter in the returned data.
//
#define ICMP_MESSAGES_OFFSET sizeof(DWORD)
#define ICMP_INMSGS_OFFSET ICMP_MESSAGES_OFFSET + sizeof(DWORD)
#define ICMP_INERRORS_OFFSET ICMP_INMSGS_OFFSET + sizeof(DWORD)
#define ICMP_INDESTUNREACHS_OFFSET ICMP_INERRORS_OFFSET + sizeof(DWORD)
#define ICMP_INTIMEEXCDS_OFFSET ICMP_INDESTUNREACHS_OFFSET+sizeof(DWORD)
#define ICMP_INPARMPROBS_OFFSET ICMP_INTIMEEXCDS_OFFSET + sizeof(DWORD)
#define ICMP_INSRCQUENCHS_OFFSET ICMP_INPARMPROBS_OFFSET + sizeof(DWORD)
#define ICMP_INREDIRECTS_OFFSET ICMP_INSRCQUENCHS_OFFSET + sizeof(DWORD)
#define ICMP_INECHOS_OFFSET ICMP_INREDIRECTS_OFFSET + sizeof(DWORD)
#define ICMP_INECHOREPS_OFFSET ICMP_INECHOS_OFFSET + sizeof(DWORD)
#define ICMP_INTIMESTAMPS_OFFSET ICMP_INECHOREPS_OFFSET + sizeof(DWORD)
#define ICMP_INTIMESTAMPREPS_OFFSET ICMP_INTIMESTAMPS_OFFSET + sizeof(DWORD)
#define ICMP_INADDRMASKS_OFFSET ICMP_INTIMESTAMPREPS_OFFSET + \
sizeof(DWORD)
#define ICMP_INADDRMASKREPS_OFFSET ICMP_INADDRMASKS_OFFSET + sizeof(DWORD)
#define ICMP_OUTMSGS_OFFSET ICMP_INADDRMASKREPS_OFFSET+sizeof(DWORD)
#define ICMP_OUTERRORS_OFFSET ICMP_OUTMSGS_OFFSET + sizeof(DWORD)
#define ICMP_OUTDESTUNREACHS_OFFSET ICMP_OUTERRORS_OFFSET + sizeof(DWORD)
#define ICMP_OUTTIMEEXCDS_OFFSET ICMP_OUTDESTUNREACHS_OFFSET + \
sizeof(DWORD)
#define ICMP_OUTPARMPROBS_OFFSET ICMP_OUTTIMEEXCDS_OFFSET + sizeof(DWORD)
#define ICMP_OUTSRCQUENCHS_OFFSET ICMP_OUTPARMPROBS_OFFSET + sizeof(DWORD)
#define ICMP_OUTREDIRECTS_OFFSET ICMP_OUTSRCQUENCHS_OFFSET+ sizeof(DWORD)
#define ICMP_OUTECHOS_OFFSET ICMP_OUTREDIRECTS_OFFSET + sizeof(DWORD)
#define ICMP_OUTECHOREPS_OFFSET ICMP_OUTECHOS_OFFSET + sizeof(DWORD)
#define ICMP_OUTTIMESTAMPS_OFFSET ICMP_OUTECHOREPS_OFFSET + sizeof(DWORD)
#define ICMP_OUTTIMESTAMPREPS_OFFSET ICMP_OUTTIMESTAMPS_OFFSET+ sizeof(DWORD)
#define ICMP_OUTADDRMASKS_OFFSET ICMP_OUTTIMESTAMPREPS_OFFSET + \
sizeof(DWORD)
#define ICMP_OUTADDRMASKREPS_OFFSET ICMP_OUTADDRMASKS_OFFSET + sizeof(DWORD)
#define SIZE_OF_ICMP_DATA ICMP_OUTADDRMASKREPS_OFFSET + \
sizeof(DWORD)
//
// This is the counter structure presently returned for ICMP.
//
typedef struct _ICMP_DATA_DEFINITION {
PERF_OBJECT_TYPE ICMPObjectType;
PERF_COUNTER_DEFINITION Messages;
PERF_COUNTER_DEFINITION InMessages;
PERF_COUNTER_DEFINITION InErrors;
PERF_COUNTER_DEFINITION InDestinationUnreachables;
PERF_COUNTER_DEFINITION InTimeExceededs;
PERF_COUNTER_DEFINITION InParameterProblems;
PERF_COUNTER_DEFINITION InSourceQuenchs;
PERF_COUNTER_DEFINITION InRedirects;
PERF_COUNTER_DEFINITION InEchos;
PERF_COUNTER_DEFINITION InEchoReplys;
PERF_COUNTER_DEFINITION InTimestamps;
PERF_COUNTER_DEFINITION InTimestampReplys;
PERF_COUNTER_DEFINITION InAddressMasks;
PERF_COUNTER_DEFINITION InAddressMaskReplys;
PERF_COUNTER_DEFINITION OutMessages;
PERF_COUNTER_DEFINITION OutErrors;
PERF_COUNTER_DEFINITION OutDestinationUnreachables;
PERF_COUNTER_DEFINITION OutTimeExceededs;
PERF_COUNTER_DEFINITION OutParameterProblems;
PERF_COUNTER_DEFINITION OutSourceQuenchs;
PERF_COUNTER_DEFINITION OutRedirects;
PERF_COUNTER_DEFINITION OutEchos;
PERF_COUNTER_DEFINITION OutEchoReplys;
PERF_COUNTER_DEFINITION OutTimestamps;
PERF_COUNTER_DEFINITION OutTimestampReplys;
PERF_COUNTER_DEFINITION OutAddressMasks;
PERF_COUNTER_DEFINITION OutAddressMaskReplys;
} ICMP_DATA_DEFINITION;
//----------------------------------------------------------------------------
//
// TCP object type counter definitions.
//
// These are used in the counter definitions to describe the relative
// position of each counter in the returned data.
//
#define TCP_SEGMENTS_OFFSET sizeof(DWORD)
#define TCP_CURRESTAB_OFFSET TCP_SEGMENTS_OFFSET + sizeof(DWORD)
#define TCP_ACTIVEOPENS_OFFSET TCP_CURRESTAB_OFFSET + sizeof(DWORD)
#define TCP_PASSIVEOPENS_OFFSET TCP_ACTIVEOPENS_OFFSET + sizeof(DWORD)
#define TCP_ATTEMPTFAILS_OFFSET TCP_PASSIVEOPENS_OFFSET + sizeof(DWORD)
#define TCP_ESTABRESETS_OFFSET TCP_ATTEMPTFAILS_OFFSET + sizeof(DWORD)
#define TCP_INSEGS_OFFSET TCP_ESTABRESETS_OFFSET + sizeof(DWORD)
#define TCP_OUTSEGS_OFFSET TCP_INSEGS_OFFSET + sizeof(DWORD)
#define TCP_RETRANSSEGS_OFFSET TCP_OUTSEGS_OFFSET + sizeof(DWORD)
#define SIZE_OF_TCP_DATA TCP_RETRANSSEGS_OFFSET + sizeof(DWORD)
//
// This is the counter structure presently returned for TCP.
//
typedef struct _TCP_DATA_DEFINITION {
PERF_OBJECT_TYPE TCPObjectType;
PERF_COUNTER_DEFINITION Segments;
PERF_COUNTER_DEFINITION CurrentlyEstablished;
PERF_COUNTER_DEFINITION ActiveOpens;
PERF_COUNTER_DEFINITION PassiveOpens;
PERF_COUNTER_DEFINITION AttemptFailures;
PERF_COUNTER_DEFINITION EstabResets;
PERF_COUNTER_DEFINITION InSegments;
PERF_COUNTER_DEFINITION OutSegments;
PERF_COUNTER_DEFINITION RetransmittedSegments;
} TCP_DATA_DEFINITION;
//----------------------------------------------------------------------------
//
// UDP object type counter definitions.
//
// These are used in the counter definitions to describe the relative
// position of each counter in the returned data.
//
#define UDP_DATAGRAMS_OFFSET sizeof(DWORD)
#define UDP_INDATAGRAMS_OFFSET UDP_DATAGRAMS_OFFSET + sizeof(DWORD)
#define UDP_NOPORTS_OFFSET UDP_INDATAGRAMS_OFFSET + sizeof(DWORD)
#define UDP_INERRORS_OFFSET UDP_NOPORTS_OFFSET + sizeof(DWORD)
#define UDP_OUTDATAGRAMS_OFFSET UDP_INERRORS_OFFSET + sizeof(DWORD)
#define SIZE_OF_UDP_DATA UDP_OUTDATAGRAMS_OFFSET + sizeof(DWORD)
//
// This is the counter structure presently returned for UDP.
//
typedef struct _UDP_DATA_DEFINITION {
PERF_OBJECT_TYPE UDPObjectType;
PERF_COUNTER_DEFINITION Datagrams;
PERF_COUNTER_DEFINITION InDatagrams;
PERF_COUNTER_DEFINITION NoPorts;
PERF_COUNTER_DEFINITION InErrors;
PERF_COUNTER_DEFINITION OutDatagrams;
} UDP_DATA_DEFINITION;
#pragma pack ()
#endif //_DATATCP_H_
|