linux-bk/include/net/snmp.h
<<
>>
Prefs
   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.19 2001/06/14 13:40:46 davem 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/*
  46 * RFC 1213:  MIB-II
  47 * RFC 2011 (updates 1213):  SNMPv2-MIB-IP
  48 * RFC 2863:  Interfaces Group MIB
  49 */
  50struct ip_mib
  51{
  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]; 
  70};
  71 
  72/*
  73 * RFC 2465:  IPv6 MIB: General Group
  74 */
  75struct ipv6_mib
  76{
  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]; 
 100};
 101 
 102/*
 103 * RFC 1213:  MIB-II ICMP Group
 104 * RFC 2011 (updates 1213):  SNMPv2 MIB for IP: ICMP group
 105 */
 106struct icmp_mib
 107{
 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;
 134        unsigned long   dummy;
 135        unsigned long   __pad[0]; 
 136};
 137
 138/*
 139 * RFC 2466:  ICMPv6-MIB
 140 */
 141struct icmpv6_mib
 142{
 143        unsigned long   Icmp6InMsgs;
 144        unsigned long   Icmp6InErrors;
 145
 146        unsigned long   Icmp6InDestUnreachs;
 147        unsigned long   Icmp6InPktTooBigs;
 148        unsigned long   Icmp6InTimeExcds;
 149        unsigned long   Icmp6InParmProblems;
 150
 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;
 161
 162        unsigned long   Icmp6OutMsgs;
 163
 164        unsigned long   Icmp6OutDestUnreachs;
 165        unsigned long   Icmp6OutPktTooBigs;
 166        unsigned long   Icmp6OutTimeExcds;
 167        unsigned long   Icmp6OutParmProblems;
 168
 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]; 
 177};
 178 
 179/*
 180 * RFC 1213:  MIB-II TCP group
 181 * RFC 2012 (updates 1213):  SNMPv2-MIB-TCP
 182 */
 183struct tcp_mib
 184{
 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]; 
 200};
 201 
 202/*
 203 * RFC 1213:  MIB-II UDP group
 204 * RFC 2013 (updates 1213):  SNMPv2-MIB-UDP
 205 */
 206struct udp_mib
 207{
 208        unsigned long   UdpInDatagrams;
 209        unsigned long   UdpNoPorts;
 210        unsigned long   UdpInErrors;
 211        unsigned long   UdpOutDatagrams;
 212        unsigned long   __pad[0];
 213}; 
 214
 215/* draft-ietf-sigtran-sctp-mib-07.txt */
 216struct sctp_mib
 217{
 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];
 242};
 243
 244struct linux_mib 
 245{
 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];
 312};
 313
 314
 315/* 
 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
 319 */ 
 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]
 324
 325#define SNMP_STAT_BHPTR(name)   (name[0])
 326#define SNMP_STAT_USRPTR(name)  (name[1])
 327
 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)
 342        
 343#endif
 344
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.