3 * Management Information Base II (RFC1213) objects and functions.
\r
5 * @note the object identifiers for this MIB-2 and private MIB tree
\r
6 * must be kept in sorted ascending order. This to ensure correct getnext operation.
\r
10 * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands.
\r
11 * All rights reserved.
\r
13 * Redistribution and use in source and binary forms, with or without modification,
\r
14 * are permitted provided that the following conditions are met:
\r
16 * 1. Redistributions of source code must retain the above copyright notice,
\r
17 * this list of conditions and the following disclaimer.
\r
18 * 2. Redistributions in binary form must reproduce the above copyright notice,
\r
19 * this list of conditions and the following disclaimer in the documentation
\r
20 * and/or other materials provided with the distribution.
\r
21 * 3. The name of the author may not be used to endorse or promote products
\r
22 * derived from this software without specific prior written permission.
\r
24 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
\r
25 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
\r
26 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
\r
27 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
\r
28 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
\r
29 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
\r
30 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
\r
31 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
\r
32 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
\r
35 * Author: Christiaan Simons <christiaan.simons@axon.tv>
\r
38 #include "arch/cc.h"
\r
39 #include "lwip/opt.h"
\r
42 #include "lwip/snmp.h"
\r
43 #include "lwip/netif.h"
\r
44 #include "netif/etharp.h"
\r
45 #include "lwip/ip.h"
\r
46 #include "lwip/ip_frag.h"
\r
47 #include "lwip/tcp.h"
\r
48 #include "lwip/udp.h"
\r
49 #include "lwip/snmp_asn1.h"
\r
50 #include "lwip/snmp_structs.h"
\r
53 * IANA assigned enterprise ID for lwIP is 26381
\r
54 * @see http://www.iana.org/assignments/enterprise-numbers
\r
56 * @note this enterprise ID is assigned to the lwIP project,
\r
57 * all object identifiers living under this ID are assigned
\r
58 * by the lwIP maintainers (contact Christiaan Simons)!
\r
59 * @note don't change this define, use snmp_set_sysobjid()
\r
61 * If you need to create your own private MIB you'll need
\r
62 * to apply for your own enterprise ID with IANA:
\r
63 * http://www.iana.org/numbers.html
\r
65 #define SNMP_ENTERPRISE_ID 26381
\r
66 #define SNMP_SYSOBJID_LEN 7
\r
67 #define SNMP_SYSOBJID {1, 3, 6, 1, 4, 1, SNMP_ENTERPRISE_ID}
\r
69 #ifndef SNMP_SYSSERVICES
\r
70 #define SNMP_SYSSERVICES ((1 << 6) | (1 << 3) | ((IP_FORWARD) << 2))
\r
73 static void system_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
74 static void system_get_value(struct obj_def *od, u16_t len, void *value);
\r
75 static u8_t system_set_test(struct obj_def *od, u16_t len, void *value);
\r
76 static void system_set_value(struct obj_def *od, u16_t len, void *value);
\r
77 static void interfaces_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
78 static void interfaces_get_value(struct obj_def *od, u16_t len, void *value);
\r
79 static void ifentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
80 static void ifentry_get_value(struct obj_def *od, u16_t len, void *value);
\r
81 static void atentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
82 static void atentry_get_value(struct obj_def *od, u16_t len, void *value);
\r
83 static void ip_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
84 static void ip_get_value(struct obj_def *od, u16_t len, void *value);
\r
85 static u8_t ip_set_test(struct obj_def *od, u16_t len, void *value);
\r
86 static void ip_addrentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
87 static void ip_addrentry_get_value(struct obj_def *od, u16_t len, void *value);
\r
88 static void ip_rteentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
89 static void ip_rteentry_get_value(struct obj_def *od, u16_t len, void *value);
\r
90 static void ip_ntomentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
91 static void ip_ntomentry_get_value(struct obj_def *od, u16_t len, void *value);
\r
92 static void icmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
93 static void icmp_get_value(struct obj_def *od, u16_t len, void *value);
\r
95 static void tcp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
96 static void tcp_get_value(struct obj_def *od, u16_t len, void *value);
\r
97 static void tcpconnentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
98 static void tcpconnentry_get_value(struct obj_def *od, u16_t len, void *value);
\r
100 static void udp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
101 static void udp_get_value(struct obj_def *od, u16_t len, void *value);
\r
102 static void udpentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
103 static void udpentry_get_value(struct obj_def *od, u16_t len, void *value);
\r
104 static void snmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
\r
105 static void snmp_get_value(struct obj_def *od, u16_t len, void *value);
\r
106 static u8_t snmp_set_test(struct obj_def *od, u16_t len, void *value);
\r
107 static void snmp_set_value(struct obj_def *od, u16_t len, void *value);
\r
110 /* snmp .1.3.6.1.2.1.11 */
\r
111 const mib_scalar_node snmp_scalar = {
\r
112 &snmp_get_object_def,
\r
119 const s32_t snmp_ids[28] = {
\r
120 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16,
\r
121 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30
\r
123 struct mib_node* const snmp_nodes[28] = {
\r
124 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
125 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
126 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
127 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
128 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
129 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
130 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
131 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
132 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
133 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
134 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
135 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
136 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar,
\r
137 (struct mib_node* const)&snmp_scalar, (struct mib_node* const)&snmp_scalar
\r
139 const struct mib_array_node snmp = {
\r
140 &noleafs_get_object_def,
\r
141 &noleafs_get_value,
\r
143 &noleafs_set_value,
\r
150 /* dot3 and EtherLike MIB not planned. (transmission .1.3.6.1.2.1.10) */
\r
151 /* historical (some say hysterical). (cmot .1.3.6.1.2.1.9) */
\r
152 /* lwIP has no EGP, thus may not implement it. (egp .1.3.6.1.2.1.8) */
\r
154 /* udp .1.3.6.1.2.1.7 */
\r
155 /** index root node for udpTable */
\r
156 struct mib_list_rootnode udp_root = {
\r
157 &noleafs_get_object_def,
\r
158 &noleafs_get_value,
\r
160 &noleafs_set_value,
\r
167 const s32_t udpentry_ids[2] = { 1, 2 };
\r
168 struct mib_node* const udpentry_nodes[2] = {
\r
169 (struct mib_node* const)&udp_root, (struct mib_node* const)&udp_root,
\r
171 const struct mib_array_node udpentry = {
\r
172 &noleafs_get_object_def,
\r
173 &noleafs_get_value,
\r
175 &noleafs_set_value,
\r
182 s32_t udptable_id = 1;
\r
183 struct mib_node* udptable_node = (struct mib_node* const)&udpentry;
\r
184 struct mib_ram_array_node udptable = {
\r
185 &noleafs_get_object_def,
\r
186 &noleafs_get_value,
\r
188 &noleafs_set_value,
\r
195 const mib_scalar_node udp_scalar = {
\r
196 &udp_get_object_def,
\r
199 &noleafs_set_value,
\r
203 const s32_t udp_ids[5] = { 1, 2, 3, 4, 5 };
\r
204 struct mib_node* const udp_nodes[5] = {
\r
205 (struct mib_node* const)&udp_scalar, (struct mib_node* const)&udp_scalar,
\r
206 (struct mib_node* const)&udp_scalar, (struct mib_node* const)&udp_scalar,
\r
207 (struct mib_node* const)&udptable
\r
209 const struct mib_array_node udp = {
\r
210 &noleafs_get_object_def,
\r
211 &noleafs_get_value,
\r
213 &noleafs_set_value,
\r
220 /* tcp .1.3.6.1.2.1.6 */
\r
222 /* only if the TCP protocol is available may implement this group */
\r
223 /** index root node for tcpConnTable */
\r
224 struct mib_list_rootnode tcpconntree_root = {
\r
225 &noleafs_get_object_def,
\r
226 &noleafs_get_value,
\r
228 &noleafs_set_value,
\r
235 const s32_t tcpconnentry_ids[5] = { 1, 2, 3, 4, 5 };
\r
236 struct mib_node* const tcpconnentry_nodes[5] = {
\r
237 (struct mib_node* const)&tcpconntree_root, (struct mib_node* const)&tcpconntree_root,
\r
238 (struct mib_node* const)&tcpconntree_root, (struct mib_node* const)&tcpconntree_root,
\r
239 (struct mib_node* const)&tcpconntree_root
\r
241 const struct mib_array_node tcpconnentry = {
\r
242 &noleafs_get_object_def,
\r
243 &noleafs_get_value,
\r
245 &noleafs_set_value,
\r
252 s32_t tcpconntable_id = 1;
\r
253 struct mib_node* tcpconntable_node = (struct mib_node* const)&tcpconnentry;
\r
254 struct mib_ram_array_node tcpconntable = {
\r
255 &noleafs_get_object_def,
\r
256 &noleafs_get_value,
\r
258 &noleafs_set_value,
\r
260 /** @todo update maxlength when inserting / deleting from table
\r
261 0 when table is empty, 1 when more than one entry */
\r
267 const mib_scalar_node tcp_scalar = {
\r
268 &tcp_get_object_def,
\r
271 &noleafs_set_value,
\r
275 const s32_t tcp_ids[15] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
\r
276 struct mib_node* const tcp_nodes[15] = {
\r
277 (struct mib_node* const)&tcp_scalar, (struct mib_node* const)&tcp_scalar,
\r
278 (struct mib_node* const)&tcp_scalar, (struct mib_node* const)&tcp_scalar,
\r
279 (struct mib_node* const)&tcp_scalar, (struct mib_node* const)&tcp_scalar,
\r
280 (struct mib_node* const)&tcp_scalar, (struct mib_node* const)&tcp_scalar,
\r
281 (struct mib_node* const)&tcp_scalar, (struct mib_node* const)&tcp_scalar,
\r
282 (struct mib_node* const)&tcp_scalar, (struct mib_node* const)&tcp_scalar,
\r
283 (struct mib_node* const)&tcpconntable, (struct mib_node* const)&tcp_scalar,
\r
284 (struct mib_node* const)&tcp_scalar
\r
286 const struct mib_array_node tcp = {
\r
287 &noleafs_get_object_def,
\r
288 &noleafs_get_value,
\r
290 &noleafs_set_value,
\r
298 /* icmp .1.3.6.1.2.1.5 */
\r
299 const mib_scalar_node icmp_scalar = {
\r
300 &icmp_get_object_def,
\r
303 &noleafs_set_value,
\r
307 const s32_t icmp_ids[26] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 };
\r
308 struct mib_node* const icmp_nodes[26] = {
\r
309 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
310 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
311 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
312 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
313 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
314 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
315 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
316 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
317 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
318 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
319 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
320 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar,
\r
321 (struct mib_node* const)&icmp_scalar, (struct mib_node* const)&icmp_scalar
\r
323 const struct mib_array_node icmp = {
\r
324 &noleafs_get_object_def,
\r
325 &noleafs_get_value,
\r
327 &noleafs_set_value,
\r
334 /** index root node for ipNetToMediaTable */
\r
335 struct mib_list_rootnode ipntomtree_root = {
\r
336 &noleafs_get_object_def,
\r
337 &noleafs_get_value,
\r
339 &noleafs_set_value,
\r
346 const s32_t ipntomentry_ids[4] = { 1, 2, 3, 4 };
\r
347 struct mib_node* const ipntomentry_nodes[4] = {
\r
348 (struct mib_node* const)&ipntomtree_root, (struct mib_node* const)&ipntomtree_root,
\r
349 (struct mib_node* const)&ipntomtree_root, (struct mib_node* const)&ipntomtree_root
\r
351 const struct mib_array_node ipntomentry = {
\r
352 &noleafs_get_object_def,
\r
353 &noleafs_get_value,
\r
355 &noleafs_set_value,
\r
362 s32_t ipntomtable_id = 1;
\r
363 struct mib_node* ipntomtable_node = (struct mib_node* const)&ipntomentry;
\r
364 struct mib_ram_array_node ipntomtable = {
\r
365 &noleafs_get_object_def,
\r
366 &noleafs_get_value,
\r
368 &noleafs_set_value,
\r
375 /** index root node for ipRouteTable */
\r
376 struct mib_list_rootnode iprtetree_root = {
\r
377 &noleafs_get_object_def,
\r
378 &noleafs_get_value,
\r
380 &noleafs_set_value,
\r
387 const s32_t iprteentry_ids[13] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
\r
388 struct mib_node* const iprteentry_nodes[13] = {
\r
389 (struct mib_node* const)&iprtetree_root, (struct mib_node* const)&iprtetree_root,
\r
390 (struct mib_node* const)&iprtetree_root, (struct mib_node* const)&iprtetree_root,
\r
391 (struct mib_node* const)&iprtetree_root, (struct mib_node* const)&iprtetree_root,
\r
392 (struct mib_node* const)&iprtetree_root, (struct mib_node* const)&iprtetree_root,
\r
393 (struct mib_node* const)&iprtetree_root, (struct mib_node* const)&iprtetree_root,
\r
394 (struct mib_node* const)&iprtetree_root, (struct mib_node* const)&iprtetree_root,
\r
395 (struct mib_node* const)&iprtetree_root
\r
397 const struct mib_array_node iprteentry = {
\r
398 &noleafs_get_object_def,
\r
399 &noleafs_get_value,
\r
401 &noleafs_set_value,
\r
408 s32_t iprtetable_id = 1;
\r
409 struct mib_node* iprtetable_node = (struct mib_node* const)&iprteentry;
\r
410 struct mib_ram_array_node iprtetable = {
\r
411 &noleafs_get_object_def,
\r
412 &noleafs_get_value,
\r
414 &noleafs_set_value,
\r
421 /** index root node for ipAddrTable */
\r
422 struct mib_list_rootnode ipaddrtree_root = {
\r
423 &noleafs_get_object_def,
\r
424 &noleafs_get_value,
\r
426 &noleafs_set_value,
\r
433 const s32_t ipaddrentry_ids[5] = { 1, 2, 3, 4, 5 };
\r
434 struct mib_node* const ipaddrentry_nodes[5] = {
\r
435 (struct mib_node* const)&ipaddrtree_root,
\r
436 (struct mib_node* const)&ipaddrtree_root,
\r
437 (struct mib_node* const)&ipaddrtree_root,
\r
438 (struct mib_node* const)&ipaddrtree_root,
\r
439 (struct mib_node* const)&ipaddrtree_root
\r
441 const struct mib_array_node ipaddrentry = {
\r
442 &noleafs_get_object_def,
\r
443 &noleafs_get_value,
\r
445 &noleafs_set_value,
\r
452 s32_t ipaddrtable_id = 1;
\r
453 struct mib_node* ipaddrtable_node = (struct mib_node* const)&ipaddrentry;
\r
454 struct mib_ram_array_node ipaddrtable = {
\r
455 &noleafs_get_object_def,
\r
456 &noleafs_get_value,
\r
458 &noleafs_set_value,
\r
465 /* ip .1.3.6.1.2.1.4 */
\r
466 const mib_scalar_node ip_scalar = {
\r
467 &ip_get_object_def,
\r
470 &noleafs_set_value,
\r
474 const s32_t ip_ids[23] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 };
\r
475 struct mib_node* const ip_nodes[23] = {
\r
476 (struct mib_node* const)&ip_scalar, (struct mib_node* const)&ip_scalar,
\r
477 (struct mib_node* const)&ip_scalar, (struct mib_node* const)&ip_scalar,
\r
478 (struct mib_node* const)&ip_scalar, (struct mib_node* const)&ip_scalar,
\r
479 (struct mib_node* const)&ip_scalar, (struct mib_node* const)&ip_scalar,
\r
480 (struct mib_node* const)&ip_scalar, (struct mib_node* const)&ip_scalar,
\r
481 (struct mib_node* const)&ip_scalar, (struct mib_node* const)&ip_scalar,
\r
482 (struct mib_node* const)&ip_scalar, (struct mib_node* const)&ip_scalar,
\r
483 (struct mib_node* const)&ip_scalar, (struct mib_node* const)&ip_scalar,
\r
484 (struct mib_node* const)&ip_scalar, (struct mib_node* const)&ip_scalar,
\r
485 (struct mib_node* const)&ip_scalar, (struct mib_node* const)&ipaddrtable,
\r
486 (struct mib_node* const)&iprtetable, (struct mib_node* const)&ipntomtable,
\r
487 (struct mib_node* const)&ip_scalar
\r
489 const struct mib_array_node ip = {
\r
490 &noleafs_get_object_def,
\r
491 &noleafs_get_value,
\r
493 &noleafs_set_value,
\r
500 /** index root node for atTable */
\r
501 struct mib_list_rootnode arptree_root = {
\r
502 &noleafs_get_object_def,
\r
503 &noleafs_get_value,
\r
505 &noleafs_set_value,
\r
512 const s32_t atentry_ids[3] = { 1, 2, 3 };
\r
513 struct mib_node* const atentry_nodes[3] = {
\r
514 (struct mib_node* const)&arptree_root,
\r
515 (struct mib_node* const)&arptree_root,
\r
516 (struct mib_node* const)&arptree_root
\r
518 const struct mib_array_node atentry = {
\r
519 &noleafs_get_object_def,
\r
520 &noleafs_get_value,
\r
522 &noleafs_set_value,
\r
529 const s32_t attable_id = 1;
\r
530 struct mib_node* const attable_node = (struct mib_node* const)&atentry;
\r
531 const struct mib_array_node attable = {
\r
532 &noleafs_get_object_def,
\r
533 &noleafs_get_value,
\r
535 &noleafs_set_value,
\r
542 /* at .1.3.6.1.2.1.3 */
\r
544 struct mib_node* at_node = (struct mib_node* const)&attable;
\r
545 struct mib_ram_array_node at = {
\r
546 &noleafs_get_object_def,
\r
547 &noleafs_get_value,
\r
549 &noleafs_set_value,
\r
556 /** index root node for ifTable */
\r
557 struct mib_list_rootnode iflist_root = {
\r
558 &ifentry_get_object_def,
\r
559 &ifentry_get_value,
\r
561 &noleafs_set_value,
\r
568 const s32_t ifentry_ids[22] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 };
\r
569 struct mib_node* const ifentry_nodes[22] = {
\r
570 (struct mib_node* const)&iflist_root, (struct mib_node* const)&iflist_root,
\r
571 (struct mib_node* const)&iflist_root, (struct mib_node* const)&iflist_root,
\r
572 (struct mib_node* const)&iflist_root, (struct mib_node* const)&iflist_root,
\r
573 (struct mib_node* const)&iflist_root, (struct mib_node* const)&iflist_root,
\r
574 (struct mib_node* const)&iflist_root, (struct mib_node* const)&iflist_root,
\r
575 (struct mib_node* const)&iflist_root, (struct mib_node* const)&iflist_root,
\r
576 (struct mib_node* const)&iflist_root, (struct mib_node* const)&iflist_root,
\r
577 (struct mib_node* const)&iflist_root, (struct mib_node* const)&iflist_root,
\r
578 (struct mib_node* const)&iflist_root, (struct mib_node* const)&iflist_root,
\r
579 (struct mib_node* const)&iflist_root, (struct mib_node* const)&iflist_root,
\r
580 (struct mib_node* const)&iflist_root, (struct mib_node* const)&iflist_root
\r
582 const struct mib_array_node ifentry = {
\r
583 &noleafs_get_object_def,
\r
584 &noleafs_get_value,
\r
586 &noleafs_set_value,
\r
593 s32_t iftable_id = 1;
\r
594 struct mib_node* iftable_node = (struct mib_node* const)&ifentry;
\r
595 struct mib_ram_array_node iftable = {
\r
596 &noleafs_get_object_def,
\r
597 &noleafs_get_value,
\r
599 &noleafs_set_value,
\r
606 /* interfaces .1.3.6.1.2.1.2 */
\r
607 const mib_scalar_node interfaces_scalar = {
\r
608 &interfaces_get_object_def,
\r
609 &interfaces_get_value,
\r
611 &noleafs_set_value,
\r
615 const s32_t interfaces_ids[2] = { 1, 2 };
\r
616 struct mib_node* const interfaces_nodes[2] = {
\r
617 (struct mib_node* const)&interfaces_scalar, (struct mib_node* const)&iftable
\r
619 const struct mib_array_node interfaces = {
\r
620 &noleafs_get_object_def,
\r
621 &noleafs_get_value,
\r
623 &noleafs_set_value,
\r
631 /* 0 1 2 3 4 5 6 */
\r
632 /* system .1.3.6.1.2.1.1 */
\r
633 const mib_scalar_node sys_tem_scalar = {
\r
634 &system_get_object_def,
\r
641 const s32_t sys_tem_ids[7] = { 1, 2, 3, 4, 5, 6, 7 };
\r
642 struct mib_node* const sys_tem_nodes[7] = {
\r
643 (struct mib_node* const)&sys_tem_scalar, (struct mib_node* const)&sys_tem_scalar,
\r
644 (struct mib_node* const)&sys_tem_scalar, (struct mib_node* const)&sys_tem_scalar,
\r
645 (struct mib_node* const)&sys_tem_scalar, (struct mib_node* const)&sys_tem_scalar,
\r
646 (struct mib_node* const)&sys_tem_scalar
\r
648 /* work around name issue with 'sys_tem', some compiler(s?) seem to reserve 'system' */
\r
649 const struct mib_array_node sys_tem = {
\r
650 &noleafs_get_object_def,
\r
651 &noleafs_get_value,
\r
653 &noleafs_set_value,
\r
660 /* mib-2 .1.3.6.1.2.1 */
\r
662 #define MIB2_GROUPS 8
\r
664 #define MIB2_GROUPS 7
\r
666 const s32_t mib2_ids[MIB2_GROUPS] =
\r
679 struct mib_node* const mib2_nodes[MIB2_GROUPS] = {
\r
680 (struct mib_node* const)&sys_tem,
\r
681 (struct mib_node* const)&interfaces,
\r
682 (struct mib_node* const)&at,
\r
683 (struct mib_node* const)&ip,
\r
684 (struct mib_node* const)&icmp,
\r
686 (struct mib_node* const)&tcp,
\r
688 (struct mib_node* const)&udp,
\r
689 (struct mib_node* const)&snmp
\r
692 const struct mib_array_node mib2 = {
\r
693 &noleafs_get_object_def,
\r
694 &noleafs_get_value,
\r
696 &noleafs_set_value,
\r
703 /* mgmt .1.3.6.1.2 */
\r
704 const s32_t mgmt_ids[1] = { 1 };
\r
705 struct mib_node* const mgmt_nodes[1] = { (struct mib_node* const)&mib2 };
\r
706 const struct mib_array_node mgmt = {
\r
707 &noleafs_get_object_def,
\r
708 &noleafs_get_value,
\r
710 &noleafs_set_value,
\r
717 /* internet .1.3.6.1 */
\r
718 #if SNMP_PRIVATE_MIB
\r
719 s32_t internet_ids[2] = { 2, 4 };
\r
720 struct mib_node* const internet_nodes[2] = { (struct mib_node* const)&mgmt, (struct mib_node* const)&private };
\r
721 const struct mib_array_node internet = {
\r
722 &noleafs_get_object_def,
\r
723 &noleafs_get_value,
\r
725 &noleafs_set_value,
\r
732 const s32_t internet_ids[1] = { 2 };
\r
733 struct mib_node* const internet_nodes[1] = { (struct mib_node* const)&mgmt };
\r
734 const struct mib_array_node internet = {
\r
735 &noleafs_get_object_def,
\r
736 &noleafs_get_value,
\r
738 &noleafs_set_value,
\r
746 /** mib-2.system.sysObjectID */
\r
747 static struct snmp_obj_id sysobjid = {SNMP_SYSOBJID_LEN, SNMP_SYSOBJID};
\r
748 /** enterprise ID for generic TRAPs, .iso.org.dod.internet.mgmt.mib-2.snmp */
\r
749 static struct snmp_obj_id snmpgrp_id = {7,{1,3,6,1,2,1,11}};
\r
750 /** mib-2.system.sysServices */
\r
751 static const s32_t sysservices = SNMP_SYSSERVICES;
\r
753 /** mib-2.system.sysDescr */
\r
754 static const u8_t sysdescr_len_default = 4;
\r
755 static const u8_t sysdescr_default[] = "lwIP";
\r
756 static u8_t* sysdescr_len_ptr = (u8_t*)&sysdescr_len_default;
\r
757 static u8_t* sysdescr_ptr = (u8_t*)&sysdescr_default[0];
\r
758 /** mib-2.system.sysContact */
\r
759 static const u8_t syscontact_len_default = 0;
\r
760 static const u8_t syscontact_default[] = "";
\r
761 static u8_t* syscontact_len_ptr = (u8_t*)&syscontact_len_default;
\r
762 static u8_t* syscontact_ptr = (u8_t*)&syscontact_default[0];
\r
763 /** mib-2.system.sysName */
\r
764 static const u8_t sysname_len_default = 8;
\r
765 static const u8_t sysname_default[] = "FQDN-unk";
\r
766 static u8_t* sysname_len_ptr = (u8_t*)&sysname_len_default;
\r
767 static u8_t* sysname_ptr = (u8_t*)&sysname_default[0];
\r
768 /** mib-2.system.sysLocation */
\r
769 static const u8_t syslocation_len_default = 0;
\r
770 static const u8_t syslocation_default[] = "";
\r
771 static u8_t* syslocation_len_ptr = (u8_t*)&syslocation_len_default;
\r
772 static u8_t* syslocation_ptr = (u8_t*)&syslocation_default[0];
\r
773 /** mib-2.snmp.snmpEnableAuthenTraps */
\r
774 static const u8_t snmpenableauthentraps_default = 2; /* disabled */
\r
775 static u8_t* snmpenableauthentraps_ptr = (u8_t*)&snmpenableauthentraps_default;
\r
777 /** mib-2.interfaces.ifTable.ifEntry.ifSpecific (zeroDotZero) */
\r
778 static const struct snmp_obj_id ifspecific = {2, {0, 0}};
\r
779 /** mib-2.ip.ipRouteTable.ipRouteEntry.ipRouteInfo (zeroDotZero) */
\r
780 static const struct snmp_obj_id iprouteinfo = {2, {0, 0}};
\r
784 /* mib-2.system counter(s) */
\r
785 static u32_t sysuptime = 0;
\r
787 /* mib-2.ip counter(s) */
\r
788 static u32_t ipinreceives = 0,
\r
790 ipinaddrerrors = 0,
\r
791 ipforwdatagrams = 0,
\r
792 ipinunknownprotos = 0,
\r
804 iproutingdiscards = 0;
\r
805 /* mib-2.icmp counter(s) */
\r
806 static u32_t icmpinmsgs = 0,
\r
808 icmpindestunreachs = 0,
\r
809 icmpintimeexcds = 0,
\r
810 icmpinparmprobs = 0,
\r
811 icmpinsrcquenchs = 0,
\r
812 icmpinredirects = 0,
\r
814 icmpinechoreps = 0,
\r
815 icmpintimestamps = 0,
\r
816 icmpintimestampreps = 0,
\r
817 icmpinaddrmasks = 0,
\r
818 icmpinaddrmaskreps = 0,
\r
821 icmpoutdestunreachs = 0,
\r
822 icmpouttimeexcds = 0,
\r
823 icmpoutparmprobs = 0,
\r
824 icmpoutsrcquenchs = 0,
\r
825 icmpoutredirects = 0,
\r
827 icmpoutechoreps = 0,
\r
828 icmpouttimestamps = 0,
\r
829 icmpouttimestampreps = 0,
\r
830 icmpoutaddrmasks = 0,
\r
831 icmpoutaddrmaskreps = 0;
\r
832 /* mib-2.tcp counter(s) */
\r
833 static u32_t tcpactiveopens = 0,
\r
834 tcppassiveopens = 0,
\r
835 tcpattemptfails = 0,
\r
836 tcpestabresets = 0,
\r
839 tcpretranssegs = 0,
\r
842 /* mib-2.udp counter(s) */
\r
843 static u32_t udpindatagrams = 0,
\r
846 udpoutdatagrams = 0;
\r
847 /* mib-2.snmp counter(s) */
\r
848 static u32_t snmpinpkts = 0,
\r
850 snmpinbadversions = 0,
\r
851 snmpinbadcommunitynames = 0,
\r
852 snmpinbadcommunityuses = 0,
\r
853 snmpinasnparseerrs = 0,
\r
855 snmpinnosuchnames = 0,
\r
856 snmpinbadvalues = 0,
\r
857 snmpinreadonlys = 0,
\r
859 snmpintotalreqvars = 0,
\r
860 snmpintotalsetvars = 0,
\r
861 snmpingetrequests = 0,
\r
862 snmpingetnexts = 0,
\r
863 snmpinsetrequests = 0,
\r
864 snmpingetresponses = 0,
\r
866 snmpouttoobigs = 0,
\r
867 snmpoutnosuchnames = 0,
\r
868 snmpoutbadvalues = 0,
\r
869 snmpoutgenerrs = 0,
\r
870 snmpoutgetrequests = 0,
\r
871 snmpoutgetnexts = 0,
\r
872 snmpoutsetrequests = 0,
\r
873 snmpoutgetresponses = 0,
\r
878 /* prototypes of the following functions are in lwip/src/include/lwip/snmp.h */
\r
880 * Copy octet string.
\r
882 * @param dst points to destination
\r
883 * @param src points to source
\r
884 * @param n number of octets to copy.
\r
886 void ocstrncpy(u8_t *dst, u8_t *src, u8_t n)
\r
896 * Copy object identifier (s32_t) array.
\r
898 * @param dst points to destination
\r
899 * @param src points to source
\r
900 * @param n number of sub identifiers to copy.
\r
902 void objectidncpy(s32_t *dst, s32_t *src, u8_t n)
\r
912 * Initializes sysDescr pointers.
\r
914 * @param str if non-NULL then copy str pointer
\r
915 * @param strlen points to string length, excluding zero terminator
\r
917 void snmp_set_sysdesr(u8_t *str, u8_t *strlen)
\r
921 sysdescr_ptr = str;
\r
922 sysdescr_len_ptr = strlen;
\r
926 void snmp_get_sysobjid_ptr(struct snmp_obj_id **oid)
\r
932 * Initializes sysObjectID value.
\r
934 * @param oid points to stuct snmp_obj_id to copy
\r
936 void snmp_set_sysobjid(struct snmp_obj_id *oid)
\r
942 * Must be called at regular 10 msec interval from a timer interrupt
\r
943 * or signal handler depending on your runtime environment.
\r
945 void snmp_inc_sysuptime(void)
\r
950 void snmp_get_sysuptime(u32_t *value)
\r
952 *value = sysuptime;
\r
956 * Initializes sysContact pointers,
\r
957 * e.g. ptrs to non-volatile memory external to lwIP.
\r
959 * @param str if non-NULL then copy str pointer
\r
960 * @param strlen points to string length, excluding zero terminator
\r
962 void snmp_set_syscontact(u8_t *ocstr, u8_t *ocstrlen)
\r
966 syscontact_ptr = ocstr;
\r
967 syscontact_len_ptr = ocstrlen;
\r
972 * Initializes sysName pointers,
\r
973 * e.g. ptrs to non-volatile memory external to lwIP.
\r
975 * @param str if non-NULL then copy str pointer
\r
976 * @param strlen points to string length, excluding zero terminator
\r
978 void snmp_set_sysname(u8_t *ocstr, u8_t *ocstrlen)
\r
982 sysname_ptr = ocstr;
\r
983 sysname_len_ptr = ocstrlen;
\r
988 * Initializes sysLocation pointers,
\r
989 * e.g. ptrs to non-volatile memory external to lwIP.
\r
991 * @param str if non-NULL then copy str pointer
\r
992 * @param strlen points to string length, excluding zero terminator
\r
994 void snmp_set_syslocation(u8_t *ocstr, u8_t *ocstrlen)
\r
998 syslocation_ptr = ocstr;
\r
999 syslocation_len_ptr = ocstrlen;
\r
1004 void snmp_add_ifinoctets(struct netif *ni, u32_t value)
\r
1006 ni->ifinoctets += value;
\r
1009 void snmp_inc_ifinucastpkts(struct netif *ni)
\r
1011 (ni->ifinucastpkts)++;
\r
1014 void snmp_inc_ifinnucastpkts(struct netif *ni)
\r
1016 (ni->ifinnucastpkts)++;
\r
1019 void snmp_inc_ifindiscards(struct netif *ni)
\r
1021 (ni->ifindiscards)++;
\r
1024 void snmp_add_ifoutoctets(struct netif *ni, u32_t value)
\r
1026 ni->ifoutoctets += value;
\r
1029 void snmp_inc_ifoutucastpkts(struct netif *ni)
\r
1031 (ni->ifoutucastpkts)++;
\r
1034 void snmp_inc_ifoutnucastpkts(struct netif *ni)
\r
1036 (ni->ifoutnucastpkts)++;
\r
1039 void snmp_inc_ifoutdiscards(struct netif *ni)
\r
1041 (ni->ifoutdiscards)++;
\r
1044 void snmp_inc_iflist(void)
\r
1046 struct mib_list_node *if_node = NULL;
\r
1048 snmp_mib_node_insert(&iflist_root, iflist_root.count + 1, &if_node);
\r
1049 /* enable getnext traversal on filled table */
\r
1050 iftable.maxlength = 1;
\r
1053 void snmp_dec_iflist(void)
\r
1055 snmp_mib_node_delete(&iflist_root, iflist_root.tail);
\r
1056 /* disable getnext traversal on empty table */
\r
1057 if(iflist_root.count == 0) iftable.maxlength = 0;
\r
1061 * Inserts ARP table indexes (.xIfIndex.xNetAddress)
\r
1062 * into arp table index trees (both atTable and ipNetToMediaTable).
\r
1064 void snmp_insert_arpidx_tree(struct netif *ni, struct ip_addr *ip)
\r
1066 struct mib_list_rootnode *at_rn;
\r
1067 struct mib_list_node *at_node;
\r
1068 struct ip_addr hip;
\r
1072 LWIP_ASSERT("ni != NULL", ni != NULL);
\r
1073 snmp_netiftoifindex(ni, &arpidx[0]);
\r
1074 hip.addr = ntohl(ip->addr);
\r
1075 snmp_iptooid(&hip, &arpidx[1]);
\r
1077 for (tree = 0; tree < 2; tree++)
\r
1081 at_rn = &arptree_root;
\r
1085 at_rn = &ipntomtree_root;
\r
1087 for (level = 0; level < 5; level++)
\r
1090 snmp_mib_node_insert(at_rn, arpidx[level], &at_node);
\r
1091 if ((level != 4) && (at_node != NULL))
\r
1093 if (at_node->nptr == NULL)
\r
1095 at_rn = snmp_mib_lrn_alloc();
\r
1096 at_node->nptr = (struct mib_node*)at_rn;
\r
1097 if (at_rn != NULL)
\r
1103 at_rn->get_object_def = atentry_get_object_def;
\r
1104 at_rn->get_value = atentry_get_value;
\r
1108 at_rn->get_object_def = ip_ntomentry_get_object_def;
\r
1109 at_rn->get_value = ip_ntomentry_get_value;
\r
1111 at_rn->set_test = noleafs_set_test;
\r
1112 at_rn->set_value = noleafs_set_value;
\r
1117 /* at_rn == NULL, malloc failure */
\r
1118 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_arpidx_tree() insert failed, mem full"));
\r
1124 at_rn = (struct mib_list_rootnode*)at_node->nptr;
\r
1129 /* enable getnext traversal on filled tables */
\r
1131 ipntomtable.maxlength = 1;
\r
1135 * Removes ARP table indexes (.xIfIndex.xNetAddress)
\r
1136 * from arp table index trees.
\r
1138 void snmp_delete_arpidx_tree(struct netif *ni, struct ip_addr *ip)
\r
1140 struct mib_list_rootnode *at_rn, *next, *del_rn[5];
\r
1141 struct mib_list_node *at_n, *del_n[5];
\r
1142 struct ip_addr hip;
\r
1144 u8_t fc, tree, level, del_cnt;
\r
1146 snmp_netiftoifindex(ni, &arpidx[0]);
\r
1147 hip.addr = ntohl(ip->addr);
\r
1148 snmp_iptooid(&hip, &arpidx[1]);
\r
1150 for (tree = 0; tree < 2; tree++)
\r
1152 /* mark nodes for deletion */
\r
1155 at_rn = &arptree_root;
\r
1159 at_rn = &ipntomtree_root;
\r
1163 while ((level < 5) && (at_rn != NULL))
\r
1165 fc = snmp_mib_node_find(at_rn, arpidx[level], &at_n);
\r
1168 /* arpidx[level] does not exist */
\r
1174 del_rn[del_cnt] = at_rn;
\r
1175 del_n[del_cnt] = at_n;
\r
1177 at_rn = (struct mib_list_rootnode*)(at_n->nptr);
\r
1181 /* reset delete (2 or more childs) */
\r
1183 at_rn = (struct mib_list_rootnode*)(at_n->nptr);
\r
1187 /* delete marked index nodes */
\r
1188 while (del_cnt > 0)
\r
1192 at_rn = del_rn[del_cnt];
\r
1193 at_n = del_n[del_cnt];
\r
1195 next = snmp_mib_node_delete(at_rn, at_n);
\r
1198 LWIP_ASSERT("next_count == 0",next->count == 0);
\r
1199 snmp_mib_lrn_free(next);
\r
1203 /* disable getnext traversal on empty tables */
\r
1204 if(arptree_root.count == 0) at.maxlength = 0;
\r
1205 if(ipntomtree_root.count == 0) ipntomtable.maxlength = 0;
\r
1208 void snmp_inc_ipinreceives(void)
\r
1213 void snmp_inc_ipinhdrerrors(void)
\r
1218 void snmp_inc_ipinaddrerrors(void)
\r
1223 void snmp_inc_ipforwdatagrams(void)
\r
1225 ipforwdatagrams++;
\r
1228 void snmp_inc_ipinunknownprotos(void)
\r
1230 ipinunknownprotos++;
\r
1233 void snmp_inc_ipindiscards(void)
\r
1238 void snmp_inc_ipindelivers(void)
\r
1243 void snmp_inc_ipoutrequests(void)
\r
1248 void snmp_inc_ipoutdiscards(void)
\r
1253 void snmp_inc_ipoutnoroutes(void)
\r
1258 void snmp_inc_ipreasmreqds(void)
\r
1263 void snmp_inc_ipreasmoks(void)
\r
1268 void snmp_inc_ipreasmfails(void)
\r
1273 void snmp_inc_ipfragoks(void)
\r
1278 void snmp_inc_ipfragfails(void)
\r
1283 void snmp_inc_ipfragcreates(void)
\r
1288 void snmp_inc_iproutingdiscards(void)
\r
1290 iproutingdiscards++;
\r
1294 * Inserts ipAddrTable indexes (.ipAdEntAddr)
\r
1295 * into index tree.
\r
1297 void snmp_insert_ipaddridx_tree(struct netif *ni)
\r
1299 struct mib_list_rootnode *ipa_rn;
\r
1300 struct mib_list_node *ipa_node;
\r
1301 struct ip_addr ip;
\r
1302 s32_t ipaddridx[4];
\r
1305 LWIP_ASSERT("ni != NULL", ni != NULL);
\r
1306 ip.addr = ntohl(ni->ip_addr.addr);
\r
1307 snmp_iptooid(&ip, &ipaddridx[0]);
\r
1310 ipa_rn = &ipaddrtree_root;
\r
1314 snmp_mib_node_insert(ipa_rn, ipaddridx[level], &ipa_node);
\r
1315 if ((level != 3) && (ipa_node != NULL))
\r
1317 if (ipa_node->nptr == NULL)
\r
1319 ipa_rn = snmp_mib_lrn_alloc();
\r
1320 ipa_node->nptr = (struct mib_node*)ipa_rn;
\r
1321 if (ipa_rn != NULL)
\r
1325 ipa_rn->get_object_def = ip_addrentry_get_object_def;
\r
1326 ipa_rn->get_value = ip_addrentry_get_value;
\r
1327 ipa_rn->set_test = noleafs_set_test;
\r
1328 ipa_rn->set_value = noleafs_set_value;
\r
1333 /* ipa_rn == NULL, malloc failure */
\r
1334 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_ipaddridx_tree() insert failed, mem full"));
\r
1340 ipa_rn = (struct mib_list_rootnode*)ipa_node->nptr;
\r
1345 /* enable getnext traversal on filled table */
\r
1346 ipaddrtable.maxlength = 1;
\r
1350 * Removes ipAddrTable indexes (.ipAdEntAddr)
\r
1351 * from index tree.
\r
1353 void snmp_delete_ipaddridx_tree(struct netif *ni)
\r
1355 struct mib_list_rootnode *ipa_rn, *next, *del_rn[4];
\r
1356 struct mib_list_node *ipa_n, *del_n[4];
\r
1357 struct ip_addr ip;
\r
1358 s32_t ipaddridx[4];
\r
1359 u8_t fc, level, del_cnt;
\r
1361 LWIP_ASSERT("ni != NULL", ni != NULL);
\r
1362 ip.addr = ntohl(ni->ip_addr.addr);
\r
1363 snmp_iptooid(&ip, &ipaddridx[0]);
\r
1365 /* mark nodes for deletion */
\r
1368 ipa_rn = &ipaddrtree_root;
\r
1369 while ((level < 4) && (ipa_rn != NULL))
\r
1371 fc = snmp_mib_node_find(ipa_rn, ipaddridx[level], &ipa_n);
\r
1374 /* ipaddridx[level] does not exist */
\r
1380 del_rn[del_cnt] = ipa_rn;
\r
1381 del_n[del_cnt] = ipa_n;
\r
1383 ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);
\r
1387 /* reset delete (2 or more childs) */
\r
1389 ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);
\r
1393 /* delete marked index nodes */
\r
1394 while (del_cnt > 0)
\r
1398 ipa_rn = del_rn[del_cnt];
\r
1399 ipa_n = del_n[del_cnt];
\r
1401 next = snmp_mib_node_delete(ipa_rn, ipa_n);
\r
1404 LWIP_ASSERT("next_count == 0",next->count == 0);
\r
1405 snmp_mib_lrn_free(next);
\r
1408 /* disable getnext traversal on empty table */
\r
1409 if (ipaddrtree_root.count == 0) ipaddrtable.maxlength = 0;
\r
1413 * Inserts ipRouteTable indexes (.ipRouteDest)
\r
1414 * into index tree.
\r
1416 * @param dflt non-zero for the default rte, zero for network rte
\r
1417 * @param netif points to network interface for this rte
\r
1419 * @todo record sysuptime for _this_ route when it is installed
\r
1420 * (needed for ipRouteAge) in the netif.
\r
1422 void snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni)
\r
1425 struct ip_addr dst;
\r
1429 /* the default route 0.0.0.0 */
\r
1435 /* route to the network address */
\r
1436 dst.addr = ntohl(ni->ip_addr.addr & ni->netmask.addr);
\r
1437 /* exclude 0.0.0.0 network (reserved for default rte) */
\r
1438 if (dst.addr != 0) insert = 1;
\r
1442 struct mib_list_rootnode *iprte_rn;
\r
1443 struct mib_list_node *iprte_node;
\r
1444 s32_t iprteidx[4];
\r
1447 snmp_iptooid(&dst, &iprteidx[0]);
\r
1449 iprte_rn = &iprtetree_root;
\r
1452 iprte_node = NULL;
\r
1453 snmp_mib_node_insert(iprte_rn, iprteidx[level], &iprte_node);
\r
1454 if ((level != 3) && (iprte_node != NULL))
\r
1456 if (iprte_node->nptr == NULL)
\r
1458 iprte_rn = snmp_mib_lrn_alloc();
\r
1459 iprte_node->nptr = (struct mib_node*)iprte_rn;
\r
1460 if (iprte_rn != NULL)
\r
1464 iprte_rn->get_object_def = ip_rteentry_get_object_def;
\r
1465 iprte_rn->get_value = ip_rteentry_get_value;
\r
1466 iprte_rn->set_test = noleafs_set_test;
\r
1467 iprte_rn->set_value = noleafs_set_value;
\r
1472 /* iprte_rn == NULL, malloc failure */
\r
1473 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_iprteidx_tree() insert failed, mem full"));
\r
1479 iprte_rn = (struct mib_list_rootnode*)iprte_node->nptr;
\r
1485 /* enable getnext traversal on filled table */
\r
1486 iprtetable.maxlength = 1;
\r
1490 * Removes ipRouteTable indexes (.ipRouteDest)
\r
1491 * from index tree.
\r
1493 * @param dflt non-zero for the default rte, zero for network rte
\r
1494 * @param netif points to network interface for this rte or NULL
\r
1495 * for default route to be removed.
\r
1497 void snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni)
\r
1500 struct ip_addr dst;
\r
1504 /* the default route 0.0.0.0 */
\r
1510 /* route to the network address */
\r
1511 dst.addr = ntohl(ni->ip_addr.addr & ni->netmask.addr);
\r
1512 /* exclude 0.0.0.0 network (reserved for default rte) */
\r
1513 if (dst.addr != 0) delete = 1;
\r
1517 struct mib_list_rootnode *iprte_rn, *next, *del_rn[4];
\r
1518 struct mib_list_node *iprte_n, *del_n[4];
\r
1519 s32_t iprteidx[4];
\r
1520 u8_t fc, level, del_cnt;
\r
1522 snmp_iptooid(&dst, &iprteidx[0]);
\r
1523 /* mark nodes for deletion */
\r
1526 iprte_rn = &iprtetree_root;
\r
1527 while ((level < 4) && (iprte_rn != NULL))
\r
1529 fc = snmp_mib_node_find(iprte_rn, iprteidx[level], &iprte_n);
\r
1532 /* iprteidx[level] does not exist */
\r
1538 del_rn[del_cnt] = iprte_rn;
\r
1539 del_n[del_cnt] = iprte_n;
\r
1541 iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr);
\r
1545 /* reset delete (2 or more childs) */
\r
1547 iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr);
\r
1551 /* delete marked index nodes */
\r
1552 while (del_cnt > 0)
\r
1556 iprte_rn = del_rn[del_cnt];
\r
1557 iprte_n = del_n[del_cnt];
\r
1559 next = snmp_mib_node_delete(iprte_rn, iprte_n);
\r
1562 LWIP_ASSERT("next_count == 0",next->count == 0);
\r
1563 snmp_mib_lrn_free(next);
\r
1567 /* disable getnext traversal on empty table */
\r
1568 if (iprtetree_root.count == 0) iprtetable.maxlength = 0;
\r
1572 void snmp_inc_icmpinmsgs(void)
\r
1577 void snmp_inc_icmpinerrors(void)
\r
1582 void snmp_inc_icmpindestunreachs(void)
\r
1584 icmpindestunreachs++;
\r
1587 void snmp_inc_icmpintimeexcds(void)
\r
1589 icmpintimeexcds++;
\r
1592 void snmp_inc_icmpinparmprobs(void)
\r
1594 icmpinparmprobs++;
\r
1597 void snmp_inc_icmpinsrcquenchs(void)
\r
1599 icmpinsrcquenchs++;
\r
1602 void snmp_inc_icmpinredirects(void)
\r
1604 icmpinredirects++;
\r
1607 void snmp_inc_icmpinechos(void)
\r
1612 void snmp_inc_icmpinechoreps(void)
\r
1617 void snmp_inc_icmpintimestamps(void)
\r
1619 icmpintimestamps++;
\r
1622 void snmp_inc_icmpintimestampreps(void)
\r
1624 icmpintimestampreps++;
\r
1627 void snmp_inc_icmpinaddrmasks(void)
\r
1629 icmpinaddrmasks++;
\r
1632 void snmp_inc_icmpinaddrmaskreps(void)
\r
1634 icmpinaddrmaskreps++;
\r
1637 void snmp_inc_icmpoutmsgs(void)
\r
1642 void snmp_inc_icmpouterrors(void)
\r
1647 void snmp_inc_icmpoutdestunreachs(void)
\r
1649 icmpoutdestunreachs++;
\r
1652 void snmp_inc_icmpouttimeexcds(void)
\r
1654 icmpouttimeexcds++;
\r
1657 void snmp_inc_icmpoutparmprobs(void)
\r
1659 icmpoutparmprobs++;
\r
1662 void snmp_inc_icmpoutsrcquenchs(void)
\r
1664 icmpoutsrcquenchs++;
\r
1667 void snmp_inc_icmpoutredirects(void)
\r
1669 icmpoutredirects++;
\r
1672 void snmp_inc_icmpoutechos(void)
\r
1677 void snmp_inc_icmpoutechoreps(void)
\r
1679 icmpoutechoreps++;
\r
1682 void snmp_inc_icmpouttimestamps(void)
\r
1684 icmpouttimestamps++;
\r
1687 void snmp_inc_icmpouttimestampreps(void)
\r
1689 icmpouttimestampreps++;
\r
1692 void snmp_inc_icmpoutaddrmasks(void)
\r
1694 icmpoutaddrmasks++;
\r
1697 void snmp_inc_icmpoutaddrmaskreps(void)
\r
1699 icmpoutaddrmaskreps++;
\r
1702 void snmp_inc_tcpactiveopens(void)
\r
1707 void snmp_inc_tcppassiveopens(void)
\r
1709 tcppassiveopens++;
\r
1712 void snmp_inc_tcpattemptfails(void)
\r
1714 tcpattemptfails++;
\r
1717 void snmp_inc_tcpestabresets(void)
\r
1722 void snmp_inc_tcpinsegs(void)
\r
1727 void snmp_inc_tcpoutsegs(void)
\r
1732 void snmp_inc_tcpretranssegs(void)
\r
1737 void snmp_inc_tcpinerrs(void)
\r
1742 void snmp_inc_tcpoutrsts(void)
\r
1747 void snmp_inc_udpindatagrams(void)
\r
1752 void snmp_inc_udpnoports(void)
\r
1757 void snmp_inc_udpinerrors(void)
\r
1762 void snmp_inc_udpoutdatagrams(void)
\r
1764 udpoutdatagrams++;
\r
1768 * Inserts udpTable indexes (.udpLocalAddress.udpLocalPort)
\r
1769 * into index tree.
\r
1771 void snmp_insert_udpidx_tree(struct udp_pcb *pcb)
\r
1773 struct mib_list_rootnode *udp_rn;
\r
1774 struct mib_list_node *udp_node;
\r
1775 struct ip_addr ip;
\r
1779 LWIP_ASSERT("pcb != NULL", pcb != NULL);
\r
1780 ip.addr = ntohl(pcb->local_ip.addr);
\r
1781 snmp_iptooid(&ip, &udpidx[0]);
\r
1782 udpidx[4] = pcb->local_port;
\r
1784 udp_rn = &udp_root;
\r
1785 for (level = 0; level < 5; level++)
\r
1788 snmp_mib_node_insert(udp_rn, udpidx[level], &udp_node);
\r
1789 if ((level != 4) && (udp_node != NULL))
\r
1791 if (udp_node->nptr == NULL)
\r
1793 udp_rn = snmp_mib_lrn_alloc();
\r
1794 udp_node->nptr = (struct mib_node*)udp_rn;
\r
1795 if (udp_rn != NULL)
\r
1799 udp_rn->get_object_def = udpentry_get_object_def;
\r
1800 udp_rn->get_value = udpentry_get_value;
\r
1801 udp_rn->set_test = noleafs_set_test;
\r
1802 udp_rn->set_value = noleafs_set_value;
\r
1807 /* udp_rn == NULL, malloc failure */
\r
1808 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_udpidx_tree() insert failed, mem full"));
\r
1814 udp_rn = (struct mib_list_rootnode*)udp_node->nptr;
\r
1818 udptable.maxlength = 1;
\r
1822 * Removes udpTable indexes (.udpLocalAddress.udpLocalPort)
\r
1823 * from index tree.
\r
1825 void snmp_delete_udpidx_tree(struct udp_pcb *pcb)
\r
1827 struct mib_list_rootnode *udp_rn, *next, *del_rn[5];
\r
1828 struct mib_list_node *udp_n, *del_n[5];
\r
1829 struct ip_addr ip;
\r
1831 u8_t bindings, fc, level, del_cnt;
\r
1833 LWIP_ASSERT("pcb != NULL", pcb != NULL);
\r
1834 ip.addr = ntohl(pcb->local_ip.addr);
\r
1835 snmp_iptooid(&ip, &udpidx[0]);
\r
1836 udpidx[4] = pcb->local_port;
\r
1838 /* count PCBs for a given binding
\r
1839 (e.g. when reusing ports or for temp output PCBs) */
\r
1842 while ((pcb != NULL))
\r
1844 if ((pcb->local_ip.addr == ip.addr) &&
\r
1845 (pcb->local_port == udpidx[4]))
\r
1851 if (bindings == 1)
\r
1853 /* selectively remove */
\r
1854 /* mark nodes for deletion */
\r
1857 udp_rn = &udp_root;
\r
1858 while ((level < 5) && (udp_rn != NULL))
\r
1860 fc = snmp_mib_node_find(udp_rn, udpidx[level], &udp_n);
\r
1863 /* udpidx[level] does not exist */
\r
1869 del_rn[del_cnt] = udp_rn;
\r
1870 del_n[del_cnt] = udp_n;
\r
1872 udp_rn = (struct mib_list_rootnode*)(udp_n->nptr);
\r
1876 /* reset delete (2 or more childs) */
\r
1878 udp_rn = (struct mib_list_rootnode*)(udp_n->nptr);
\r
1882 /* delete marked index nodes */
\r
1883 while (del_cnt > 0)
\r
1887 udp_rn = del_rn[del_cnt];
\r
1888 udp_n = del_n[del_cnt];
\r
1890 next = snmp_mib_node_delete(udp_rn, udp_n);
\r
1893 LWIP_ASSERT("next_count == 0",next->count == 0);
\r
1894 snmp_mib_lrn_free(next);
\r
1898 /* disable getnext traversal on empty table */
\r
1899 if (udp_root.count == 0) udptable.maxlength = 0;
\r
1903 void snmp_inc_snmpinpkts(void)
\r
1908 void snmp_inc_snmpoutpkts(void)
\r
1913 void snmp_inc_snmpinbadversions(void)
\r
1915 snmpinbadversions++;
\r
1918 void snmp_inc_snmpinbadcommunitynames(void)
\r
1920 snmpinbadcommunitynames++;
\r
1923 void snmp_inc_snmpinbadcommunityuses(void)
\r
1925 snmpinbadcommunityuses++;
\r
1928 void snmp_inc_snmpinasnparseerrs(void)
\r
1930 snmpinasnparseerrs++;
\r
1933 void snmp_inc_snmpintoobigs(void)
\r
1938 void snmp_inc_snmpinnosuchnames(void)
\r
1940 snmpinnosuchnames++;
\r
1943 void snmp_inc_snmpinbadvalues(void)
\r
1945 snmpinbadvalues++;
\r
1948 void snmp_inc_snmpinreadonlys(void)
\r
1950 snmpinreadonlys++;
\r
1953 void snmp_inc_snmpingenerrs(void)
\r
1958 void snmp_add_snmpintotalreqvars(u8_t value)
\r
1960 snmpintotalreqvars += value;
\r
1963 void snmp_add_snmpintotalsetvars(u8_t value)
\r
1965 snmpintotalsetvars += value;
\r
1968 void snmp_inc_snmpingetrequests(void)
\r
1970 snmpingetrequests++;
\r
1973 void snmp_inc_snmpingetnexts(void)
\r
1978 void snmp_inc_snmpinsetrequests(void)
\r
1980 snmpinsetrequests++;
\r
1983 void snmp_inc_snmpingetresponses(void)
\r
1985 snmpingetresponses++;
\r
1988 void snmp_inc_snmpintraps(void)
\r
1993 void snmp_inc_snmpouttoobigs(void)
\r
1998 void snmp_inc_snmpoutnosuchnames(void)
\r
2000 snmpoutnosuchnames++;
\r
2003 void snmp_inc_snmpoutbadvalues(void)
\r
2005 snmpoutbadvalues++;
\r
2008 void snmp_inc_snmpoutgenerrs(void)
\r
2013 void snmp_inc_snmpoutgetrequests(void)
\r
2015 snmpoutgetrequests++;
\r
2018 void snmp_inc_snmpoutgetnexts(void)
\r
2020 snmpoutgetnexts++;
\r
2023 void snmp_inc_snmpoutsetrequests(void)
\r
2025 snmpoutsetrequests++;
\r
2028 void snmp_inc_snmpoutgetresponses(void)
\r
2030 snmpoutgetresponses++;
\r
2033 void snmp_inc_snmpouttraps(void)
\r
2038 void snmp_get_snmpgrpid_ptr(struct snmp_obj_id **oid)
\r
2040 *oid = &snmpgrp_id;
\r
2043 void snmp_set_snmpenableauthentraps(u8_t *value)
\r
2045 if (value != NULL)
\r
2047 snmpenableauthentraps_ptr = value;
\r
2051 void snmp_get_snmpenableauthentraps(u8_t *value)
\r
2053 *value = *snmpenableauthentraps_ptr;
\r
2057 noleafs_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
2061 od->instance = MIB_OBJECT_NONE;
\r
2065 noleafs_get_value(struct obj_def *od, u16_t len, void *value)
\r
2073 noleafs_set_test(struct obj_def *od, u16_t len, void *value)
\r
2083 noleafs_set_value(struct obj_def *od, u16_t len, void *value)
\r
2092 * Returns systems object definitions.
\r
2094 * @param ident_len the address length (2)
\r
2095 * @param ident points to objectname.0 (object id trailer)
\r
2096 * @param od points to object definition.
\r
2099 system_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
2103 /* return to object name, adding index depth (1) */
\r
2106 if (ident_len == 2)
\r
2108 od->id_inst_len = ident_len;
\r
2109 od->id_inst_ptr = ident;
\r
2112 LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def system.%"U16_F".0\n",(u16_t)id));
\r
2115 case 1: /* sysDescr */
\r
2116 od->instance = MIB_OBJECT_SCALAR;
\r
2117 od->access = MIB_OBJECT_READ_ONLY;
\r
2118 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
\r
2119 od->v_len = *sysdescr_len_ptr;
\r
2121 case 2: /* sysObjectID */
\r
2122 od->instance = MIB_OBJECT_SCALAR;
\r
2123 od->access = MIB_OBJECT_READ_ONLY;
\r
2124 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID);
\r
2125 od->v_len = sysobjid.len * sizeof(s32_t);
\r
2127 case 3: /* sysUpTime */
\r
2128 od->instance = MIB_OBJECT_SCALAR;
\r
2129 od->access = MIB_OBJECT_READ_ONLY;
\r
2130 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS);
\r
2131 od->v_len = sizeof(u32_t);
\r
2133 case 4: /* sysContact */
\r
2134 od->instance = MIB_OBJECT_SCALAR;
\r
2135 od->access = MIB_OBJECT_READ_WRITE;
\r
2136 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
\r
2137 od->v_len = *syscontact_len_ptr;
\r
2139 case 5: /* sysName */
\r
2140 od->instance = MIB_OBJECT_SCALAR;
\r
2141 od->access = MIB_OBJECT_READ_WRITE;
\r
2142 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
\r
2143 od->v_len = *sysname_len_ptr;
\r
2145 case 6: /* sysLocation */
\r
2146 od->instance = MIB_OBJECT_SCALAR;
\r
2147 od->access = MIB_OBJECT_READ_WRITE;
\r
2148 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
\r
2149 od->v_len = *syslocation_len_ptr;
\r
2151 case 7: /* sysServices */
\r
2152 od->instance = MIB_OBJECT_SCALAR;
\r
2153 od->access = MIB_OBJECT_READ_ONLY;
\r
2154 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
2155 od->v_len = sizeof(s32_t);
\r
2158 LWIP_DEBUGF(SNMP_MIB_DEBUG,("system_get_object_def: no such object\n"));
\r
2159 od->instance = MIB_OBJECT_NONE;
\r
2165 LWIP_DEBUGF(SNMP_MIB_DEBUG,("system_get_object_def: no scalar\n"));
\r
2166 od->instance = MIB_OBJECT_NONE;
\r
2171 * Returns system object value.
\r
2173 * @param ident_len the address length (2)
\r
2174 * @param ident points to objectname.0 (object id trailer)
\r
2175 * @param len return value space (in bytes)
\r
2176 * @param value points to (varbind) space to copy value into.
\r
2179 system_get_value(struct obj_def *od, u16_t len, void *value)
\r
2183 id = od->id_inst_ptr[0];
\r
2186 case 1: /* sysDescr */
\r
2187 ocstrncpy(value,sysdescr_ptr,len);
\r
2189 case 2: /* sysObjectID */
\r
2190 objectidncpy((s32_t*)value,(s32_t*)sysobjid.id,len / sizeof(s32_t));
\r
2192 case 3: /* sysUpTime */
\r
2194 u32_t *uint_ptr = value;
\r
2195 *uint_ptr = sysuptime;
\r
2198 case 4: /* sysContact */
\r
2199 ocstrncpy(value,syscontact_ptr,len);
\r
2201 case 5: /* sysName */
\r
2202 ocstrncpy(value,sysname_ptr,len);
\r
2204 case 6: /* sysLocation */
\r
2205 ocstrncpy(value,syslocation_ptr,len);
\r
2207 case 7: /* sysServices */
\r
2209 s32_t *sint_ptr = value;
\r
2210 *sint_ptr = sysservices;
\r
2217 system_set_test(struct obj_def *od, u16_t len, void *value)
\r
2223 id = od->id_inst_ptr[0];
\r
2226 case 4: /* sysContact */
\r
2227 if ((syscontact_ptr != syscontact_default) &&
\r
2233 case 5: /* sysName */
\r
2234 if ((sysname_ptr != sysname_default) &&
\r
2240 case 6: /* sysLocation */
\r
2241 if ((syslocation_ptr != syslocation_default) &&
\r
2252 system_set_value(struct obj_def *od, u16_t len, void *value)
\r
2256 id = od->id_inst_ptr[0];
\r
2259 case 4: /* sysContact */
\r
2260 ocstrncpy(syscontact_ptr,value,len);
\r
2261 *syscontact_len_ptr = len;
\r
2263 case 5: /* sysName */
\r
2264 ocstrncpy(sysname_ptr,value,len);
\r
2265 *sysname_len_ptr = len;
\r
2267 case 6: /* sysLocation */
\r
2268 ocstrncpy(syslocation_ptr,value,len);
\r
2269 *syslocation_len_ptr = len;
\r
2275 * Returns interfaces.ifnumber object definition.
\r
2277 * @param ident_len the address length (2)
\r
2278 * @param ident points to objectname.index
\r
2279 * @param od points to object definition.
\r
2282 interfaces_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
2284 /* return to object name, adding index depth (1) */
\r
2287 if (ident_len == 2)
\r
2289 od->id_inst_len = ident_len;
\r
2290 od->id_inst_ptr = ident;
\r
2292 od->instance = MIB_OBJECT_SCALAR;
\r
2293 od->access = MIB_OBJECT_READ_ONLY;
\r
2294 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
2295 od->v_len = sizeof(s32_t);
\r
2299 LWIP_DEBUGF(SNMP_MIB_DEBUG,("interfaces_get_object_def: no scalar\n"));
\r
2300 od->instance = MIB_OBJECT_NONE;
\r
2305 * Returns interfaces.ifnumber object value.
\r
2307 * @param ident_len the address length (2)
\r
2308 * @param ident points to objectname.0 (object id trailer)
\r
2309 * @param len return value space (in bytes)
\r
2310 * @param value points to (varbind) space to copy value into.
\r
2313 interfaces_get_value(struct obj_def *od, u16_t len, void *value)
\r
2316 if (od->id_inst_ptr[0] == 1)
\r
2318 s32_t *sint_ptr = value;
\r
2319 *sint_ptr = iflist_root.count;
\r
2324 * Returns ifentry object definitions.
\r
2326 * @param ident_len the address length (2)
\r
2327 * @param ident points to objectname.index
\r
2328 * @param od points to object definition.
\r
2331 ifentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
2335 /* return to object name, adding index depth (1) */
\r
2338 if (ident_len == 2)
\r
2340 od->id_inst_len = ident_len;
\r
2341 od->id_inst_ptr = ident;
\r
2344 LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def ifentry.%"U16_F"\n",(u16_t)id));
\r
2347 case 1: /* ifIndex */
\r
2348 case 3: /* ifType */
\r
2349 case 4: /* ifMtu */
\r
2350 case 8: /* ifOperStatus */
\r
2351 od->instance = MIB_OBJECT_TAB;
\r
2352 od->access = MIB_OBJECT_READ_ONLY;
\r
2353 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
2354 od->v_len = sizeof(s32_t);
\r
2356 case 2: /* ifDescr */
\r
2357 od->instance = MIB_OBJECT_TAB;
\r
2358 od->access = MIB_OBJECT_READ_ONLY;
\r
2359 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
\r
2360 /** @todo this should be some sort of sizeof(struct netif.name) */
\r
2363 case 5: /* ifSpeed */
\r
2364 case 21: /* ifOutQLen */
\r
2365 od->instance = MIB_OBJECT_TAB;
\r
2366 od->access = MIB_OBJECT_READ_ONLY;
\r
2367 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE);
\r
2368 od->v_len = sizeof(u32_t);
\r
2370 case 6: /* ifPhysAddress */
\r
2372 struct netif *netif;
\r
2374 snmp_ifindextonetif(ident[1], &netif);
\r
2375 od->instance = MIB_OBJECT_TAB;
\r
2376 od->access = MIB_OBJECT_READ_ONLY;
\r
2377 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
\r
2378 od->v_len = netif->hwaddr_len;
\r
2381 case 7: /* ifAdminStatus */
\r
2382 od->instance = MIB_OBJECT_TAB;
\r
2383 od->access = MIB_OBJECT_READ_WRITE;
\r
2384 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
2385 od->v_len = sizeof(s32_t);
\r
2387 case 9: /* ifLastChange */
\r
2388 od->instance = MIB_OBJECT_TAB;
\r
2389 od->access = MIB_OBJECT_READ_ONLY;
\r
2390 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS);
\r
2391 od->v_len = sizeof(u32_t);
\r
2393 case 10: /* ifInOctets */
\r
2394 case 11: /* ifInUcastPkts */
\r
2395 case 12: /* ifInNUcastPkts */
\r
2396 case 13: /* ifInDiscarts */
\r
2397 case 14: /* ifInErrors */
\r
2398 case 15: /* ifInUnkownProtos */
\r
2399 case 16: /* ifOutOctets */
\r
2400 case 17: /* ifOutUcastPkts */
\r
2401 case 18: /* ifOutNUcastPkts */
\r
2402 case 19: /* ifOutDiscarts */
\r
2403 case 20: /* ifOutErrors */
\r
2404 od->instance = MIB_OBJECT_TAB;
\r
2405 od->access = MIB_OBJECT_READ_ONLY;
\r
2406 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
\r
2407 od->v_len = sizeof(u32_t);
\r
2409 case 22: /* ifSpecific */
\r
2410 /** @note returning zeroDotZero (0.0) no media specific MIB support */
\r
2411 od->instance = MIB_OBJECT_TAB;
\r
2412 od->access = MIB_OBJECT_READ_ONLY;
\r
2413 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID);
\r
2414 od->v_len = ifspecific.len * sizeof(s32_t);
\r
2417 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ifentry_get_object_def: no such object\n"));
\r
2418 od->instance = MIB_OBJECT_NONE;
\r
2424 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ifentry_get_object_def: no scalar\n"));
\r
2425 od->instance = MIB_OBJECT_NONE;
\r
2430 * Returns ifentry object value.
\r
2432 * @param ident_len the address length (2)
\r
2433 * @param ident points to objectname.0 (object id trailer)
\r
2434 * @param len return value space (in bytes)
\r
2435 * @param value points to (varbind) space to copy value into.
\r
2438 ifentry_get_value(struct obj_def *od, u16_t len, void *value)
\r
2440 struct netif *netif;
\r
2443 snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
\r
2444 id = od->id_inst_ptr[0];
\r
2447 case 1: /* ifIndex */
\r
2449 s32_t *sint_ptr = value;
\r
2450 *sint_ptr = od->id_inst_ptr[1];
\r
2453 case 2: /* ifDescr */
\r
2454 ocstrncpy(value,(u8_t*)netif->name,len);
\r
2456 case 3: /* ifType */
\r
2458 s32_t *sint_ptr = value;
\r
2459 *sint_ptr = netif->link_type;
\r
2462 case 4: /* ifMtu */
\r
2464 s32_t *sint_ptr = value;
\r
2465 *sint_ptr = netif->mtu;
\r
2468 case 5: /* ifSpeed */
\r
2470 u32_t *uint_ptr = value;
\r
2471 *uint_ptr = netif->link_speed;
\r
2474 case 6: /* ifPhysAddress */
\r
2475 ocstrncpy(value,netif->hwaddr,len);
\r
2477 case 7: /* ifAdminStatus */
\r
2478 case 8: /* ifOperStatus */
\r
2480 s32_t *sint_ptr = value;
\r
2481 if (netif_is_up(netif))
\r
2491 case 9: /* ifLastChange */
\r
2493 u32_t *uint_ptr = value;
\r
2494 *uint_ptr = netif->ts;
\r
2497 case 10: /* ifInOctets */
\r
2499 u32_t *uint_ptr = value;
\r
2500 *uint_ptr = netif->ifinoctets;
\r
2503 case 11: /* ifInUcastPkts */
\r
2505 u32_t *uint_ptr = value;
\r
2506 *uint_ptr = netif->ifinucastpkts;
\r
2509 case 12: /* ifInNUcastPkts */
\r
2511 u32_t *uint_ptr = value;
\r
2512 *uint_ptr = netif->ifinnucastpkts;
\r
2515 case 13: /* ifInDiscarts */
\r
2517 u32_t *uint_ptr = value;
\r
2518 *uint_ptr = netif->ifindiscards;
\r
2521 case 14: /* ifInErrors */
\r
2522 case 15: /* ifInUnkownProtos */
\r
2523 /** @todo add these counters! */
\r
2525 u32_t *uint_ptr = value;
\r
2529 case 16: /* ifOutOctets */
\r
2531 u32_t *uint_ptr = value;
\r
2532 *uint_ptr = netif->ifoutoctets;
\r
2535 case 17: /* ifOutUcastPkts */
\r
2537 u32_t *uint_ptr = value;
\r
2538 *uint_ptr = netif->ifoutucastpkts;
\r
2541 case 18: /* ifOutNUcastPkts */
\r
2543 u32_t *uint_ptr = value;
\r
2544 *uint_ptr = netif->ifoutnucastpkts;
\r
2547 case 19: /* ifOutDiscarts */
\r
2549 u32_t *uint_ptr = value;
\r
2550 *uint_ptr = netif->ifoutdiscards;
\r
2553 case 20: /* ifOutErrors */
\r
2554 /** @todo add this counter! */
\r
2556 u32_t *uint_ptr = value;
\r
2560 case 21: /* ifOutQLen */
\r
2561 /** @todo figure out if this must be 0 (no queue) or 1? */
\r
2563 u32_t *uint_ptr = value;
\r
2567 case 22: /* ifSpecific */
\r
2568 objectidncpy((s32_t*)value,(s32_t*)ifspecific.id,len / sizeof(s32_t));
\r
2574 * Returns atentry object definitions.
\r
2576 * @param ident_len the address length (6)
\r
2577 * @param ident points to objectname.atifindex.atnetaddress
\r
2578 * @param od points to object definition.
\r
2581 atentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
2583 /* return to object name, adding index depth (5) */
\r
2587 if (ident_len == 6)
\r
2589 od->id_inst_len = ident_len;
\r
2590 od->id_inst_ptr = ident;
\r
2594 case 1: /* atIfIndex */
\r
2595 od->instance = MIB_OBJECT_TAB;
\r
2596 od->access = MIB_OBJECT_READ_WRITE;
\r
2597 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
2598 od->v_len = sizeof(s32_t);
\r
2600 case 2: /* atPhysAddress */
\r
2601 od->instance = MIB_OBJECT_TAB;
\r
2602 od->access = MIB_OBJECT_READ_WRITE;
\r
2603 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
\r
2604 od->v_len = sizeof(struct eth_addr);
\r
2606 case 3: /* atNetAddress */
\r
2607 od->instance = MIB_OBJECT_TAB;
\r
2608 od->access = MIB_OBJECT_READ_WRITE;
\r
2609 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
\r
2613 LWIP_DEBUGF(SNMP_MIB_DEBUG,("atentry_get_object_def: no such object\n"));
\r
2614 od->instance = MIB_OBJECT_NONE;
\r
2620 LWIP_DEBUGF(SNMP_MIB_DEBUG,("atentry_get_object_def: no scalar\n"));
\r
2621 od->instance = MIB_OBJECT_NONE;
\r
2626 atentry_get_value(struct obj_def *od, u16_t len, void *value)
\r
2629 struct eth_addr* ethaddr_ret;
\r
2630 struct ip_addr* ipaddr_ret;
\r
2631 struct ip_addr ip;
\r
2632 struct netif *netif;
\r
2636 snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
\r
2637 snmp_oidtoip(&od->id_inst_ptr[2], &ip);
\r
2638 ip.addr = htonl(ip.addr);
\r
2640 if (etharp_find_addr(netif, &ip, ðaddr_ret, &ipaddr_ret) > -1)
\r
2642 id = od->id_inst_ptr[0];
\r
2645 case 1: /* atIfIndex */
\r
2647 s32_t *sint_ptr = value;
\r
2648 *sint_ptr = od->id_inst_ptr[1];
\r
2651 case 2: /* atPhysAddress */
\r
2653 struct eth_addr *dst = value;
\r
2655 *dst = *ethaddr_ret;
\r
2658 case 3: /* atNetAddress */
\r
2660 struct ip_addr *dst = value;
\r
2662 *dst = *ipaddr_ret;
\r
2670 ip_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
2674 /* return to object name, adding index depth (1) */
\r
2677 if (ident_len == 2)
\r
2679 od->id_inst_len = ident_len;
\r
2680 od->id_inst_ptr = ident;
\r
2683 LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def ip.%"U16_F".0\n",(u16_t)id));
\r
2686 case 1: /* ipForwarding */
\r
2687 case 2: /* ipDefaultTTL */
\r
2688 od->instance = MIB_OBJECT_SCALAR;
\r
2689 od->access = MIB_OBJECT_READ_WRITE;
\r
2690 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
2691 od->v_len = sizeof(s32_t);
\r
2693 case 3: /* ipInReceives */
\r
2694 case 4: /* ipInHdrErrors */
\r
2695 case 5: /* ipInAddrErrors */
\r
2696 case 6: /* ipForwDatagrams */
\r
2697 case 7: /* ipInUnknownProtos */
\r
2698 case 8: /* ipInDiscards */
\r
2699 case 9: /* ipInDelivers */
\r
2700 case 10: /* ipOutRequests */
\r
2701 case 11: /* ipOutDiscards */
\r
2702 case 12: /* ipOutNoRoutes */
\r
2703 case 14: /* ipReasmReqds */
\r
2704 case 15: /* ipReasmOKs */
\r
2705 case 16: /* ipReasmFails */
\r
2706 case 17: /* ipFragOKs */
\r
2707 case 18: /* ipFragFails */
\r
2708 case 19: /* ipFragCreates */
\r
2709 case 23: /* ipRoutingDiscards */
\r
2710 od->instance = MIB_OBJECT_SCALAR;
\r
2711 od->access = MIB_OBJECT_READ_ONLY;
\r
2712 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
\r
2713 od->v_len = sizeof(u32_t);
\r
2715 case 13: /* ipReasmTimeout */
\r
2716 od->instance = MIB_OBJECT_SCALAR;
\r
2717 od->access = MIB_OBJECT_READ_ONLY;
\r
2718 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
2719 od->v_len = sizeof(s32_t);
\r
2722 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_get_object_def: no such object\n"));
\r
2723 od->instance = MIB_OBJECT_NONE;
\r
2729 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_get_object_def: no scalar\n"));
\r
2730 od->instance = MIB_OBJECT_NONE;
\r
2735 ip_get_value(struct obj_def *od, u16_t len, void *value)
\r
2740 id = od->id_inst_ptr[0];
\r
2743 case 1: /* ipForwarding */
\r
2745 s32_t *sint_ptr = value;
\r
2750 /* not-forwarding */
\r
2755 case 2: /* ipDefaultTTL */
\r
2757 s32_t *sint_ptr = value;
\r
2758 *sint_ptr = IP_DEFAULT_TTL;
\r
2761 case 3: /* ipInReceives */
\r
2763 u32_t *uint_ptr = value;
\r
2764 *uint_ptr = ipinreceives;
\r
2767 case 4: /* ipInHdrErrors */
\r
2769 u32_t *uint_ptr = value;
\r
2770 *uint_ptr = ipinhdrerrors;
\r
2773 case 5: /* ipInAddrErrors */
\r
2775 u32_t *uint_ptr = value;
\r
2776 *uint_ptr = ipinaddrerrors;
\r
2779 case 6: /* ipForwDatagrams */
\r
2781 u32_t *uint_ptr = value;
\r
2782 *uint_ptr = ipforwdatagrams;
\r
2785 case 7: /* ipInUnknownProtos */
\r
2787 u32_t *uint_ptr = value;
\r
2788 *uint_ptr = ipinunknownprotos;
\r
2791 case 8: /* ipInDiscards */
\r
2793 u32_t *uint_ptr = value;
\r
2794 *uint_ptr = ipindiscards;
\r
2797 case 9: /* ipInDelivers */
\r
2799 u32_t *uint_ptr = value;
\r
2800 *uint_ptr = ipindelivers;
\r
2803 case 10: /* ipOutRequests */
\r
2805 u32_t *uint_ptr = value;
\r
2806 *uint_ptr = ipoutrequests;
\r
2809 case 11: /* ipOutDiscards */
\r
2811 u32_t *uint_ptr = value;
\r
2812 *uint_ptr = ipoutdiscards;
\r
2815 case 12: /* ipOutNoRoutes */
\r
2817 u32_t *uint_ptr = value;
\r
2818 *uint_ptr = ipoutnoroutes;
\r
2821 case 13: /* ipReasmTimeout */
\r
2823 s32_t *sint_ptr = value;
\r
2825 *sint_ptr = IP_REASS_MAXAGE;
\r
2831 case 14: /* ipReasmReqds */
\r
2833 u32_t *uint_ptr = value;
\r
2834 *uint_ptr = ipreasmreqds;
\r
2837 case 15: /* ipReasmOKs */
\r
2839 u32_t *uint_ptr = value;
\r
2840 *uint_ptr = ipreasmoks;
\r
2843 case 16: /* ipReasmFails */
\r
2845 u32_t *uint_ptr = value;
\r
2846 *uint_ptr = ipreasmfails;
\r
2849 case 17: /* ipFragOKs */
\r
2851 u32_t *uint_ptr = value;
\r
2852 *uint_ptr = ipfragoks;
\r
2855 case 18: /* ipFragFails */
\r
2857 u32_t *uint_ptr = value;
\r
2858 *uint_ptr = ipfragfails;
\r
2861 case 19: /* ipFragCreates */
\r
2863 u32_t *uint_ptr = value;
\r
2864 *uint_ptr = ipfragcreates;
\r
2867 case 23: /* ipRoutingDiscards */
\r
2868 /** @todo can lwIP discard routes at all?? hardwire this to 0?? */
\r
2870 u32_t *uint_ptr = value;
\r
2871 *uint_ptr = iproutingdiscards;
\r
2878 * Test ip object value before setting.
\r
2880 * @param od is the object definition
\r
2881 * @param len return value space (in bytes)
\r
2882 * @param value points to (varbind) space to copy value from.
\r
2884 * @note we allow set if the value matches the hardwired value,
\r
2885 * otherwise return badvalue.
\r
2888 ip_set_test(struct obj_def *od, u16_t len, void *value)
\r
2891 s32_t *sint_ptr = value;
\r
2895 id = od->id_inst_ptr[0];
\r
2898 case 1: /* ipForwarding */
\r
2901 if (*sint_ptr == 1)
\r
2903 /* not-forwarding */
\r
2904 if (*sint_ptr == 2)
\r
2910 case 2: /* ipDefaultTTL */
\r
2911 if (*sint_ptr == IP_DEFAULT_TTL)
\r
2921 ip_addrentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
2923 /* return to object name, adding index depth (4) */
\r
2927 if (ident_len == 5)
\r
2931 od->id_inst_len = ident_len;
\r
2932 od->id_inst_ptr = ident;
\r
2937 case 1: /* ipAdEntAddr */
\r
2938 case 3: /* ipAdEntNetMask */
\r
2939 od->instance = MIB_OBJECT_TAB;
\r
2940 od->access = MIB_OBJECT_READ_ONLY;
\r
2941 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
\r
2944 case 2: /* ipAdEntIfIndex */
\r
2945 case 4: /* ipAdEntBcastAddr */
\r
2946 case 5: /* ipAdEntReasmMaxSize */
\r
2947 od->instance = MIB_OBJECT_TAB;
\r
2948 od->access = MIB_OBJECT_READ_ONLY;
\r
2949 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
2950 od->v_len = sizeof(s32_t);
\r
2953 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_addrentry_get_object_def: no such object\n"));
\r
2954 od->instance = MIB_OBJECT_NONE;
\r
2960 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_addrentry_get_object_def: no scalar\n"));
\r
2961 od->instance = MIB_OBJECT_NONE;
\r
2966 ip_addrentry_get_value(struct obj_def *od, u16_t len, void *value)
\r
2970 struct ip_addr ip;
\r
2971 struct netif *netif = netif_list;
\r
2974 snmp_oidtoip(&od->id_inst_ptr[1], &ip);
\r
2975 ip.addr = htonl(ip.addr);
\r
2977 while ((netif != NULL) && !ip_addr_cmp(&ip, &netif->ip_addr))
\r
2979 netif = netif->next;
\r
2983 if (netif != NULL)
\r
2985 id = od->id_inst_ptr[0];
\r
2988 case 1: /* ipAdEntAddr */
\r
2990 struct ip_addr *dst = value;
\r
2991 *dst = netif->ip_addr;
\r
2994 case 2: /* ipAdEntIfIndex */
\r
2996 s32_t *sint_ptr = value;
\r
2997 *sint_ptr = ifidx + 1;
\r
3000 case 3: /* ipAdEntNetMask */
\r
3002 struct ip_addr *dst = value;
\r
3003 *dst = netif->netmask;
\r
3006 case 4: /* ipAdEntBcastAddr */
\r
3008 s32_t *sint_ptr = value;
\r
3010 /* lwIP oddity, there's no broadcast
\r
3011 address in the netif we can rely on */
\r
3012 *sint_ptr = ip_addr_broadcast.addr & 1;
\r
3015 case 5: /* ipAdEntReasmMaxSize */
\r
3017 s32_t *sint_ptr = value;
\r
3019 *sint_ptr = (IP_HLEN + IP_REASS_BUFSIZE);
\r
3021 /** @todo returning MTU would be a bad thing and
\r
3022 returning a wild guess like '576' isn't good either */
\r
3033 * lwIP IP routing is currently using the network addresses in netif_list.
\r
3034 * if no suitable network IP is found in netif_list, the default_netif is used.
\r
3037 ip_rteentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
3041 /* return to object name, adding index depth (4) */
\r
3045 if (ident_len == 5)
\r
3047 od->id_inst_len = ident_len;
\r
3048 od->id_inst_ptr = ident;
\r
3053 case 1: /* ipRouteDest */
\r
3054 case 7: /* ipRouteNextHop */
\r
3055 case 11: /* ipRouteMask */
\r
3056 od->instance = MIB_OBJECT_TAB;
\r
3057 od->access = MIB_OBJECT_READ_WRITE;
\r
3058 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
\r
3061 case 2: /* ipRouteIfIndex */
\r
3062 case 3: /* ipRouteMetric1 */
\r
3063 case 4: /* ipRouteMetric2 */
\r
3064 case 5: /* ipRouteMetric3 */
\r
3065 case 6: /* ipRouteMetric4 */
\r
3066 case 8: /* ipRouteType */
\r
3067 case 10: /* ipRouteAge */
\r
3068 case 12: /* ipRouteMetric5 */
\r
3069 od->instance = MIB_OBJECT_TAB;
\r
3070 od->access = MIB_OBJECT_READ_WRITE;
\r
3071 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
3072 od->v_len = sizeof(s32_t);
\r
3074 case 9: /* ipRouteProto */
\r
3075 od->instance = MIB_OBJECT_TAB;
\r
3076 od->access = MIB_OBJECT_READ_ONLY;
\r
3077 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
3078 od->v_len = sizeof(s32_t);
\r
3080 case 13: /* ipRouteInfo */
\r
3081 /** @note returning zeroDotZero (0.0) no routing protocol specific MIB */
\r
3082 od->instance = MIB_OBJECT_TAB;
\r
3083 od->access = MIB_OBJECT_READ_ONLY;
\r
3084 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID);
\r
3085 od->v_len = iprouteinfo.len * sizeof(s32_t);
\r
3088 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_rteentry_get_object_def: no such object\n"));
\r
3089 od->instance = MIB_OBJECT_NONE;
\r
3095 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_rteentry_get_object_def: no scalar\n"));
\r
3096 od->instance = MIB_OBJECT_NONE;
\r
3101 ip_rteentry_get_value(struct obj_def *od, u16_t len, void *value)
\r
3103 struct netif *netif;
\r
3104 struct ip_addr dest;
\r
3108 ident = od->id_inst_ptr;
\r
3109 snmp_oidtoip(&ident[1], &dest);
\r
3110 dest.addr = htonl(dest.addr);
\r
3112 if (dest.addr == 0)
\r
3114 /* ip_route() uses default netif for default route */
\r
3115 netif = netif_default;
\r
3119 /* not using ip_route(), need exact match! */
\r
3120 netif = netif_list;
\r
3121 while ((netif != NULL) &&
\r
3122 !ip_addr_netcmp(&dest, &(netif->ip_addr), &(netif->netmask)) )
\r
3124 netif = netif->next;
\r
3127 if (netif != NULL)
\r
3132 case 1: /* ipRouteDest */
\r
3134 struct ip_addr *dst = value;
\r
3136 if (dest.addr == 0)
\r
3138 /* default rte has 0.0.0.0 dest */
\r
3143 /* netifs have netaddress dest */
\r
3144 dst->addr = netif->ip_addr.addr & netif->netmask.addr;
\r
3148 case 2: /* ipRouteIfIndex */
\r
3150 s32_t *sint_ptr = value;
\r
3152 snmp_netiftoifindex(netif, sint_ptr);
\r
3155 case 3: /* ipRouteMetric1 */
\r
3157 s32_t *sint_ptr = value;
\r
3159 if (dest.addr == 0)
\r
3161 /* default rte has metric 1 */
\r
3166 /* other rtes have metric 0 */
\r
3171 case 4: /* ipRouteMetric2 */
\r
3172 case 5: /* ipRouteMetric3 */
\r
3173 case 6: /* ipRouteMetric4 */
\r
3174 case 12: /* ipRouteMetric5 */
\r
3176 s32_t *sint_ptr = value;
\r
3181 case 7: /* ipRouteNextHop */
\r
3183 struct ip_addr *dst = value;
\r
3185 if (dest.addr == 0)
\r
3187 /* default rte: gateway */
\r
3192 /* other rtes: netif ip_addr */
\r
3193 *dst = netif->ip_addr;
\r
3197 case 8: /* ipRouteType */
\r
3199 s32_t *sint_ptr = value;
\r
3201 if (dest.addr == 0)
\r
3203 /* default rte is indirect */
\r
3208 /* other rtes are direct */
\r
3213 case 9: /* ipRouteProto */
\r
3215 s32_t *sint_ptr = value;
\r
3216 /* locally defined routes */
\r
3220 case 10: /* ipRouteAge */
\r
3222 s32_t *sint_ptr = value;
\r
3223 /** @todo (sysuptime - timestamp last change) / 100
\r
3224 @see snmp_insert_iprteidx_tree() */
\r
3228 case 11: /* ipRouteMask */
\r
3230 struct ip_addr *dst = value;
\r
3232 if (dest.addr == 0)
\r
3234 /* default rte use 0.0.0.0 mask */
\r
3239 /* other rtes use netmask */
\r
3240 *dst = netif->netmask;
\r
3244 case 13: /* ipRouteInfo */
\r
3245 objectidncpy((s32_t*)value,(s32_t*)iprouteinfo.id,len / sizeof(s32_t));
\r
3252 ip_ntomentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
3254 /* return to object name, adding index depth (5) */
\r
3258 if (ident_len == 6)
\r
3262 od->id_inst_len = ident_len;
\r
3263 od->id_inst_ptr = ident;
\r
3268 case 1: /* ipNetToMediaIfIndex */
\r
3269 case 4: /* ipNetToMediaType */
\r
3270 od->instance = MIB_OBJECT_TAB;
\r
3271 od->access = MIB_OBJECT_READ_WRITE;
\r
3272 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
3273 od->v_len = sizeof(s32_t);
\r
3275 case 2: /* ipNetToMediaPhysAddress */
\r
3276 od->instance = MIB_OBJECT_TAB;
\r
3277 od->access = MIB_OBJECT_READ_WRITE;
\r
3278 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
\r
3279 od->v_len = sizeof(struct eth_addr);
\r
3281 case 3: /* ipNetToMediaNetAddress */
\r
3282 od->instance = MIB_OBJECT_TAB;
\r
3283 od->access = MIB_OBJECT_READ_WRITE;
\r
3284 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
\r
3288 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_ntomentry_get_object_def: no such object\n"));
\r
3289 od->instance = MIB_OBJECT_NONE;
\r
3295 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_ntomentry_get_object_def: no scalar\n"));
\r
3296 od->instance = MIB_OBJECT_NONE;
\r
3301 ip_ntomentry_get_value(struct obj_def *od, u16_t len, void *value)
\r
3304 struct eth_addr* ethaddr_ret;
\r
3305 struct ip_addr* ipaddr_ret;
\r
3306 struct ip_addr ip;
\r
3307 struct netif *netif;
\r
3311 snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
\r
3312 snmp_oidtoip(&od->id_inst_ptr[2], &ip);
\r
3313 ip.addr = htonl(ip.addr);
\r
3315 if (etharp_find_addr(netif, &ip, ðaddr_ret, &ipaddr_ret) > -1)
\r
3317 id = od->id_inst_ptr[0];
\r
3320 case 1: /* ipNetToMediaIfIndex */
\r
3322 s32_t *sint_ptr = value;
\r
3323 *sint_ptr = od->id_inst_ptr[1];
\r
3326 case 2: /* ipNetToMediaPhysAddress */
\r
3328 struct eth_addr *dst = value;
\r
3330 *dst = *ethaddr_ret;
\r
3333 case 3: /* ipNetToMediaNetAddress */
\r
3335 struct ip_addr *dst = value;
\r
3337 *dst = *ipaddr_ret;
\r
3340 case 4: /* ipNetToMediaType */
\r
3342 s32_t *sint_ptr = value;
\r
3352 icmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
3354 /* return to object name, adding index depth (1) */
\r
3357 if ((ident_len == 2) &&
\r
3358 (ident[0] > 0) && (ident[0] < 27))
\r
3360 od->id_inst_len = ident_len;
\r
3361 od->id_inst_ptr = ident;
\r
3363 od->instance = MIB_OBJECT_SCALAR;
\r
3364 od->access = MIB_OBJECT_READ_ONLY;
\r
3365 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
\r
3366 od->v_len = sizeof(u32_t);
\r
3370 LWIP_DEBUGF(SNMP_MIB_DEBUG,("icmp_get_object_def: no scalar\n"));
\r
3371 od->instance = MIB_OBJECT_NONE;
\r
3376 icmp_get_value(struct obj_def *od, u16_t len, void *value)
\r
3378 u32_t *uint_ptr = value;
\r
3382 id = od->id_inst_ptr[0];
\r
3385 case 1: /* icmpInMsgs */
\r
3386 *uint_ptr = icmpinmsgs;
\r
3388 case 2: /* icmpInErrors */
\r
3389 *uint_ptr = icmpinerrors;
\r
3391 case 3: /* icmpInDestUnreachs */
\r
3392 *uint_ptr = icmpindestunreachs;
\r
3394 case 4: /* icmpInTimeExcds */
\r
3395 *uint_ptr = icmpintimeexcds;
\r
3397 case 5: /* icmpInParmProbs */
\r
3398 *uint_ptr = icmpinparmprobs;
\r
3400 case 6: /* icmpInSrcQuenchs */
\r
3401 *uint_ptr = icmpinsrcquenchs;
\r
3403 case 7: /* icmpInRedirects */
\r
3404 *uint_ptr = icmpinredirects;
\r
3406 case 8: /* icmpInEchos */
\r
3407 *uint_ptr = icmpinechos;
\r
3409 case 9: /* icmpInEchoReps */
\r
3410 *uint_ptr = icmpinechoreps;
\r
3412 case 10: /* icmpInTimestamps */
\r
3413 *uint_ptr = icmpintimestamps;
\r
3415 case 11: /* icmpInTimestampReps */
\r
3416 *uint_ptr = icmpintimestampreps;
\r
3418 case 12: /* icmpInAddrMasks */
\r
3419 *uint_ptr = icmpinaddrmasks;
\r
3421 case 13: /* icmpInAddrMaskReps */
\r
3422 *uint_ptr = icmpinaddrmaskreps;
\r
3424 case 14: /* icmpOutMsgs */
\r
3425 *uint_ptr = icmpoutmsgs;
\r
3427 case 15: /* icmpOutErrors */
\r
3428 *uint_ptr = icmpouterrors;
\r
3430 case 16: /* icmpOutDestUnreachs */
\r
3431 *uint_ptr = icmpoutdestunreachs;
\r
3433 case 17: /* icmpOutTimeExcds */
\r
3434 *uint_ptr = icmpouttimeexcds;
\r
3436 case 18: /* icmpOutParmProbs */
\r
3437 *uint_ptr = icmpoutparmprobs;
\r
3439 case 19: /* icmpOutSrcQuenchs */
\r
3440 *uint_ptr = icmpoutsrcquenchs;
\r
3442 case 20: /* icmpOutRedirects */
\r
3443 *uint_ptr = icmpoutredirects;
\r
3445 case 21: /* icmpOutEchos */
\r
3446 *uint_ptr = icmpoutechos;
\r
3448 case 22: /* icmpOutEchoReps */
\r
3449 *uint_ptr = icmpoutechoreps;
\r
3451 case 23: /* icmpOutTimestamps */
\r
3452 *uint_ptr = icmpouttimestamps;
\r
3454 case 24: /* icmpOutTimestampReps */
\r
3455 *uint_ptr = icmpouttimestampreps;
\r
3457 case 25: /* icmpOutAddrMasks */
\r
3458 *uint_ptr = icmpoutaddrmasks;
\r
3460 case 26: /* icmpOutAddrMaskReps */
\r
3461 *uint_ptr = icmpoutaddrmaskreps;
\r
3467 /** @todo tcp grp */
\r
3469 tcp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
3473 /* return to object name, adding index depth (1) */
\r
3476 if (ident_len == 2)
\r
3478 od->id_inst_len = ident_len;
\r
3479 od->id_inst_ptr = ident;
\r
3482 LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def tcp.%"U16_F".0\n",(u16_t)id));
\r
3486 case 1: /* tcpRtoAlgorithm */
\r
3487 case 2: /* tcpRtoMin */
\r
3488 case 3: /* tcpRtoMax */
\r
3489 case 4: /* tcpMaxConn */
\r
3490 od->instance = MIB_OBJECT_SCALAR;
\r
3491 od->access = MIB_OBJECT_READ_ONLY;
\r
3492 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
3493 od->v_len = sizeof(s32_t);
\r
3495 case 5: /* tcpActiveOpens */
\r
3496 case 6: /* tcpPassiveOpens */
\r
3497 case 7: /* tcpAttemptFails */
\r
3498 case 8: /* tcpEstabResets */
\r
3499 case 10: /* tcpInSegs */
\r
3500 case 11: /* tcpOutSegs */
\r
3501 case 12: /* tcpRetransSegs */
\r
3502 case 14: /* tcpInErrs */
\r
3503 case 15: /* tcpOutRsts */
\r
3504 od->instance = MIB_OBJECT_SCALAR;
\r
3505 od->access = MIB_OBJECT_READ_ONLY;
\r
3506 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
\r
3507 od->v_len = sizeof(u32_t);
\r
3509 case 9: /* tcpCurrEstab */
\r
3510 od->instance = MIB_OBJECT_TAB;
\r
3511 od->access = MIB_OBJECT_READ_ONLY;
\r
3512 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE);
\r
3513 od->v_len = sizeof(u32_t);
\r
3516 LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcp_get_object_def: no such object\n"));
\r
3517 od->instance = MIB_OBJECT_NONE;
\r
3523 LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcp_get_object_def: no scalar\n"));
\r
3524 od->instance = MIB_OBJECT_NONE;
\r
3529 tcp_get_value(struct obj_def *od, u16_t len, void *value)
\r
3531 u32_t *uint_ptr = value;
\r
3532 s32_t *sint_ptr = value;
\r
3536 id = od->id_inst_ptr[0];
\r
3539 case 1: /* tcpRtoAlgorithm, vanj(4) */
\r
3542 case 2: /* tcpRtoMin */
\r
3543 /* @todo not the actual value, a guess,
\r
3544 needs to be calculated */
\r
3547 case 3: /* tcpRtoMax */
\r
3548 /* @todo not the actual value, a guess,
\r
3549 needs to be calculated */
\r
3550 *sint_ptr = 60000;
\r
3552 case 4: /* tcpMaxConn */
\r
3553 *sint_ptr = MEMP_NUM_TCP_PCB;
\r
3555 case 5: /* tcpActiveOpens */
\r
3556 *uint_ptr = tcpactiveopens;
\r
3558 case 6: /* tcpPassiveOpens */
\r
3559 *uint_ptr = tcppassiveopens;
\r
3561 case 7: /* tcpAttemptFails */
\r
3562 *uint_ptr = tcpattemptfails;
\r
3564 case 8: /* tcpEstabResets */
\r
3565 *uint_ptr = tcpestabresets;
\r
3567 case 9: /* tcpCurrEstab */
\r
3569 u16_t tcpcurrestab = 0;
\r
3570 struct tcp_pcb *pcb = tcp_active_pcbs;
\r
3571 while (pcb != NULL)
\r
3573 if ((pcb->state == ESTABLISHED) ||
\r
3574 (pcb->state == CLOSE_WAIT))
\r
3580 *uint_ptr = tcpcurrestab;
\r
3583 case 10: /* tcpInSegs */
\r
3584 *uint_ptr = tcpinsegs;
\r
3586 case 11: /* tcpOutSegs */
\r
3587 *uint_ptr = tcpoutsegs;
\r
3589 case 12: /* tcpRetransSegs */
\r
3590 *uint_ptr = tcpretranssegs;
\r
3592 case 14: /* tcpInErrs */
\r
3593 *uint_ptr = tcpinerrs;
\r
3595 case 15: /* tcpOutRsts */
\r
3596 *uint_ptr = tcpoutrsts;
\r
3602 tcpconnentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
3604 /* return to object name, adding index depth (10) */
\r
3608 if (ident_len == 11)
\r
3612 od->id_inst_len = ident_len;
\r
3613 od->id_inst_ptr = ident;
\r
3616 LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def tcp.%"U16_F".0\n",(u16_t)id));
\r
3620 case 1: /* tcpConnState */
\r
3621 od->instance = MIB_OBJECT_TAB;
\r
3622 od->access = MIB_OBJECT_READ_WRITE;
\r
3623 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
3624 od->v_len = sizeof(s32_t);
\r
3626 case 2: /* tcpConnLocalAddress */
\r
3627 case 4: /* tcpConnRemAddress */
\r
3628 od->instance = MIB_OBJECT_TAB;
\r
3629 od->access = MIB_OBJECT_READ_ONLY;
\r
3630 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
\r
3633 case 3: /* tcpConnLocalPort */
\r
3634 case 5: /* tcpConnRemPort */
\r
3635 od->instance = MIB_OBJECT_TAB;
\r
3636 od->access = MIB_OBJECT_READ_ONLY;
\r
3637 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
3638 od->v_len = sizeof(s32_t);
\r
3641 LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcpconnentry_get_object_def: no such object\n"));
\r
3642 od->instance = MIB_OBJECT_NONE;
\r
3648 LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcpconnentry_get_object_def: no such object\n"));
\r
3649 od->instance = MIB_OBJECT_NONE;
\r
3654 tcpconnentry_get_value(struct obj_def *od, u16_t len, void *value)
\r
3656 struct ip_addr lip, rip;
\r
3657 u16_t lport, rport;
\r
3660 ident = od->id_inst_ptr;
\r
3661 snmp_oidtoip(&ident[1], &lip);
\r
3662 lip.addr = htonl(lip.addr);
\r
3664 snmp_oidtoip(&ident[6], &rip);
\r
3665 rip.addr = htonl(rip.addr);
\r
3666 rport = ident[10];
\r
3668 /** @todo find matching PCB */
\r
3673 udp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
3675 /* return to object name, adding index depth (1) */
\r
3678 if ((ident_len == 2) &&
\r
3679 (ident[0] > 0) && (ident[0] < 6))
\r
3681 od->id_inst_len = ident_len;
\r
3682 od->id_inst_ptr = ident;
\r
3684 od->instance = MIB_OBJECT_SCALAR;
\r
3685 od->access = MIB_OBJECT_READ_ONLY;
\r
3686 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
\r
3687 od->v_len = sizeof(u32_t);
\r
3691 LWIP_DEBUGF(SNMP_MIB_DEBUG,("udp_get_object_def: no scalar\n"));
\r
3692 od->instance = MIB_OBJECT_NONE;
\r
3697 udp_get_value(struct obj_def *od, u16_t len, void *value)
\r
3699 u32_t *uint_ptr = value;
\r
3703 id = od->id_inst_ptr[0];
\r
3706 case 1: /* udpInDatagrams */
\r
3707 *uint_ptr = udpindatagrams;
\r
3709 case 2: /* udpNoPorts */
\r
3710 *uint_ptr = udpnoports;
\r
3712 case 3: /* udpInErrors */
\r
3713 *uint_ptr = udpinerrors;
\r
3715 case 4: /* udpOutDatagrams */
\r
3716 *uint_ptr = udpoutdatagrams;
\r
3722 udpentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
3724 /* return to object name, adding index depth (5) */
\r
3728 if (ident_len == 6)
\r
3730 od->id_inst_len = ident_len;
\r
3731 od->id_inst_ptr = ident;
\r
3735 case 1: /* udpLocalAddress */
\r
3736 od->instance = MIB_OBJECT_TAB;
\r
3737 od->access = MIB_OBJECT_READ_ONLY;
\r
3738 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
\r
3741 case 2: /* udpLocalPort */
\r
3742 od->instance = MIB_OBJECT_TAB;
\r
3743 od->access = MIB_OBJECT_READ_ONLY;
\r
3744 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
3745 od->v_len = sizeof(s32_t);
\r
3748 LWIP_DEBUGF(SNMP_MIB_DEBUG,("udpentry_get_object_def: no such object\n"));
\r
3749 od->instance = MIB_OBJECT_NONE;
\r
3755 LWIP_DEBUGF(SNMP_MIB_DEBUG,("udpentry_get_object_def: no scalar\n"));
\r
3756 od->instance = MIB_OBJECT_NONE;
\r
3761 udpentry_get_value(struct obj_def *od, u16_t len, void *value)
\r
3764 struct udp_pcb *pcb;
\r
3765 struct ip_addr ip;
\r
3769 snmp_oidtoip(&od->id_inst_ptr[1], &ip);
\r
3770 ip.addr = htonl(ip.addr);
\r
3771 port = od->id_inst_ptr[5];
\r
3774 while ((pcb != NULL) &&
\r
3775 !((pcb->local_ip.addr == ip.addr) &&
\r
3776 (pcb->local_port == port)))
\r
3783 id = od->id_inst_ptr[0];
\r
3786 case 1: /* udpLocalAddress */
\r
3788 struct ip_addr *dst = value;
\r
3789 *dst = pcb->local_ip;
\r
3792 case 2: /* udpLocalPort */
\r
3794 s32_t *sint_ptr = value;
\r
3795 *sint_ptr = pcb->local_port;
\r
3803 snmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
\r
3805 /* return to object name, adding index depth (1) */
\r
3808 if (ident_len == 2)
\r
3812 od->id_inst_len = ident_len;
\r
3813 od->id_inst_ptr = ident;
\r
3818 case 1: /* snmpInPkts */
\r
3819 case 2: /* snmpOutPkts */
\r
3820 case 3: /* snmpInBadVersions */
\r
3821 case 4: /* snmpInBadCommunityNames */
\r
3822 case 5: /* snmpInBadCommunityUses */
\r
3823 case 6: /* snmpInASNParseErrs */
\r
3824 case 8: /* snmpInTooBigs */
\r
3825 case 9: /* snmpInNoSuchNames */
\r
3826 case 10: /* snmpInBadValues */
\r
3827 case 11: /* snmpInReadOnlys */
\r
3828 case 12: /* snmpInGenErrs */
\r
3829 case 13: /* snmpInTotalReqVars */
\r
3830 case 14: /* snmpInTotalSetVars */
\r
3831 case 15: /* snmpInGetRequests */
\r
3832 case 16: /* snmpInGetNexts */
\r
3833 case 17: /* snmpInSetRequests */
\r
3834 case 18: /* snmpInGetResponses */
\r
3835 case 19: /* snmpInTraps */
\r
3836 case 20: /* snmpOutTooBigs */
\r
3837 case 21: /* snmpOutNoSuchNames */
\r
3838 case 22: /* snmpOutBadValues */
\r
3839 case 24: /* snmpOutGenErrs */
\r
3840 case 25: /* snmpOutGetRequests */
\r
3841 case 26: /* snmpOutGetNexts */
\r
3842 case 27: /* snmpOutSetRequests */
\r
3843 case 28: /* snmpOutGetResponses */
\r
3844 case 29: /* snmpOutTraps */
\r
3845 od->instance = MIB_OBJECT_SCALAR;
\r
3846 od->access = MIB_OBJECT_READ_ONLY;
\r
3847 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
\r
3848 od->v_len = sizeof(u32_t);
\r
3850 case 30: /* snmpEnableAuthenTraps */
\r
3851 od->instance = MIB_OBJECT_SCALAR;
\r
3852 od->access = MIB_OBJECT_READ_WRITE;
\r
3853 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
\r
3854 od->v_len = sizeof(s32_t);
\r
3857 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_get_object_def: no such object\n"));
\r
3858 od->instance = MIB_OBJECT_NONE;
\r
3864 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_get_object_def: no scalar\n"));
\r
3865 od->instance = MIB_OBJECT_NONE;
\r
3870 snmp_get_value(struct obj_def *od, u16_t len, void *value)
\r
3872 u32_t *uint_ptr = value;
\r
3876 id = od->id_inst_ptr[0];
\r
3879 case 1: /* snmpInPkts */
\r
3880 *uint_ptr = snmpinpkts;
\r
3882 case 2: /* snmpOutPkts */
\r
3883 *uint_ptr = snmpoutpkts;
\r
3885 case 3: /* snmpInBadVersions */
\r
3886 *uint_ptr = snmpinbadversions;
\r
3888 case 4: /* snmpInBadCommunityNames */
\r
3889 *uint_ptr = snmpinbadcommunitynames;
\r
3891 case 5: /* snmpInBadCommunityUses */
\r
3892 *uint_ptr = snmpinbadcommunityuses;
\r
3894 case 6: /* snmpInASNParseErrs */
\r
3895 *uint_ptr = snmpinasnparseerrs;
\r
3897 case 8: /* snmpInTooBigs */
\r
3898 *uint_ptr = snmpintoobigs;
\r
3900 case 9: /* snmpInNoSuchNames */
\r
3901 *uint_ptr = snmpinnosuchnames;
\r
3903 case 10: /* snmpInBadValues */
\r
3904 *uint_ptr = snmpinbadvalues;
\r
3906 case 11: /* snmpInReadOnlys */
\r
3907 *uint_ptr = snmpinreadonlys;
\r
3909 case 12: /* snmpInGenErrs */
\r
3910 *uint_ptr = snmpingenerrs;
\r
3912 case 13: /* snmpInTotalReqVars */
\r
3913 *uint_ptr = snmpintotalreqvars;
\r
3915 case 14: /* snmpInTotalSetVars */
\r
3916 *uint_ptr = snmpintotalsetvars;
\r
3918 case 15: /* snmpInGetRequests */
\r
3919 *uint_ptr = snmpingetrequests;
\r
3921 case 16: /* snmpInGetNexts */
\r
3922 *uint_ptr = snmpingetnexts;
\r
3924 case 17: /* snmpInSetRequests */
\r
3925 *uint_ptr = snmpinsetrequests;
\r
3927 case 18: /* snmpInGetResponses */
\r
3928 *uint_ptr = snmpingetresponses;
\r
3930 case 19: /* snmpInTraps */
\r
3931 *uint_ptr = snmpintraps;
\r
3933 case 20: /* snmpOutTooBigs */
\r
3934 *uint_ptr = snmpouttoobigs;
\r
3936 case 21: /* snmpOutNoSuchNames */
\r
3937 *uint_ptr = snmpoutnosuchnames;
\r
3939 case 22: /* snmpOutBadValues */
\r
3940 *uint_ptr = snmpoutbadvalues;
\r
3942 case 24: /* snmpOutGenErrs */
\r
3943 *uint_ptr = snmpoutgenerrs;
\r
3945 case 25: /* snmpOutGetRequests */
\r
3946 *uint_ptr = snmpoutgetrequests;
\r
3948 case 26: /* snmpOutGetNexts */
\r
3949 *uint_ptr = snmpoutgetnexts;
\r
3951 case 27: /* snmpOutSetRequests */
\r
3952 *uint_ptr = snmpoutsetrequests;
\r
3954 case 28: /* snmpOutGetResponses */
\r
3955 *uint_ptr = snmpoutgetresponses;
\r
3957 case 29: /* snmpOutTraps */
\r
3958 *uint_ptr = snmpouttraps;
\r
3960 case 30: /* snmpEnableAuthenTraps */
\r
3961 *uint_ptr = *snmpenableauthentraps_ptr;
\r
3967 * Test snmp object value before setting.
\r
3969 * @param od is the object definition
\r
3970 * @param len return value space (in bytes)
\r
3971 * @param value points to (varbind) space to copy value from.
\r
3974 snmp_set_test(struct obj_def *od, u16_t len, void *value)
\r
3980 id = od->id_inst_ptr[0];
\r
3983 /* snmpEnableAuthenTraps */
\r
3984 s32_t *sint_ptr = value;
\r
3986 if (snmpenableauthentraps_ptr != &snmpenableauthentraps_default)
\r
3988 /* we should have writable non-volatile mem here */
\r
3989 if ((*sint_ptr == 1) || (*sint_ptr == 2))
\r
3996 /* const or hardwired value */
\r
3997 if (*sint_ptr == snmpenableauthentraps_default)
\r
4007 snmp_set_value(struct obj_def *od, u16_t len, void *value)
\r
4012 id = od->id_inst_ptr[0];
\r
4015 /* snmpEnableAuthenTraps */
\r
4016 s32_t *sint_ptr = value;
\r
4017 *snmpenableauthentraps_ptr = *sint_ptr;
\r
4021 #endif /* LWIP_SNMP */
\r