1*5d5fbe79SDavid van Moolenbroek /**
2*5d5fbe79SDavid van Moolenbroek * @file
3*5d5fbe79SDavid van Moolenbroek * Management Information Base II (RFC1213) ICMP objects and functions.
4*5d5fbe79SDavid van Moolenbroek */
5*5d5fbe79SDavid van Moolenbroek
6*5d5fbe79SDavid van Moolenbroek /*
7*5d5fbe79SDavid van Moolenbroek * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands.
8*5d5fbe79SDavid van Moolenbroek * All rights reserved.
9*5d5fbe79SDavid van Moolenbroek *
10*5d5fbe79SDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without modification,
11*5d5fbe79SDavid van Moolenbroek * are permitted provided that the following conditions are met:
12*5d5fbe79SDavid van Moolenbroek *
13*5d5fbe79SDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright notice,
14*5d5fbe79SDavid van Moolenbroek * this list of conditions and the following disclaimer.
15*5d5fbe79SDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright notice,
16*5d5fbe79SDavid van Moolenbroek * this list of conditions and the following disclaimer in the documentation
17*5d5fbe79SDavid van Moolenbroek * and/or other materials provided with the distribution.
18*5d5fbe79SDavid van Moolenbroek * 3. The name of the author may not be used to endorse or promote products
19*5d5fbe79SDavid van Moolenbroek * derived from this software without specific prior written permission.
20*5d5fbe79SDavid van Moolenbroek *
21*5d5fbe79SDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
22*5d5fbe79SDavid van Moolenbroek * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23*5d5fbe79SDavid van Moolenbroek * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
24*5d5fbe79SDavid van Moolenbroek * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25*5d5fbe79SDavid van Moolenbroek * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26*5d5fbe79SDavid van Moolenbroek * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27*5d5fbe79SDavid van Moolenbroek * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28*5d5fbe79SDavid van Moolenbroek * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29*5d5fbe79SDavid van Moolenbroek * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
30*5d5fbe79SDavid van Moolenbroek * OF SUCH DAMAGE.
31*5d5fbe79SDavid van Moolenbroek *
32*5d5fbe79SDavid van Moolenbroek * Author: Dirk Ziegelmeier <dziegel@gmx.de>
33*5d5fbe79SDavid van Moolenbroek * Christiaan Simons <christiaan.simons@axon.tv>
34*5d5fbe79SDavid van Moolenbroek */
35*5d5fbe79SDavid van Moolenbroek
36*5d5fbe79SDavid van Moolenbroek #include "lwip/snmp.h"
37*5d5fbe79SDavid van Moolenbroek #include "lwip/apps/snmp.h"
38*5d5fbe79SDavid van Moolenbroek #include "lwip/apps/snmp_core.h"
39*5d5fbe79SDavid van Moolenbroek #include "lwip/apps/snmp_mib2.h"
40*5d5fbe79SDavid van Moolenbroek #include "lwip/apps/snmp_table.h"
41*5d5fbe79SDavid van Moolenbroek #include "lwip/apps/snmp_scalar.h"
42*5d5fbe79SDavid van Moolenbroek #include "lwip/icmp.h"
43*5d5fbe79SDavid van Moolenbroek #include "lwip/stats.h"
44*5d5fbe79SDavid van Moolenbroek
45*5d5fbe79SDavid van Moolenbroek #if LWIP_SNMP && SNMP_LWIP_MIB2 && LWIP_ICMP
46*5d5fbe79SDavid van Moolenbroek
47*5d5fbe79SDavid van Moolenbroek #if SNMP_USE_NETCONN
48*5d5fbe79SDavid van Moolenbroek #define SYNC_NODE_NAME(node_name) node_name ## _synced
49*5d5fbe79SDavid van Moolenbroek #define CREATE_LWIP_SYNC_NODE(oid, node_name) \
50*5d5fbe79SDavid van Moolenbroek static const struct snmp_threadsync_node node_name ## _synced = SNMP_CREATE_THREAD_SYNC_NODE(oid, &node_name.node, &snmp_mib2_lwip_locks);
51*5d5fbe79SDavid van Moolenbroek #else
52*5d5fbe79SDavid van Moolenbroek #define SYNC_NODE_NAME(node_name) node_name
53*5d5fbe79SDavid van Moolenbroek #define CREATE_LWIP_SYNC_NODE(oid, node_name)
54*5d5fbe79SDavid van Moolenbroek #endif
55*5d5fbe79SDavid van Moolenbroek
56*5d5fbe79SDavid van Moolenbroek /* --- icmp .1.3.6.1.2.1.5 ----------------------------------------------------- */
57*5d5fbe79SDavid van Moolenbroek
58*5d5fbe79SDavid van Moolenbroek static s16_t
icmp_get_value(const struct snmp_scalar_array_node_def * node,void * value)59*5d5fbe79SDavid van Moolenbroek icmp_get_value(const struct snmp_scalar_array_node_def *node, void *value)
60*5d5fbe79SDavid van Moolenbroek {
61*5d5fbe79SDavid van Moolenbroek u32_t *uint_ptr = (u32_t*)value;
62*5d5fbe79SDavid van Moolenbroek
63*5d5fbe79SDavid van Moolenbroek switch (node->oid) {
64*5d5fbe79SDavid van Moolenbroek case 1: /* icmpInMsgs */
65*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpinmsgs);
66*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
67*5d5fbe79SDavid van Moolenbroek case 2: /* icmpInErrors */
68*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpinerrors);
69*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
70*5d5fbe79SDavid van Moolenbroek case 3: /* icmpInDestUnreachs */
71*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpindestunreachs);
72*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
73*5d5fbe79SDavid van Moolenbroek case 4: /* icmpInTimeExcds */
74*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpintimeexcds);
75*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
76*5d5fbe79SDavid van Moolenbroek case 5: /* icmpInParmProbs */
77*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpinparmprobs);
78*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
79*5d5fbe79SDavid van Moolenbroek case 6: /* icmpInSrcQuenchs */
80*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpinsrcquenchs);
81*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
82*5d5fbe79SDavid van Moolenbroek case 7: /* icmpInRedirects */
83*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpinredirects);
84*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
85*5d5fbe79SDavid van Moolenbroek case 8: /* icmpInEchos */
86*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpinechos);
87*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
88*5d5fbe79SDavid van Moolenbroek case 9: /* icmpInEchoReps */
89*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpinechoreps);
90*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
91*5d5fbe79SDavid van Moolenbroek case 10: /* icmpInTimestamps */
92*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpintimestamps);
93*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
94*5d5fbe79SDavid van Moolenbroek case 11: /* icmpInTimestampReps */
95*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpintimestampreps);
96*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
97*5d5fbe79SDavid van Moolenbroek case 12: /* icmpInAddrMasks */
98*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpinaddrmasks);
99*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
100*5d5fbe79SDavid van Moolenbroek case 13: /* icmpInAddrMaskReps */
101*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpinaddrmaskreps);
102*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
103*5d5fbe79SDavid van Moolenbroek case 14: /* icmpOutMsgs */
104*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpoutmsgs);
105*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
106*5d5fbe79SDavid van Moolenbroek case 15: /* icmpOutErrors */
107*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpouterrors);
108*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
109*5d5fbe79SDavid van Moolenbroek case 16: /* icmpOutDestUnreachs */
110*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpoutdestunreachs);
111*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
112*5d5fbe79SDavid van Moolenbroek case 17: /* icmpOutTimeExcds */
113*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpouttimeexcds);
114*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
115*5d5fbe79SDavid van Moolenbroek case 18: /* icmpOutParmProbs: not supported -> always 0 */
116*5d5fbe79SDavid van Moolenbroek *uint_ptr = 0;
117*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
118*5d5fbe79SDavid van Moolenbroek case 19: /* icmpOutSrcQuenchs: not supported -> always 0 */
119*5d5fbe79SDavid van Moolenbroek *uint_ptr = 0;
120*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
121*5d5fbe79SDavid van Moolenbroek case 20: /* icmpOutRedirects: not supported -> always 0 */
122*5d5fbe79SDavid van Moolenbroek *uint_ptr = 0;
123*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
124*5d5fbe79SDavid van Moolenbroek case 21: /* icmpOutEchos */
125*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpoutechos);
126*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
127*5d5fbe79SDavid van Moolenbroek case 22: /* icmpOutEchoReps */
128*5d5fbe79SDavid van Moolenbroek *uint_ptr = STATS_GET(mib2.icmpoutechoreps);
129*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
130*5d5fbe79SDavid van Moolenbroek case 23: /* icmpOutTimestamps: not supported -> always 0 */
131*5d5fbe79SDavid van Moolenbroek *uint_ptr = 0;
132*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
133*5d5fbe79SDavid van Moolenbroek case 24: /* icmpOutTimestampReps: not supported -> always 0 */
134*5d5fbe79SDavid van Moolenbroek *uint_ptr = 0;
135*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
136*5d5fbe79SDavid van Moolenbroek case 25: /* icmpOutAddrMasks: not supported -> always 0 */
137*5d5fbe79SDavid van Moolenbroek *uint_ptr = 0;
138*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
139*5d5fbe79SDavid van Moolenbroek case 26: /* icmpOutAddrMaskReps: not supported -> always 0 */
140*5d5fbe79SDavid van Moolenbroek *uint_ptr = 0;
141*5d5fbe79SDavid van Moolenbroek return sizeof(*uint_ptr);
142*5d5fbe79SDavid van Moolenbroek default:
143*5d5fbe79SDavid van Moolenbroek LWIP_DEBUGF(SNMP_MIB_DEBUG,("icmp_get_value(): unknown id: %"S32_F"\n", node->oid));
144*5d5fbe79SDavid van Moolenbroek break;
145*5d5fbe79SDavid van Moolenbroek }
146*5d5fbe79SDavid van Moolenbroek
147*5d5fbe79SDavid van Moolenbroek return 0;
148*5d5fbe79SDavid van Moolenbroek }
149*5d5fbe79SDavid van Moolenbroek
150*5d5fbe79SDavid van Moolenbroek
151*5d5fbe79SDavid van Moolenbroek static const struct snmp_scalar_array_node_def icmp_nodes[] = {
152*5d5fbe79SDavid van Moolenbroek { 1, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
153*5d5fbe79SDavid van Moolenbroek { 2, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
154*5d5fbe79SDavid van Moolenbroek { 3, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
155*5d5fbe79SDavid van Moolenbroek { 4, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
156*5d5fbe79SDavid van Moolenbroek { 5, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
157*5d5fbe79SDavid van Moolenbroek { 6, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
158*5d5fbe79SDavid van Moolenbroek { 7, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
159*5d5fbe79SDavid van Moolenbroek { 8, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
160*5d5fbe79SDavid van Moolenbroek { 9, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
161*5d5fbe79SDavid van Moolenbroek {10, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
162*5d5fbe79SDavid van Moolenbroek {11, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
163*5d5fbe79SDavid van Moolenbroek {12, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
164*5d5fbe79SDavid van Moolenbroek {13, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
165*5d5fbe79SDavid van Moolenbroek {14, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
166*5d5fbe79SDavid van Moolenbroek {15, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
167*5d5fbe79SDavid van Moolenbroek {16, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
168*5d5fbe79SDavid van Moolenbroek {17, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
169*5d5fbe79SDavid van Moolenbroek {18, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
170*5d5fbe79SDavid van Moolenbroek {19, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
171*5d5fbe79SDavid van Moolenbroek {20, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
172*5d5fbe79SDavid van Moolenbroek {21, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
173*5d5fbe79SDavid van Moolenbroek {22, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
174*5d5fbe79SDavid van Moolenbroek {23, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
175*5d5fbe79SDavid van Moolenbroek {24, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
176*5d5fbe79SDavid van Moolenbroek {25, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
177*5d5fbe79SDavid van Moolenbroek {26, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY}
178*5d5fbe79SDavid van Moolenbroek };
179*5d5fbe79SDavid van Moolenbroek
180*5d5fbe79SDavid van Moolenbroek const struct snmp_scalar_array_node snmp_mib2_icmp_root = SNMP_SCALAR_CREATE_ARRAY_NODE(5, icmp_nodes, icmp_get_value, NULL, NULL);
181*5d5fbe79SDavid van Moolenbroek
182*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_SNMP && SNMP_LWIP_MIB2 && LWIP_ICMP */
183