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.1.1.1 2005/04/11 02:51:08 jack 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 unsigned long IpInReceives;
48 unsigned long IpInHdrErrors;
49 unsigned long IpInAddrErrors;
50 unsigned long IpForwDatagrams;
51 unsigned long IpInUnknownProtos;
52 unsigned long IpInDiscards;
53 unsigned long IpInDelivers;
54 unsigned long IpOutRequests;
55 unsigned long IpOutDiscards;
56 unsigned long IpOutNoRoutes;
57 unsigned long IpReasmTimeout;
58 unsigned long IpReasmReqds;
59 unsigned long IpReasmOKs;
60 unsigned long IpReasmFails;
61 unsigned long IpFragOKs;
62 unsigned long IpFragFails;
63 unsigned long IpFragCreates;
64 unsigned long __pad[0];
65 } ____cacheline_aligned;
69 unsigned long Ip6InReceives;
70 unsigned long Ip6InHdrErrors;
71 unsigned long Ip6InTooBigErrors;
72 unsigned long Ip6InNoRoutes;
73 unsigned long Ip6InAddrErrors;
74 unsigned long Ip6InUnknownProtos;
75 unsigned long Ip6InTruncatedPkts;
76 unsigned long Ip6InDiscards;
77 unsigned long Ip6InDelivers;
78 unsigned long Ip6OutForwDatagrams;
79 unsigned long Ip6OutRequests;
80 unsigned long Ip6OutDiscards;
81 unsigned long Ip6OutNoRoutes;
82 unsigned long Ip6ReasmTimeout;
83 unsigned long Ip6ReasmReqds;
84 unsigned long Ip6ReasmOKs;
85 unsigned long Ip6ReasmFails;
86 unsigned long Ip6FragOKs;
87 unsigned long Ip6FragFails;
88 unsigned long Ip6FragCreates;
89 unsigned long Ip6InMcastPkts;
90 unsigned long Ip6OutMcastPkts;
91 unsigned long __pad[0];
92 } ____cacheline_aligned;
96 unsigned long IcmpInMsgs;
97 unsigned long IcmpInErrors;
98 unsigned long IcmpInDestUnreachs;
99 unsigned long IcmpInTimeExcds;
100 unsigned long IcmpInParmProbs;
101 unsigned long IcmpInSrcQuenchs;
102 unsigned long IcmpInRedirects;
103 unsigned long IcmpInEchos;
104 unsigned long IcmpInEchoReps;
105 unsigned long IcmpInTimestamps;
106 unsigned long IcmpInTimestampReps;
107 unsigned long IcmpInAddrMasks;
108 unsigned long IcmpInAddrMaskReps;
109 unsigned long IcmpOutMsgs;
110 unsigned long IcmpOutErrors;
111 unsigned long IcmpOutDestUnreachs;
112 unsigned long IcmpOutTimeExcds;
113 unsigned long IcmpOutParmProbs;
114 unsigned long IcmpOutSrcQuenchs;
115 unsigned long IcmpOutRedirects;
116 unsigned long IcmpOutEchos;
117 unsigned long IcmpOutEchoReps;
118 unsigned long IcmpOutTimestamps;
119 unsigned long IcmpOutTimestampReps;
120 unsigned long IcmpOutAddrMasks;
121 unsigned long IcmpOutAddrMaskReps;
123 unsigned long __pad[0];
124 } ____cacheline_aligned;
128 unsigned long Icmp6InMsgs;
129 unsigned long Icmp6InErrors;
131 unsigned long Icmp6InDestUnreachs;
132 unsigned long Icmp6InPktTooBigs;
133 unsigned long Icmp6InTimeExcds;
134 unsigned long Icmp6InParmProblems;
136 unsigned long Icmp6InEchos;
137 unsigned long Icmp6InEchoReplies;
138 unsigned long Icmp6InGroupMembQueries;
139 unsigned long Icmp6InGroupMembResponses;
140 unsigned long Icmp6InGroupMembReductions;
141 unsigned long Icmp6InRouterSolicits;
142 unsigned long Icmp6InRouterAdvertisements;
143 unsigned long Icmp6InNeighborSolicits;
144 unsigned long Icmp6InNeighborAdvertisements;
145 unsigned long Icmp6InRedirects;
147 unsigned long Icmp6OutMsgs;
149 unsigned long Icmp6OutDestUnreachs;
150 unsigned long Icmp6OutPktTooBigs;
151 unsigned long Icmp6OutTimeExcds;
152 unsigned long Icmp6OutParmProblems;
154 unsigned long Icmp6OutEchoReplies;
155 unsigned long Icmp6OutRouterSolicits;
156 unsigned long Icmp6OutNeighborSolicits;
157 unsigned long Icmp6OutNeighborAdvertisements;
158 unsigned long Icmp6OutRedirects;
159 unsigned long Icmp6OutGroupMembResponses;
160 unsigned long Icmp6OutGroupMembReductions;
161 unsigned long __pad[0];
162 } ____cacheline_aligned;
166 unsigned long TcpRtoAlgorithm;
167 unsigned long TcpRtoMin;
168 unsigned long TcpRtoMax;
169 unsigned long TcpMaxConn;
170 unsigned long TcpActiveOpens;
171 unsigned long TcpPassiveOpens;
172 unsigned long TcpAttemptFails;
173 unsigned long TcpEstabResets;
174 unsigned long TcpCurrEstab;
175 unsigned long TcpInSegs;
176 unsigned long TcpOutSegs;
177 unsigned long TcpRetransSegs;
178 unsigned long TcpInErrs;
179 unsigned long TcpOutRsts;
180 unsigned long __pad[0];
181 } ____cacheline_aligned;
185 unsigned long UdpInDatagrams;
186 unsigned long UdpNoPorts;
187 unsigned long UdpInErrors;
188 unsigned long UdpOutDatagrams;
189 unsigned long __pad[0];
190 } ____cacheline_aligned;
194 unsigned long SyncookiesSent;
195 unsigned long SyncookiesRecv;
196 unsigned long SyncookiesFailed;
197 unsigned long EmbryonicRsts;
198 unsigned long PruneCalled;
199 unsigned long RcvPruned;
200 unsigned long OfoPruned;
201 unsigned long OutOfWindowIcmps;
202 unsigned long LockDroppedIcmps;
203 unsigned long ArpFilter;
204 unsigned long TimeWaited;
205 unsigned long TimeWaitRecycled;
206 unsigned long TimeWaitKilled;
207 unsigned long PAWSPassiveRejected;
208 unsigned long PAWSActiveRejected;
209 unsigned long PAWSEstabRejected;
210 unsigned long DelayedACKs;
211 unsigned long DelayedACKLocked;
212 unsigned long DelayedACKLost;
213 unsigned long ListenOverflows;
214 unsigned long ListenDrops;
215 unsigned long TCPPrequeued;
216 unsigned long TCPDirectCopyFromBacklog;
217 unsigned long TCPDirectCopyFromPrequeue;
218 unsigned long TCPPrequeueDropped;
219 unsigned long TCPHPHits;
220 unsigned long TCPHPHitsToUser;
221 unsigned long TCPPureAcks;
222 unsigned long TCPHPAcks;
223 unsigned long TCPRenoRecovery;
224 unsigned long TCPSackRecovery;
225 unsigned long TCPSACKReneging;
226 unsigned long TCPFACKReorder;
227 unsigned long TCPSACKReorder;
228 unsigned long TCPRenoReorder;
229 unsigned long TCPTSReorder;
230 unsigned long TCPFullUndo;
231 unsigned long TCPPartialUndo;
232 unsigned long TCPDSACKUndo;
233 unsigned long TCPLossUndo;
234 unsigned long TCPLoss;
235 unsigned long TCPLostRetransmit;
236 unsigned long TCPRenoFailures;
237 unsigned long TCPSackFailures;
238 unsigned long TCPLossFailures;
239 unsigned long TCPFastRetrans;
240 unsigned long TCPForwardRetrans;
241 unsigned long TCPSlowStartRetrans;
242 unsigned long TCPTimeouts;
243 unsigned long TCPRenoRecoveryFail;
244 unsigned long TCPSackRecoveryFail;
245 unsigned long TCPSchedulerFailed;
246 unsigned long TCPRcvCollapsed;
247 unsigned long TCPDSACKOldSent;
248 unsigned long TCPDSACKOfoSent;
249 unsigned long TCPDSACKRecv;
250 unsigned long TCPDSACKOfoRecv;
251 unsigned long TCPAbortOnSyn;
252 unsigned long TCPAbortOnData;
253 unsigned long TCPAbortOnClose;
254 unsigned long TCPAbortOnMemory;
255 unsigned long TCPAbortOnTimeout;
256 unsigned long TCPAbortOnLinger;
257 unsigned long TCPAbortFailed;
258 unsigned long TCPMemoryPressures;
259 unsigned long __pad[0];
260 } ____cacheline_aligned;
264 * FIXME: On x86 and some other CPUs the split into user and softirq parts is not needed because
265 * addl $1,memory is atomic against interrupts (but atomic_inc would be overkill because of the lock
266 * cycles). Wants new nonlocked_atomic_inc() primitives -AK
268 #define SNMP_INC_STATS(mib, field) ((mib)[2*smp_processor_id()+!in_softirq()].field++)
269 #define SNMP_INC_STATS_BH(mib, field) ((mib)[2*smp_processor_id()].field++)
270 #define SNMP_INC_STATS_USER(mib, field) ((mib)[2*smp_processor_id()+1].field++)