cleanup
[linux-2.4.21-pre4.git] / include / net1 / snmp.h
1 /*
2  *
3  *              SNMP MIB entries for the IP subsystem.
4  *              
5  *              Alan Cox <gw4pts@gw4pts.ampr.org>
6  *
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)
11  *
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.
16  *
17  *              $Id: snmp.h,v 1.1.1.1 2005/04/11 02:51:08 jack Exp $
18  *
19  */
20  
21 #ifndef _SNMP_H
22 #define _SNMP_H
23
24 #include <linux/cache.h>
25  
26 /*
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!
30  */
31
32 /* 
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. 
39  * 
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
42  */ 
43
44  
45 struct ip_mib
46 {
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;
66  
67 struct ipv6_mib
68 {
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;
93  
94 struct icmp_mib
95 {
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;
122         unsigned long   dummy;
123         unsigned long   __pad[0]; 
124 } ____cacheline_aligned;
125
126 struct icmpv6_mib
127 {
128         unsigned long   Icmp6InMsgs;
129         unsigned long   Icmp6InErrors;
130
131         unsigned long   Icmp6InDestUnreachs;
132         unsigned long   Icmp6InPktTooBigs;
133         unsigned long   Icmp6InTimeExcds;
134         unsigned long   Icmp6InParmProblems;
135
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;
146
147         unsigned long   Icmp6OutMsgs;
148
149         unsigned long   Icmp6OutDestUnreachs;
150         unsigned long   Icmp6OutPktTooBigs;
151         unsigned long   Icmp6OutTimeExcds;
152         unsigned long   Icmp6OutParmProblems;
153
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;
163  
164 struct tcp_mib
165 {
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;
182  
183 struct udp_mib
184 {
185         unsigned long   UdpInDatagrams;
186         unsigned long   UdpNoPorts;
187         unsigned long   UdpInErrors;
188         unsigned long   UdpOutDatagrams;
189         unsigned long   __pad[0];
190 } ____cacheline_aligned; 
191
192 struct linux_mib 
193 {
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;
261
262
263 /* 
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
267  */ 
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++)
271         
272 #endif