1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#ifndef _SNMP_H
22#define _SNMP_H
23
24#include <linux/cache.h>
25#include <linux/snmp.h>
26
27
28
29
30
31
32
33
34
35struct snmp_mib {
36 char *name;
37 int entry;
38};
39
40#define SNMP_MIB_ITEM(_name,_entry) { \
41 .name = _name, \
42 .entry = _entry, \
43}
44
45#define SNMP_MIB_SENTINEL { \
46 .name = NULL, \
47 .entry = 0, \
48}
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69#define __SNMP_MIB_ALIGN__ ____cacheline_aligned
70
71
72#define IPSTATS_MIB_MAX __IPSTATS_MIB_MAX
73struct ipstats_mib {
74 unsigned long mibs[IPSTATS_MIB_MAX];
75} __SNMP_MIB_ALIGN__;
76
77
78#define ICMP_MIB_DUMMY __ICMP_MIB_MAX
79#define ICMP_MIB_MAX (__ICMP_MIB_MAX + 1)
80
81struct icmp_mib {
82 unsigned long mibs[ICMP_MIB_MAX];
83} __SNMP_MIB_ALIGN__;
84
85
86#define ICMP6_MIB_MAX __ICMP6_MIB_MAX
87struct icmpv6_mib {
88 unsigned long mibs[ICMP6_MIB_MAX];
89} __SNMP_MIB_ALIGN__;
90
91
92#define TCP_MIB_MAX __TCP_MIB_MAX
93struct tcp_mib {
94 unsigned long mibs[TCP_MIB_MAX];
95} __SNMP_MIB_ALIGN__;
96
97
98#define UDP_MIB_MAX __UDP_MIB_MAX
99struct udp_mib {
100 unsigned long mibs[UDP_MIB_MAX];
101} __SNMP_MIB_ALIGN__;
102
103
104#define SCTP_MIB_MAX __SCTP_MIB_MAX
105struct sctp_mib {
106 unsigned long mibs[SCTP_MIB_MAX];
107} __SNMP_MIB_ALIGN__;
108
109
110#define LINUX_MIB_MAX __LINUX_MIB_MAX
111struct linux_mib {
112 unsigned long mibs[LINUX_MIB_MAX];
113};
114
115
116
117
118
119
120
121
122#define DEFINE_SNMP_STAT(type, name) \
123 __typeof__(type) *name[2]
124#define DECLARE_SNMP_STAT(type, name) \
125 extern __typeof__(type) *name[2]
126
127#define SNMP_STAT_BHPTR(name) (name[0])
128#define SNMP_STAT_USRPTR(name) (name[1])
129
130#define SNMP_INC_STATS_BH(mib, field) \
131 (per_cpu_ptr(mib[0], smp_processor_id())->mibs[field]++)
132#define SNMP_INC_STATS_OFFSET_BH(mib, field, offset) \
133 (per_cpu_ptr(mib[0], smp_processor_id())->mibs[field + (offset)]++)
134#define SNMP_INC_STATS_USER(mib, field) \
135 (per_cpu_ptr(mib[1], smp_processor_id())->mibs[field]++)
136#define SNMP_INC_STATS(mib, field) \
137 (per_cpu_ptr(mib[!in_softirq()], smp_processor_id())->mibs[field]++)
138#define SNMP_DEC_STATS(mib, field) \
139 (per_cpu_ptr(mib[!in_softirq()], smp_processor_id())->mibs[field]--)
140#define SNMP_ADD_STATS_BH(mib, field, addend) \
141 (per_cpu_ptr(mib[0], smp_processor_id())->mibs[field] += addend)
142#define SNMP_ADD_STATS_USER(mib, field, addend) \
143 (per_cpu_ptr(mib[1], smp_processor_id())->mibs[field] += addend)
144
145#endif
146