Blame view
include/net/snmp.h
5.89 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/* * * 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. * |
1da177e4c Linux-2.6.12-rc2 |
17 18 19 20 21 22 23 |
*/ #ifndef _SNMP_H #define _SNMP_H #include <linux/cache.h> #include <linux/snmp.h> |
d647b36a6 [SNMP]: Fix SNMP ... |
24 |
#include <linux/smp.h> |
1da177e4c Linux-2.6.12-rc2 |
25 26 27 28 29 30 31 32 33 34 |
/* * Mibs are stored in array of unsigned long. */ /* * struct snmp_mib{} * - list of entries for particular API (such as /proc/net/snmp) * - name of entries. */ struct snmp_mib { |
5833929cc net: constify MIB... |
35 |
const char *name; |
1da177e4c Linux-2.6.12-rc2 |
36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
int entry; }; #define SNMP_MIB_ITEM(_name,_entry) { \ .name = _name, \ .entry = _entry, \ } #define SNMP_MIB_SENTINEL { \ .name = NULL, \ .entry = 0, \ } /* |
4ce3c183f snmp: 64bit ipsta... |
50 |
* We use unsigned longs for most mibs but u64 for ipstats. |
1da177e4c Linux-2.6.12-rc2 |
51 |
*/ |
4ce3c183f snmp: 64bit ipsta... |
52 |
#include <linux/u64_stats_sync.h> |
1da177e4c Linux-2.6.12-rc2 |
53 |
|
1da177e4c Linux-2.6.12-rc2 |
54 55 56 |
/* IPstats */ #define IPSTATS_MIB_MAX __IPSTATS_MIB_MAX struct ipstats_mib { |
4ce3c183f snmp: 64bit ipsta... |
57 58 59 |
/* mibs[] must be first field of struct ipstats_mib */ u64 mibs[IPSTATS_MIB_MAX]; struct u64_stats_sync syncp; |
ec733b15a net: snmp mib cle... |
60 |
}; |
1da177e4c Linux-2.6.12-rc2 |
61 62 |
/* ICMP */ |
a9527a3b6 net: snmp: fix th... |
63 |
#define ICMP_MIB_MAX __ICMP_MIB_MAX |
1da177e4c Linux-2.6.12-rc2 |
64 65 |
struct icmp_mib { unsigned long mibs[ICMP_MIB_MAX]; |
ec733b15a net: snmp mib cle... |
66 |
}; |
1da177e4c Linux-2.6.12-rc2 |
67 |
|
96793b482 [IPV4]: Add ICMPM... |
68 69 |
#define ICMPMSG_MIB_MAX __ICMPMSG_MIB_MAX struct icmpmsg_mib { |
acb32ba3d ipv4: reduce perc... |
70 |
atomic_long_t mibs[ICMPMSG_MIB_MAX]; |
ec733b15a net: snmp mib cle... |
71 |
}; |
96793b482 [IPV4]: Add ICMPM... |
72 |
|
1da177e4c Linux-2.6.12-rc2 |
73 74 |
/* ICMP6 (IPv6-ICMP) */ #define ICMP6_MIB_MAX __ICMP6_MIB_MAX |
be281e554 ipv6: reduce per ... |
75 |
/* per network ns counters */ |
1da177e4c Linux-2.6.12-rc2 |
76 77 |
struct icmpv6_mib { unsigned long mibs[ICMP6_MIB_MAX]; |
ec733b15a net: snmp mib cle... |
78 |
}; |
be281e554 ipv6: reduce per ... |
79 80 81 82 |
/* per device counters, (shared on all cpus) */ struct icmpv6_mib_device { atomic_long_t mibs[ICMP6_MIB_MAX]; }; |
1da177e4c Linux-2.6.12-rc2 |
83 |
|
14878f75a [IPV6]: Add ICMPM... |
84 |
#define ICMP6MSG_MIB_MAX __ICMP6MSG_MIB_MAX |
be281e554 ipv6: reduce per ... |
85 |
/* per network ns counters */ |
14878f75a [IPV6]: Add ICMPM... |
86 |
struct icmpv6msg_mib { |
2a24444f8 ipv6: reduce perc... |
87 |
atomic_long_t mibs[ICMP6MSG_MIB_MAX]; |
ec733b15a net: snmp mib cle... |
88 |
}; |
be281e554 ipv6: reduce per ... |
89 90 91 92 |
/* per device counters, (shared on all cpus) */ struct icmpv6msg_mib_device { atomic_long_t mibs[ICMP6MSG_MIB_MAX]; }; |
14878f75a [IPV6]: Add ICMPM... |
93 |
|
1da177e4c Linux-2.6.12-rc2 |
94 95 96 97 |
/* TCP */ #define TCP_MIB_MAX __TCP_MIB_MAX struct tcp_mib { unsigned long mibs[TCP_MIB_MAX]; |
ec733b15a net: snmp mib cle... |
98 |
}; |
1da177e4c Linux-2.6.12-rc2 |
99 100 101 102 103 |
/* UDP */ #define UDP_MIB_MAX __UDP_MIB_MAX struct udp_mib { unsigned long mibs[UDP_MIB_MAX]; |
ec733b15a net: snmp mib cle... |
104 |
}; |
1da177e4c Linux-2.6.12-rc2 |
105 |
|
1da177e4c Linux-2.6.12-rc2 |
106 107 108 109 110 |
/* Linux */ #define LINUX_MIB_MAX __LINUX_MIB_MAX struct linux_mib { unsigned long mibs[LINUX_MIB_MAX]; }; |
558f82ef6 [XFRM]: Define pa... |
111 112 113 114 115 |
/* Linux Xfrm */ #define LINUX_MIB_XFRMMAX __LINUX_MIB_XFRMMAX struct linux_xfrm_mib { unsigned long mibs[LINUX_MIB_XFRMMAX]; }; |
1da177e4c Linux-2.6.12-rc2 |
116 |
|
8f0ea0fe3 snmp: reduce perc... |
117 |
#define SNMP_ARRAY_SZ 1 |
1da177e4c Linux-2.6.12-rc2 |
118 |
#define DEFINE_SNMP_STAT(type, name) \ |
8f0ea0fe3 snmp: reduce perc... |
119 |
__typeof__(type) __percpu *name[SNMP_ARRAY_SZ] |
be281e554 ipv6: reduce per ... |
120 121 |
#define DEFINE_SNMP_STAT_ATOMIC(type, name) \ __typeof__(type) *name |
1da177e4c Linux-2.6.12-rc2 |
122 |
#define DECLARE_SNMP_STAT(type, name) \ |
8f0ea0fe3 snmp: reduce perc... |
123 |
extern __typeof__(type) __percpu *name[SNMP_ARRAY_SZ] |
1da177e4c Linux-2.6.12-rc2 |
124 |
|
4eb41d10c this_cpu: Use thi... |
125 126 |
#define SNMP_INC_STATS_BH(mib, field) \ __this_cpu_inc(mib[0]->mibs[field]) |
8f0ea0fe3 snmp: reduce perc... |
127 |
|
4eb41d10c this_cpu: Use thi... |
128 |
#define SNMP_INC_STATS_USER(mib, field) \ |
933393f58 percpu: Remove ir... |
129 |
this_cpu_inc(mib[0]->mibs[field]) |
8f0ea0fe3 snmp: reduce perc... |
130 |
|
be281e554 ipv6: reduce per ... |
131 132 |
#define SNMP_INC_STATS_ATOMIC_LONG(mib, field) \ atomic_long_inc(&mib->mibs[field]) |
8f0ea0fe3 snmp: reduce perc... |
133 |
|
4eb41d10c this_cpu: Use thi... |
134 |
#define SNMP_INC_STATS(mib, field) \ |
933393f58 percpu: Remove ir... |
135 |
this_cpu_inc(mib[0]->mibs[field]) |
8f0ea0fe3 snmp: reduce perc... |
136 |
|
4eb41d10c this_cpu: Use thi... |
137 |
#define SNMP_DEC_STATS(mib, field) \ |
933393f58 percpu: Remove ir... |
138 |
this_cpu_dec(mib[0]->mibs[field]) |
8f0ea0fe3 snmp: reduce perc... |
139 |
|
4eb41d10c this_cpu: Use thi... |
140 141 |
#define SNMP_ADD_STATS_BH(mib, field, addend) \ __this_cpu_add(mib[0]->mibs[field], addend) |
8f0ea0fe3 snmp: reduce perc... |
142 |
|
4eb41d10c this_cpu: Use thi... |
143 |
#define SNMP_ADD_STATS_USER(mib, field, addend) \ |
933393f58 percpu: Remove ir... |
144 |
this_cpu_add(mib[0]->mibs[field], addend) |
8f0ea0fe3 snmp: reduce perc... |
145 |
|
aa2ea0586 tcp: fix outsegs ... |
146 |
#define SNMP_ADD_STATS(mib, field, addend) \ |
933393f58 percpu: Remove ir... |
147 |
this_cpu_add(mib[0]->mibs[field], addend) |
7d720c3e4 percpu: add __per... |
148 149 150 151 |
/* * Use "__typeof__(*mib[0]) *ptr" instead of "__typeof__(mib[0]) ptr" * to make @ptr a non-percpu pointer. */ |
edf391ff1 snmp: add missing... |
152 153 |
#define SNMP_UPD_PO_STATS(mib, basefield, addend) \ do { \ |
933393f58 percpu: Remove ir... |
154 155 |
this_cpu_inc(mib[0]->mibs[basefield##PKTS]); \ this_cpu_add(mib[0]->mibs[basefield##OCTETS], addend); \ |
edf391ff1 snmp: add missing... |
156 157 158 |
} while (0) #define SNMP_UPD_PO_STATS_BH(mib, basefield, addend) \ do { \ |
8f0ea0fe3 snmp: reduce perc... |
159 160 |
__this_cpu_inc(mib[0]->mibs[basefield##PKTS]); \ __this_cpu_add(mib[0]->mibs[basefield##OCTETS], addend); \ |
edf391ff1 snmp: add missing... |
161 |
} while (0) |
4ce3c183f snmp: 64bit ipsta... |
162 163 164 165 166 167 168 169 170 171 172 |
#if BITS_PER_LONG==32 #define SNMP_ADD_STATS64_BH(mib, field, addend) \ do { \ __typeof__(*mib[0]) *ptr = __this_cpu_ptr((mib)[0]); \ u64_stats_update_begin(&ptr->syncp); \ ptr->mibs[field] += addend; \ u64_stats_update_end(&ptr->syncp); \ } while (0) |
8f0ea0fe3 snmp: reduce perc... |
173 |
|
4ce3c183f snmp: 64bit ipsta... |
174 175 |
#define SNMP_ADD_STATS64_USER(mib, field, addend) \ do { \ |
8f0ea0fe3 snmp: reduce perc... |
176 177 178 |
local_bh_disable(); \ SNMP_ADD_STATS64_BH(mib, field, addend); \ local_bh_enable(); \ |
4ce3c183f snmp: 64bit ipsta... |
179 |
} while (0) |
8f0ea0fe3 snmp: reduce perc... |
180 |
|
4ce3c183f snmp: 64bit ipsta... |
181 |
#define SNMP_ADD_STATS64(mib, field, addend) \ |
8f0ea0fe3 snmp: reduce perc... |
182 |
SNMP_ADD_STATS64_USER(mib, field, addend) |
4ce3c183f snmp: 64bit ipsta... |
183 184 185 |
#define SNMP_INC_STATS64_BH(mib, field) SNMP_ADD_STATS64_BH(mib, field, 1) #define SNMP_INC_STATS64_USER(mib, field) SNMP_ADD_STATS64_USER(mib, field, 1) #define SNMP_INC_STATS64(mib, field) SNMP_ADD_STATS64(mib, field, 1) |
4ce3c183f snmp: 64bit ipsta... |
186 187 188 |
#define SNMP_UPD_PO_STATS64_BH(mib, basefield, addend) \ do { \ __typeof__(*mib[0]) *ptr; \ |
20246a800 snmp: SNMP_UPD_PO... |
189 |
ptr = __this_cpu_ptr((mib)[0]); \ |
4ce3c183f snmp: 64bit ipsta... |
190 191 192 193 194 |
u64_stats_update_begin(&ptr->syncp); \ ptr->mibs[basefield##PKTS]++; \ ptr->mibs[basefield##OCTETS] += addend; \ u64_stats_update_end(&ptr->syncp); \ } while (0) |
8f0ea0fe3 snmp: reduce perc... |
195 196 197 198 199 200 |
#define SNMP_UPD_PO_STATS64(mib, basefield, addend) \ do { \ local_bh_disable(); \ SNMP_UPD_PO_STATS64_BH(mib, basefield, addend); \ local_bh_enable(); \ } while (0) |
4ce3c183f snmp: 64bit ipsta... |
201 202 203 204 205 206 207 208 209 210 211 |
#else #define SNMP_INC_STATS64_BH(mib, field) SNMP_INC_STATS_BH(mib, field) #define SNMP_INC_STATS64_USER(mib, field) SNMP_INC_STATS_USER(mib, field) #define SNMP_INC_STATS64(mib, field) SNMP_INC_STATS(mib, field) #define SNMP_DEC_STATS64(mib, field) SNMP_DEC_STATS(mib, field) #define SNMP_ADD_STATS64_BH(mib, field, addend) SNMP_ADD_STATS_BH(mib, field, addend) #define SNMP_ADD_STATS64_USER(mib, field, addend) SNMP_ADD_STATS_USER(mib, field, addend) #define SNMP_ADD_STATS64(mib, field, addend) SNMP_ADD_STATS(mib, field, addend) #define SNMP_UPD_PO_STATS64(mib, basefield, addend) SNMP_UPD_PO_STATS(mib, basefield, addend) #define SNMP_UPD_PO_STATS64_BH(mib, basefield, addend) SNMP_UPD_PO_STATS_BH(mib, basefield, addend) #endif |
1da177e4c Linux-2.6.12-rc2 |
212 |
#endif |