3 * SNMP MIB entries for the IP subsystem.
5 * Alan Cox <gw4pts@gw4pts.ampr.org>
7 * We don't chose to implement SNMP in the kernel (this would
8 * be silly as SNMP is a pain in the backside in places). We do
9 * however need to collect the MIB statistics and export them
10 * out of /proc (eventually)
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version
15 * 2 of the License, or (at your option) any later version.
17 * $Id: snmp.h,v 1.19 2001/06/14 13:40:46 davem Exp $
24 #include <linux/cache.h>
27 * We use all unsigned longs. Linux will soon be so reliable that even these
28 * will rapidly get too small 8-). Seriously consider the IpInReceives count
29 * on the 20Gb/s + networks people expect in a few years time!
33 * The rule for padding:
34 * Best is power of two because then the right structure can be found by a simple
35 * shift. The structure should be always cache line aligned.
36 * gcc needs n=alignto(cachelinesize, popcnt(sizeof(bla_mib))) shift/add instructions
37 * to emulate multiply in case it is not power-of-two. Currently n is always <=3 for
38 * all sizes so simple cache line alignment is enough.
40 * The best solution would be a global CPU local area , especially on 64 and 128byte
41 * cacheline machine it makes a *lot* of sense -AK
47 * RFC 2011 (updates 1213): SNMPv2-MIB-IP
48 * RFC 2863: Interfaces Group MIB
52 unsigned long IpInReceives;
53 unsigned long IpInHdrErrors;
54 unsigned long IpInAddrErrors;
55 unsigned long IpForwDatagrams;
56 unsigned long IpInUnknownProtos;
57 unsigned long IpInDiscards;
58 unsigned long IpInDelivers;
59 unsigned long IpOutRequests;
60 unsigned long IpOutDiscards;
61 unsigned long IpOutNoRoutes;
62 unsigned long IpReasmTimeout;
63 unsigned long IpReasmReqds;
64 unsigned long IpReasmOKs;
65 unsigned long IpReasmFails;
66 unsigned long IpFragOKs;
67 unsigned long IpFragFails;
68 unsigned long IpFragCreates;
69 unsigned long __pad[0];
73 * RFC 2465: IPv6 MIB: General Group
77 unsigned long Ip6InReceives;
78 unsigned long Ip6InHdrErrors;
79 unsigned long Ip6InTooBigErrors;
80 unsigned long Ip6InNoRoutes;
81 unsigned long Ip6InAddrErrors;
82 unsigned long Ip6InUnknownProtos;
83 unsigned long Ip6InTruncatedPkts;
84 unsigned long Ip6InDiscards;
85 unsigned long Ip6InDelivers;
86 unsigned long Ip6OutForwDatagrams;
87 unsigned long Ip6OutRequests;
88 unsigned long Ip6OutDiscards;
89 unsigned long Ip6OutNoRoutes;
90 unsigned long Ip6ReasmTimeout;
91 unsigned long Ip6ReasmReqds;
92 unsigned long Ip6ReasmOKs;
93 unsigned long Ip6ReasmFails;
94 unsigned long Ip6FragOKs;
95 unsigned long Ip6FragFails;
96 unsigned long Ip6FragCreates;
97 unsigned long Ip6InMcastPkts;
98 unsigned long Ip6OutMcastPkts;
99 unsigned long __pad[0];
103 * RFC 1213: MIB-II ICMP Group
104 * RFC 2011 (updates 1213): SNMPv2 MIB for IP: ICMP group
108 unsigned long IcmpInMsgs;
109 unsigned long IcmpInErrors;
110 unsigned long IcmpInDestUnreachs;
111 unsigned long IcmpInTimeExcds;
112 unsigned long IcmpInParmProbs;
113 unsigned long IcmpInSrcQuenchs;
114 unsigned long IcmpInRedirects;
115 unsigned long IcmpInEchos;
116 unsigned long IcmpInEchoReps;
117 unsigned long IcmpInTimestamps;
118 unsigned long IcmpInTimestampReps;
119 unsigned long IcmpInAddrMasks;
120 unsigned long IcmpInAddrMaskReps;
121 unsigned long IcmpOutMsgs;
122 unsigned long IcmpOutErrors;
123 unsigned long IcmpOutDestUnreachs;
124 unsigned long IcmpOutTimeExcds;
125 unsigned long IcmpOutParmProbs;
126 unsigned long IcmpOutSrcQuenchs;
127 unsigned long IcmpOutRedirects;
128 unsigned long IcmpOutEchos;
129 unsigned long IcmpOutEchoReps;
130 unsigned long IcmpOutTimestamps;
131 unsigned long IcmpOutTimestampReps;
132 unsigned long IcmpOutAddrMasks;
133 unsigned long IcmpOutAddrMaskReps;
135 unsigned long __pad[0];
139 * RFC 2466: ICMPv6-MIB
143 unsigned long Icmp6InMsgs;
144 unsigned long Icmp6InErrors;
146 unsigned long Icmp6InDestUnreachs;
147 unsigned long Icmp6InPktTooBigs;
148 unsigned long Icmp6InTimeExcds;
149 unsigned long Icmp6InParmProblems;
151 unsigned long Icmp6InEchos;
152 unsigned long Icmp6InEchoReplies;
153 unsigned long Icmp6InGroupMembQueries;
154 unsigned long Icmp6InGroupMembResponses;
155 unsigned long Icmp6InGroupMembReductions;
156 unsigned long Icmp6InRouterSolicits;
157 unsigned long Icmp6InRouterAdvertisements;
158 unsigned long Icmp6InNeighborSolicits;
159 unsigned long Icmp6InNeighborAdvertisements;
160 unsigned long Icmp6InRedirects;
162 unsigned long Icmp6OutMsgs;
164 unsigned long Icmp6OutDestUnreachs;
165 unsigned long Icmp6OutPktTooBigs;
166 unsigned long Icmp6OutTimeExcds;
167 unsigned long Icmp6OutParmProblems;
169 unsigned long Icmp6OutEchoReplies;
170 unsigned long Icmp6OutRouterSolicits;
171 unsigned long Icmp6OutNeighborSolicits;
172 unsigned long Icmp6OutNeighborAdvertisements;
173 unsigned long Icmp6OutRedirects;
174 unsigned long Icmp6OutGroupMembResponses;
175 unsigned long Icmp6OutGroupMembReductions;
176 unsigned long __pad[0];
180 * RFC 1213: MIB-II TCP group
181 * RFC 2012 (updates 1213): SNMPv2-MIB-TCP
185 unsigned long TcpRtoAlgorithm;
186 unsigned long TcpRtoMin;
187 unsigned long TcpRtoMax;
188 unsigned long TcpMaxConn;
189 unsigned long TcpActiveOpens;
190 unsigned long TcpPassiveOpens;
191 unsigned long TcpAttemptFails;
192 unsigned long TcpEstabResets;
193 unsigned long TcpCurrEstab;
194 unsigned long TcpInSegs;
195 unsigned long TcpOutSegs;
196 unsigned long TcpRetransSegs;
197 unsigned long TcpInErrs;
198 unsigned long TcpOutRsts;
199 unsigned long __pad[0];
203 * RFC 1213: MIB-II UDP group
204 * RFC 2013 (updates 1213): SNMPv2-MIB-UDP
208 unsigned long UdpInDatagrams;
209 unsigned long UdpNoPorts;
210 unsigned long UdpInErrors;
211 unsigned long UdpOutDatagrams;
212 unsigned long __pad[0];
215 /* draft-ietf-sigtran-sctp-mib-07.txt */
218 unsigned long SctpCurrEstab;
219 unsigned long SctpActiveEstabs;
220 unsigned long SctpPassiveEstabs;
221 unsigned long SctpAborteds;
222 unsigned long SctpShutdowns;
223 unsigned long SctpOutOfBlues;
224 unsigned long SctpChecksumErrors;
225 unsigned long SctpOutCtrlChunks;
226 unsigned long SctpOutOrderChunks;
227 unsigned long SctpOutUnorderChunks;
228 unsigned long SctpInCtrlChunks;
229 unsigned long SctpInOrderChunks;
230 unsigned long SctpInUnorderChunks;
231 unsigned long SctpFragUsrMsgs;
232 unsigned long SctpReasmUsrMsgs;
233 unsigned long SctpOutSCTPPacks;
234 unsigned long SctpInSCTPPacks;
235 unsigned long SctpRtoAlgorithm;
236 unsigned long SctpRtoMin;
237 unsigned long SctpRtoMax;
238 unsigned long SctpRtoInitial;
239 unsigned long SctpValCookieLife;
240 unsigned long SctpMaxInitRetr;
241 unsigned long __pad[0];
246 unsigned long SyncookiesSent;
247 unsigned long SyncookiesRecv;
248 unsigned long SyncookiesFailed;
249 unsigned long EmbryonicRsts;
250 unsigned long PruneCalled;
251 unsigned long RcvPruned;
252 unsigned long OfoPruned;
253 unsigned long OutOfWindowIcmps;
254 unsigned long LockDroppedIcmps;
255 unsigned long ArpFilter;
256 unsigned long TimeWaited;
257 unsigned long TimeWaitRecycled;
258 unsigned long TimeWaitKilled;
259 unsigned long PAWSPassiveRejected;
260 unsigned long PAWSActiveRejected;
261 unsigned long PAWSEstabRejected;
262 unsigned long DelayedACKs;
263 unsigned long DelayedACKLocked;
264 unsigned long DelayedACKLost;
265 unsigned long ListenOverflows;
266 unsigned long ListenDrops;
267 unsigned long TCPPrequeued;
268 unsigned long TCPDirectCopyFromBacklog;
269 unsigned long TCPDirectCopyFromPrequeue;
270 unsigned long TCPPrequeueDropped;
271 unsigned long TCPHPHits;
272 unsigned long TCPHPHitsToUser;
273 unsigned long TCPPureAcks;
274 unsigned long TCPHPAcks;
275 unsigned long TCPRenoRecovery;
276 unsigned long TCPSackRecovery;
277 unsigned long TCPSACKReneging;
278 unsigned long TCPFACKReorder;
279 unsigned long TCPSACKReorder;
280 unsigned long TCPRenoReorder;
281 unsigned long TCPTSReorder;
282 unsigned long TCPFullUndo;
283 unsigned long TCPPartialUndo;
284 unsigned long TCPDSACKUndo;
285 unsigned long TCPLossUndo;
286 unsigned long TCPLoss;
287 unsigned long TCPLostRetransmit;
288 unsigned long TCPRenoFailures;
289 unsigned long TCPSackFailures;
290 unsigned long TCPLossFailures;
291 unsigned long TCPFastRetrans;
292 unsigned long TCPForwardRetrans;
293 unsigned long TCPSlowStartRetrans;
294 unsigned long TCPTimeouts;
295 unsigned long TCPRenoRecoveryFail;
296 unsigned long TCPSackRecoveryFail;
297 unsigned long TCPSchedulerFailed;
298 unsigned long TCPRcvCollapsed;
299 unsigned long TCPDSACKOldSent;
300 unsigned long TCPDSACKOfoSent;
301 unsigned long TCPDSACKRecv;
302 unsigned long TCPDSACKOfoRecv;
303 unsigned long TCPAbortOnSyn;
304 unsigned long TCPAbortOnData;
305 unsigned long TCPAbortOnClose;
306 unsigned long TCPAbortOnMemory;
307 unsigned long TCPAbortOnTimeout;
308 unsigned long TCPAbortOnLinger;
309 unsigned long TCPAbortFailed;
310 unsigned long TCPMemoryPressures;
311 unsigned long __pad[0];
316 * FIXME: On x86 and some other CPUs the split into user and softirq parts is not needed because
317 * addl $1,memory is atomic against interrupts (but atomic_inc would be overkill because of the lock
318 * cycles). Wants new nonlocked_atomic_inc() primitives -AK
320 #define DEFINE_SNMP_STAT(type, name) \
321 __typeof__(type) *name[2]
322 #define DECLARE_SNMP_STAT(type, name) \
323 extern __typeof__(type) *name[2]
325 #define SNMP_STAT_BHPTR(name) (name[0])
326 #define SNMP_STAT_USRPTR(name) (name[1])
328 #define SNMP_INC_STATS_BH(mib, field) \
329 (per_cpu_ptr(mib[0], smp_processor_id())->field++)
330 #define SNMP_INC_STATS_OFFSET_BH(mib, field, offset) \
331 ((*((&per_cpu_ptr(mib[0], smp_processor_id())->field) + (offset)))++)
332 #define SNMP_INC_STATS_USER(mib, field) \
333 (per_cpu_ptr(mib[1], smp_processor_id())->field++)
334 #define SNMP_INC_STATS(mib, field) \
335 (per_cpu_ptr(mib[!in_softirq()], smp_processor_id())->field++)
336 #define SNMP_DEC_STATS(mib, field) \
337 (per_cpu_ptr(mib[!in_softirq()], smp_processor_id())->field--)
338 #define SNMP_ADD_STATS_BH(mib, field, addend) \
339 (per_cpu_ptr(mib[0], smp_processor_id())->field += addend)
340 #define SNMP_ADD_STATS_USER(mib, field, addend) \
341 (per_cpu_ptr(mib[1], smp_processor_id())->field += addend)