blob: 2bd12729935b77f7dea1f4d3d3737963f3d534b0 (
plain)
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
|
/*
*
* SNMP MIB entries for the IP subsystem.
*
* Alan Cox <gw4pts@gw4pts.ampr.org>
*
* We don't chose to implement SNMP in the kernel (this would
* be silly as SNMP is a pain in the backside in places). We do
* however need to collect the MIB statistics and export them
* out of /proc (eventually)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
*/
#ifndef _SNMP_H
#define _SNMP_H
/*
* We use all unsigned longs. Linux will soon be so reliable that even these
* will rapidly get too small 8-). Seriously consider the IpInReceives count
* on the 20Gb/s + networks people expect in a few years time!
*/
struct ip_mib
{
unsigned long IpInReceives;
unsigned long IpInHdrErrors;
unsigned long IpInAddrErrors;
unsigned long IpForwDatagrams;
unsigned long IpInUnknownProtos;
unsigned long IpInDiscards;
unsigned long IpInDelivers;
unsigned long IpOutRequests;
unsigned long IpOutDiscards;
unsigned long IpOutNoRoutes;
unsigned long IpReasmTimeout;
unsigned long IpReasmReqds;
unsigned long IpReasmOKs;
unsigned long IpReasmFails;
unsigned long IpFragOKs;
unsigned long IpFragFails;
unsigned long IpFragCreates;
unsigned long __pad[32-19];
};
struct ipv6_mib
{
unsigned long Ip6InReceives;
unsigned long Ip6InHdrErrors;
unsigned long Ip6InTooBigErrors;
unsigned long Ip6InNoRoutes;
unsigned long Ip6InAddrErrors;
unsigned long Ip6InUnknownProtos;
unsigned long Ip6InTruncatedPkts;
unsigned long Ip6InDiscards;
unsigned long Ip6InDelivers;
unsigned long Ip6OutForwDatagrams;
unsigned long Ip6OutRequests;
unsigned long Ip6OutDiscards;
unsigned long Ip6OutNoRoutes;
unsigned long Ip6ReasmTimeout;
unsigned long Ip6ReasmReqds;
unsigned long Ip6ReasmOKs;
unsigned long Ip6ReasmFails;
unsigned long Ip6FragOKs;
unsigned long Ip6FragFails;
unsigned long Ip6FragCreates;
unsigned long Ip6InMcastPkts;
unsigned long Ip6OutMcastPkts;
unsigned long __pad[32-22];
};
struct icmp_mib
{
unsigned long IcmpInMsgs;
unsigned long IcmpInErrors;
unsigned long IcmpInDestUnreachs;
unsigned long IcmpInTimeExcds;
unsigned long IcmpInParmProbs;
unsigned long IcmpInSrcQuenchs;
unsigned long IcmpInRedirects;
unsigned long IcmpInEchos;
unsigned long IcmpInEchoReps;
unsigned long IcmpInTimestamps;
unsigned long IcmpInTimestampReps;
unsigned long IcmpInAddrMasks;
unsigned long IcmpInAddrMaskReps;
unsigned long IcmpOutMsgs;
unsigned long IcmpOutErrors;
unsigned long IcmpOutDestUnreachs;
unsigned long IcmpOutTimeExcds;
unsigned long IcmpOutParmProbs;
unsigned long IcmpOutSrcQuenchs;
unsigned long IcmpOutRedirects;
unsigned long IcmpOutEchos;
unsigned long IcmpOutEchoReps;
unsigned long IcmpOutTimestamps;
unsigned long IcmpOutTimestampReps;
unsigned long IcmpOutAddrMasks;
unsigned long IcmpOutAddrMaskReps;
unsigned long __pad[32-26];
};
struct icmpv6_mib
{
unsigned long Icmp6InMsgs;
unsigned long Icmp6InErrors;
unsigned long Icmp6InDestUnreachs;
unsigned long Icmp6InPktTooBigs;
unsigned long Icmp6InTimeExcds;
unsigned long Icmp6InParmProblems;
unsigned long Icmp6InEchos;
unsigned long Icmp6InEchoReplies;
unsigned long Icmp6InGroupMembQueries;
unsigned long Icmp6InGroupMembResponses;
unsigned long Icmp6InGroupMembReductions;
unsigned long Icmp6InRouterSolicits;
unsigned long Icmp6InRouterAdvertisements;
unsigned long Icmp6InNeighborSolicits;
unsigned long Icmp6InNeighborAdvertisements;
unsigned long Icmp6InRedirects;
unsigned long Icmp6OutMsgs;
unsigned long Icmp6OutDestUnreachs;
unsigned long Icmp6OutPktTooBigs;
unsigned long Icmp6OutTimeExcds;
unsigned long Icmp6OutParmProblems;
unsigned long Icmp6OutEchoReplies;
unsigned long Icmp6OutRouterSolicits;
unsigned long Icmp6OutNeighborSolicits;
unsigned long Icmp6OutNeighborAdvertisements;
unsigned long Icmp6OutRedirects;
unsigned long Icmp6OutGroupMembResponses;
unsigned long Icmp6OutGroupMembReductions;
unsigned long __pad[32-28];
};
struct tcp_mib
{
unsigned long TcpRtoAlgorithm;
unsigned long TcpRtoMin;
unsigned long TcpRtoMax;
unsigned long TcpMaxConn;
unsigned long TcpActiveOpens;
unsigned long TcpPassiveOpens;
unsigned long TcpAttemptFails;
unsigned long TcpEstabResets;
unsigned long TcpCurrEstab;
unsigned long TcpInSegs;
unsigned long TcpOutSegs;
unsigned long TcpRetransSegs;
unsigned long TcpInErrs;
unsigned long TcpOutRsts;
unsigned long __pad[16-14];
};
struct udp_mib
{
unsigned long UdpInDatagrams;
unsigned long UdpNoPorts;
unsigned long UdpInErrors;
unsigned long UdpOutDatagrams;
unsigned long __pad[0];
};
struct linux_mib
{
unsigned long SyncookiesSent;
unsigned long SyncookiesRecv;
unsigned long SyncookiesFailed;
unsigned long EmbryonicRsts;
unsigned long PruneCalled;
unsigned long RcvPruned;
unsigned long OfoPruned;
unsigned long OutOfWindowIcmps;
unsigned long LockDroppedIcmps;
unsigned long TimeWaited;
unsigned long TimeWaitRecycled;
unsigned long TimeWaitKilled;
unsigned long PAWSPassiveRejected;
unsigned long PAWSActiveRejected;
unsigned long PAWSEstabRejected;
unsigned long DelayedACKs;
unsigned long DelayedACKLocked;
unsigned long DelayedACKLost;
unsigned long ListenOverflows;
unsigned long ListenDrops;
unsigned long TCPPrequeued;
unsigned long TCPDirectCopyFromBacklog;
unsigned long TCPDirectCopyFromPrequeue;
unsigned long TCPPrequeueDropped;
unsigned long TCPHPHits;
unsigned long TCPHPHitsToUser;
unsigned long TCPPureAcks;
unsigned long TCPHPAcks;
unsigned long TCPRenoRecovery;
unsigned long TCPSackRecovery;
unsigned long TCPSACKReneging;
unsigned long TCPFACKReorder;
unsigned long TCPSACKReorder;
unsigned long TCPRenoReorder;
unsigned long TCPTSReorder;
unsigned long TCPFullUndo;
unsigned long TCPPartialUndo;
unsigned long TCPDSACKUndo;
unsigned long TCPLossUndo;
unsigned long TCPLoss;
unsigned long TCPLostRetransmit;
unsigned long TCPRenoFailures;
unsigned long TCPSackFailures;
unsigned long TCPLossFailures;
unsigned long TCPFastRetrans;
unsigned long TCPForwardRetrans;
unsigned long TCPSlowStartRetrans;
unsigned long TCPTimeouts;
unsigned long TCPRenoRecoveryFail;
unsigned long TCPSackRecoveryFail;
unsigned long TCPSchedulerFailed;
unsigned long TCPRcvCollapsed;
unsigned long TCPDSACKOldSent;
unsigned long TCPDSACKOfoSent;
unsigned long TCPDSACKRecv;
unsigned long TCPDSACKOfoRecv;
unsigned long TCPAbortOnSyn;
unsigned long TCPAbortOnData;
unsigned long TCPAbortOnClose;
unsigned long TCPAbortOnMemory;
unsigned long TCPAbortOnTimeout;
unsigned long TCPAbortOnLinger;
unsigned long TCPAbortFailed;
unsigned long TCPMemoryPressures;
unsigned long __pad[64-64];
};
#define SNMP_INC_STATS(mib, field) ((mib)[2*smp_processor_id()+!in_softirq()].field++)
#define SNMP_INC_STATS_BH(mib, field) ((mib)[2*smp_processor_id()].field++)
#define SNMP_INC_STATS_USER(mib, field) ((mib)[2*smp_processor_id()+1].field++)
#endif
|