SNMP agent attached to SPI slave

Dependencies:   mbed

Committer:
lorcansmith
Date:
Mon Aug 13 15:07:40 2012 +0000
Revision:
0:2a53a4c3238c
Child:
2:25e12a7fe0aa
v1.1 release includes ioAlarm traps

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lorcansmith 0:2a53a4c3238c 1 /*****************************************************************************
lorcansmith 0:2a53a4c3238c 2 * Field Electronics Ltd
lorcansmith 0:2a53a4c3238c 3 * File: mib2.c
lorcansmith 0:2a53a4c3238c 4 * Reference: Enet_SPI\lwip\core\snmp\mib2.c
lorcansmith 0:2a53a4c3238c 5 * Content: Header file for private MIB tree structures
lorcansmith 0:2a53a4c3238c 6 * Version: 0.2
lorcansmith 0:2a53a4c3238c 7 * System: mbed gnu ompiler
lorcansmith 0:2a53a4c3238c 8 * Target Hardware: mbed LPC1768
lorcansmith 0:2a53a4c3238c 9 * Amendment Record:
lorcansmith 0:2a53a4c3238c 10 * Author: L. Smith for all versions unless otherwise specified
lorcansmith 0:2a53a4c3238c 11 * Initial release
lorcansmith 0:2a53a4c3238c 12 * 0.1 28/11/11: L. Smith
lorcansmith 0:2a53a4c3238c 13 Derived from open source ref'd below. Use SNMP_ENTERPRISE_ID from private_mib.h
lorcansmith 0:2a53a4c3238c 14 * 0.2 03/05/12: L. Smith
lorcansmith 0:2a53a4c3238c 15 Set snmpenableauthentraps_ptr = (u8_t*)&snmpenableauthentraps to make modifiable
lorcansmith 0:2a53a4c3238c 16 *******************************************************************************/
lorcansmith 0:2a53a4c3238c 17 /**
lorcansmith 0:2a53a4c3238c 18 * @file
lorcansmith 0:2a53a4c3238c 19 * Management Information Base II (RFC1213) objects and functions.
lorcansmith 0:2a53a4c3238c 20 *
lorcansmith 0:2a53a4c3238c 21 * @note the object identifiers for this MIB-2 and private MIB tree
lorcansmith 0:2a53a4c3238c 22 * must be kept in sorted ascending order. This to ensure correct getnext operation.
lorcansmith 0:2a53a4c3238c 23 */
lorcansmith 0:2a53a4c3238c 24
lorcansmith 0:2a53a4c3238c 25 /*
lorcansmith 0:2a53a4c3238c 26 * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands.
lorcansmith 0:2a53a4c3238c 27 * All rights reserved.
lorcansmith 0:2a53a4c3238c 28 *
lorcansmith 0:2a53a4c3238c 29 * Redistribution and use in source and binary forms, with or without modification,
lorcansmith 0:2a53a4c3238c 30 * are permitted provided that the following conditions are met:
lorcansmith 0:2a53a4c3238c 31 *
lorcansmith 0:2a53a4c3238c 32 * 1. Redistributions of source code must retain the above copyright notice,
lorcansmith 0:2a53a4c3238c 33 * this list of conditions and the following disclaimer.
lorcansmith 0:2a53a4c3238c 34 * 2. Redistributions in binary form must reproduce the above copyright notice,
lorcansmith 0:2a53a4c3238c 35 * this list of conditions and the following disclaimer in the documentation
lorcansmith 0:2a53a4c3238c 36 * and/or other materials provided with the distribution.
lorcansmith 0:2a53a4c3238c 37 * 3. The name of the author may not be used to endorse or promote products
lorcansmith 0:2a53a4c3238c 38 * derived from this software without specific prior written permission.
lorcansmith 0:2a53a4c3238c 39 *
lorcansmith 0:2a53a4c3238c 40 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
lorcansmith 0:2a53a4c3238c 41 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
lorcansmith 0:2a53a4c3238c 42 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
lorcansmith 0:2a53a4c3238c 43 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
lorcansmith 0:2a53a4c3238c 44 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
lorcansmith 0:2a53a4c3238c 45 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
lorcansmith 0:2a53a4c3238c 46 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
lorcansmith 0:2a53a4c3238c 47 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
lorcansmith 0:2a53a4c3238c 48 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
lorcansmith 0:2a53a4c3238c 49 * OF SUCH DAMAGE.
lorcansmith 0:2a53a4c3238c 50 *
lorcansmith 0:2a53a4c3238c 51 * Author: Christiaan Simons <christiaan.simons@axon.tv>
lorcansmith 0:2a53a4c3238c 52 */
lorcansmith 0:2a53a4c3238c 53
lorcansmith 0:2a53a4c3238c 54 #include "lwip/opt.h"
lorcansmith 0:2a53a4c3238c 55
lorcansmith 0:2a53a4c3238c 56 #if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */
lorcansmith 0:2a53a4c3238c 57
lorcansmith 0:2a53a4c3238c 58 #include "lwip/snmp.h"
lorcansmith 0:2a53a4c3238c 59 #include "lwip/netif.h"
lorcansmith 0:2a53a4c3238c 60 #include "lwip/ip.h"
lorcansmith 0:2a53a4c3238c 61 #include "lwip/ip_frag.h"
lorcansmith 0:2a53a4c3238c 62 #include "lwip/tcp_impl.h"
lorcansmith 0:2a53a4c3238c 63 #include "lwip/udp.h"
lorcansmith 0:2a53a4c3238c 64 #include "lwip/snmp_asn1.h"
lorcansmith 0:2a53a4c3238c 65 #include "lwip/snmp_structs.h"
lorcansmith 0:2a53a4c3238c 66 #include "netif/etharp.h"
lorcansmith 0:2a53a4c3238c 67 #include "private_mib.h"
lorcansmith 0:2a53a4c3238c 68
lorcansmith 0:2a53a4c3238c 69 /**
lorcansmith 0:2a53a4c3238c 70 * IANA assigned enterprise ID for lwIP is 26381
lorcansmith 0:2a53a4c3238c 71 * @see http://www.iana.org/assignments/enterprise-numbers
lorcansmith 0:2a53a4c3238c 72 *
lorcansmith 0:2a53a4c3238c 73 * @note this enterprise ID is assigned to the lwIP project,
lorcansmith 0:2a53a4c3238c 74 * all object identifiers living under this ID are assigned
lorcansmith 0:2a53a4c3238c 75 * by the lwIP maintainers (contact Christiaan Simons)!
lorcansmith 0:2a53a4c3238c 76 * @note don't change this define, use snmp_set_sysobjid()
lorcansmith 0:2a53a4c3238c 77 */
lorcansmith 0:2a53a4c3238c 78 //#define SNMP_ENTERPRISE_ID 26381 // in private_mib.h
lorcansmith 0:2a53a4c3238c 79 #define SNMP_SYSOBJID_LEN 7
lorcansmith 0:2a53a4c3238c 80 #define SNMP_SYSOBJID {1, 3, 6, 1, 4, 1, SNMP_ENTERPRISE_ID}
lorcansmith 0:2a53a4c3238c 81
lorcansmith 0:2a53a4c3238c 82 #ifndef SNMP_SYSSERVICES
lorcansmith 0:2a53a4c3238c 83 // 0x48 as IP_FORWARD = 0. IP_FORWARD = 1 to have the ability to forward IP packets
lorcansmith 0:2a53a4c3238c 84 #define SNMP_SYSSERVICES ((1 << 6) | (1 << 3) | ((IP_FORWARD) << 2))
lorcansmith 0:2a53a4c3238c 85 #endif
lorcansmith 0:2a53a4c3238c 86
lorcansmith 0:2a53a4c3238c 87 #ifndef SNMP_GET_SYSUPTIME
lorcansmith 0:2a53a4c3238c 88 #define SNMP_GET_SYSUPTIME(sysuptime)
lorcansmith 0:2a53a4c3238c 89 #endif
lorcansmith 0:2a53a4c3238c 90
lorcansmith 0:2a53a4c3238c 91 static void system_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 92 static void system_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 93 static u8_t system_set_test(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 94 static void system_set_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 95 static void interfaces_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 96 static void interfaces_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 97 static void ifentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 98 static void ifentry_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 99 #if !SNMP_SAFE_REQUESTS
lorcansmith 0:2a53a4c3238c 100 static u8_t ifentry_set_test (struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 101 static void ifentry_set_value (struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 102 #endif /* SNMP_SAFE_REQUESTS */
lorcansmith 0:2a53a4c3238c 103 static void atentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 104 static void atentry_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 105 static void ip_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 106 static void ip_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 107 static u8_t ip_set_test(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 108 static void ip_addrentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 109 static void ip_addrentry_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 110 static void ip_rteentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 111 static void ip_rteentry_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 112 static void ip_ntomentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 113 static void ip_ntomentry_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 114 static void icmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 115 static void icmp_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 116 #if LWIP_TCP
lorcansmith 0:2a53a4c3238c 117 static void tcp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 118 static void tcp_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 119 #ifdef THIS_SEEMS_UNUSED
lorcansmith 0:2a53a4c3238c 120 static void tcpconnentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 121 static void tcpconnentry_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 122 #endif
lorcansmith 0:2a53a4c3238c 123 #endif
lorcansmith 0:2a53a4c3238c 124 static void udp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 125 static void udp_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 126 static void udpentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 127 static void udpentry_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 128 static void snmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);
lorcansmith 0:2a53a4c3238c 129 static void snmp_get_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 130 static u8_t snmp_set_test(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 131 static void snmp_set_value(struct obj_def *od, u16_t len, void *value);
lorcansmith 0:2a53a4c3238c 132
lorcansmith 0:2a53a4c3238c 133
lorcansmith 0:2a53a4c3238c 134 /* snmp .1.3.6.1.2.1.11 */
lorcansmith 0:2a53a4c3238c 135 const mib_scalar_node snmp_scalar = {
lorcansmith 0:2a53a4c3238c 136 &snmp_get_object_def,
lorcansmith 0:2a53a4c3238c 137 &snmp_get_value,
lorcansmith 0:2a53a4c3238c 138 &snmp_set_test,
lorcansmith 0:2a53a4c3238c 139 &snmp_set_value,
lorcansmith 0:2a53a4c3238c 140 MIB_NODE_SC,
lorcansmith 0:2a53a4c3238c 141 0
lorcansmith 0:2a53a4c3238c 142 };
lorcansmith 0:2a53a4c3238c 143 const s32_t snmp_ids[28] = {
lorcansmith 0:2a53a4c3238c 144 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16,
lorcansmith 0:2a53a4c3238c 145 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30
lorcansmith 0:2a53a4c3238c 146 };
lorcansmith 0:2a53a4c3238c 147 struct mib_node* const snmp_nodes[28] = {
lorcansmith 0:2a53a4c3238c 148 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 149 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 150 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 151 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 152 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 153 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 154 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 155 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 156 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 157 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 158 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 159 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 160 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar,
lorcansmith 0:2a53a4c3238c 161 (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar
lorcansmith 0:2a53a4c3238c 162 };
lorcansmith 0:2a53a4c3238c 163 const struct mib_array_node snmp = {
lorcansmith 0:2a53a4c3238c 164 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 165 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 166 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 167 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 168 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 169 28,
lorcansmith 0:2a53a4c3238c 170 snmp_ids,
lorcansmith 0:2a53a4c3238c 171 snmp_nodes
lorcansmith 0:2a53a4c3238c 172 };
lorcansmith 0:2a53a4c3238c 173
lorcansmith 0:2a53a4c3238c 174 /* dot3 and EtherLike MIB not planned. (transmission .1.3.6.1.2.1.10) */
lorcansmith 0:2a53a4c3238c 175 /* historical (some say hysterical). (cmot .1.3.6.1.2.1.9) */
lorcansmith 0:2a53a4c3238c 176 /* lwIP has no EGP, thus may not implement it. (egp .1.3.6.1.2.1.8) */
lorcansmith 0:2a53a4c3238c 177
lorcansmith 0:2a53a4c3238c 178 /* udp .1.3.6.1.2.1.7 */
lorcansmith 0:2a53a4c3238c 179 /** index root node for udpTable */
lorcansmith 0:2a53a4c3238c 180 struct mib_list_rootnode udp_root = {
lorcansmith 0:2a53a4c3238c 181 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 182 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 183 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 184 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 185 MIB_NODE_LR,
lorcansmith 0:2a53a4c3238c 186 0,
lorcansmith 0:2a53a4c3238c 187 NULL,
lorcansmith 0:2a53a4c3238c 188 NULL,
lorcansmith 0:2a53a4c3238c 189 0
lorcansmith 0:2a53a4c3238c 190 };
lorcansmith 0:2a53a4c3238c 191 const s32_t udpentry_ids[2] = { 1, 2 };
lorcansmith 0:2a53a4c3238c 192 struct mib_node* const udpentry_nodes[2] = {
lorcansmith 0:2a53a4c3238c 193 (struct mib_node*)&udp_root, (struct mib_node*)&udp_root,
lorcansmith 0:2a53a4c3238c 194 };
lorcansmith 0:2a53a4c3238c 195 const struct mib_array_node udpentry = {
lorcansmith 0:2a53a4c3238c 196 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 197 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 198 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 199 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 200 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 201 2,
lorcansmith 0:2a53a4c3238c 202 udpentry_ids,
lorcansmith 0:2a53a4c3238c 203 udpentry_nodes
lorcansmith 0:2a53a4c3238c 204 };
lorcansmith 0:2a53a4c3238c 205
lorcansmith 0:2a53a4c3238c 206 s32_t udptable_id = 1;
lorcansmith 0:2a53a4c3238c 207 struct mib_node* udptable_node = (struct mib_node*)&udpentry;
lorcansmith 0:2a53a4c3238c 208 struct mib_ram_array_node udptable = {
lorcansmith 0:2a53a4c3238c 209 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 210 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 211 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 212 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 213 MIB_NODE_RA,
lorcansmith 0:2a53a4c3238c 214 0,
lorcansmith 0:2a53a4c3238c 215 &udptable_id,
lorcansmith 0:2a53a4c3238c 216 &udptable_node
lorcansmith 0:2a53a4c3238c 217 };
lorcansmith 0:2a53a4c3238c 218
lorcansmith 0:2a53a4c3238c 219 const mib_scalar_node udp_scalar = {
lorcansmith 0:2a53a4c3238c 220 &udp_get_object_def,
lorcansmith 0:2a53a4c3238c 221 &udp_get_value,
lorcansmith 0:2a53a4c3238c 222 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 223 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 224 MIB_NODE_SC,
lorcansmith 0:2a53a4c3238c 225 0
lorcansmith 0:2a53a4c3238c 226 };
lorcansmith 0:2a53a4c3238c 227 const s32_t udp_ids[5] = { 1, 2, 3, 4, 5 };
lorcansmith 0:2a53a4c3238c 228 struct mib_node* const udp_nodes[5] = {
lorcansmith 0:2a53a4c3238c 229 (struct mib_node*)&udp_scalar, (struct mib_node*)&udp_scalar,
lorcansmith 0:2a53a4c3238c 230 (struct mib_node*)&udp_scalar, (struct mib_node*)&udp_scalar,
lorcansmith 0:2a53a4c3238c 231 (struct mib_node*)&udptable
lorcansmith 0:2a53a4c3238c 232 };
lorcansmith 0:2a53a4c3238c 233 const struct mib_array_node udp = {
lorcansmith 0:2a53a4c3238c 234 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 235 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 236 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 237 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 238 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 239 5,
lorcansmith 0:2a53a4c3238c 240 udp_ids,
lorcansmith 0:2a53a4c3238c 241 udp_nodes
lorcansmith 0:2a53a4c3238c 242 };
lorcansmith 0:2a53a4c3238c 243
lorcansmith 0:2a53a4c3238c 244 /* tcp .1.3.6.1.2.1.6 */
lorcansmith 0:2a53a4c3238c 245 #if LWIP_TCP
lorcansmith 0:2a53a4c3238c 246 /* only if the TCP protocol is available may implement this group */
lorcansmith 0:2a53a4c3238c 247 /** index root node for tcpConnTable */
lorcansmith 0:2a53a4c3238c 248 struct mib_list_rootnode tcpconntree_root = {
lorcansmith 0:2a53a4c3238c 249 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 250 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 251 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 252 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 253 MIB_NODE_LR,
lorcansmith 0:2a53a4c3238c 254 0,
lorcansmith 0:2a53a4c3238c 255 NULL,
lorcansmith 0:2a53a4c3238c 256 NULL,
lorcansmith 0:2a53a4c3238c 257 0
lorcansmith 0:2a53a4c3238c 258 };
lorcansmith 0:2a53a4c3238c 259 const s32_t tcpconnentry_ids[5] = { 1, 2, 3, 4, 5 };
lorcansmith 0:2a53a4c3238c 260 struct mib_node* const tcpconnentry_nodes[5] = {
lorcansmith 0:2a53a4c3238c 261 (struct mib_node*)&tcpconntree_root, (struct mib_node*)&tcpconntree_root,
lorcansmith 0:2a53a4c3238c 262 (struct mib_node*)&tcpconntree_root, (struct mib_node*)&tcpconntree_root,
lorcansmith 0:2a53a4c3238c 263 (struct mib_node*)&tcpconntree_root
lorcansmith 0:2a53a4c3238c 264 };
lorcansmith 0:2a53a4c3238c 265 const struct mib_array_node tcpconnentry = {
lorcansmith 0:2a53a4c3238c 266 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 267 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 268 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 269 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 270 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 271 5,
lorcansmith 0:2a53a4c3238c 272 tcpconnentry_ids,
lorcansmith 0:2a53a4c3238c 273 tcpconnentry_nodes
lorcansmith 0:2a53a4c3238c 274 };
lorcansmith 0:2a53a4c3238c 275
lorcansmith 0:2a53a4c3238c 276 s32_t tcpconntable_id = 1;
lorcansmith 0:2a53a4c3238c 277 struct mib_node* tcpconntable_node = (struct mib_node*)&tcpconnentry;
lorcansmith 0:2a53a4c3238c 278 struct mib_ram_array_node tcpconntable = {
lorcansmith 0:2a53a4c3238c 279 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 280 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 281 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 282 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 283 MIB_NODE_RA,
lorcansmith 0:2a53a4c3238c 284 /** @todo update maxlength when inserting / deleting from table
lorcansmith 0:2a53a4c3238c 285 0 when table is empty, 1 when more than one entry */
lorcansmith 0:2a53a4c3238c 286 0,
lorcansmith 0:2a53a4c3238c 287 &tcpconntable_id,
lorcansmith 0:2a53a4c3238c 288 &tcpconntable_node
lorcansmith 0:2a53a4c3238c 289 };
lorcansmith 0:2a53a4c3238c 290
lorcansmith 0:2a53a4c3238c 291 const mib_scalar_node tcp_scalar = {
lorcansmith 0:2a53a4c3238c 292 &tcp_get_object_def,
lorcansmith 0:2a53a4c3238c 293 &tcp_get_value,
lorcansmith 0:2a53a4c3238c 294 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 295 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 296 MIB_NODE_SC,
lorcansmith 0:2a53a4c3238c 297 0
lorcansmith 0:2a53a4c3238c 298 };
lorcansmith 0:2a53a4c3238c 299 const s32_t tcp_ids[15] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
lorcansmith 0:2a53a4c3238c 300 struct mib_node* const tcp_nodes[15] = {
lorcansmith 0:2a53a4c3238c 301 (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar,
lorcansmith 0:2a53a4c3238c 302 (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar,
lorcansmith 0:2a53a4c3238c 303 (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar,
lorcansmith 0:2a53a4c3238c 304 (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar,
lorcansmith 0:2a53a4c3238c 305 (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar,
lorcansmith 0:2a53a4c3238c 306 (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar,
lorcansmith 0:2a53a4c3238c 307 (struct mib_node*)&tcpconntable, (struct mib_node*)&tcp_scalar,
lorcansmith 0:2a53a4c3238c 308 (struct mib_node*)&tcp_scalar
lorcansmith 0:2a53a4c3238c 309 };
lorcansmith 0:2a53a4c3238c 310 const struct mib_array_node tcp = {
lorcansmith 0:2a53a4c3238c 311 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 312 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 313 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 314 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 315 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 316 15,
lorcansmith 0:2a53a4c3238c 317 tcp_ids,
lorcansmith 0:2a53a4c3238c 318 tcp_nodes
lorcansmith 0:2a53a4c3238c 319 };
lorcansmith 0:2a53a4c3238c 320 #endif
lorcansmith 0:2a53a4c3238c 321
lorcansmith 0:2a53a4c3238c 322 /* icmp .1.3.6.1.2.1.5 */
lorcansmith 0:2a53a4c3238c 323 const mib_scalar_node icmp_scalar = {
lorcansmith 0:2a53a4c3238c 324 &icmp_get_object_def,
lorcansmith 0:2a53a4c3238c 325 &icmp_get_value,
lorcansmith 0:2a53a4c3238c 326 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 327 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 328 MIB_NODE_SC,
lorcansmith 0:2a53a4c3238c 329 0
lorcansmith 0:2a53a4c3238c 330 };
lorcansmith 0:2a53a4c3238c 331 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 };
lorcansmith 0:2a53a4c3238c 332 struct mib_node* const icmp_nodes[26] = {
lorcansmith 0:2a53a4c3238c 333 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 334 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 335 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 336 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 337 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 338 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 339 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 340 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 341 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 342 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 343 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 344 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar,
lorcansmith 0:2a53a4c3238c 345 (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar
lorcansmith 0:2a53a4c3238c 346 };
lorcansmith 0:2a53a4c3238c 347 const struct mib_array_node icmp = {
lorcansmith 0:2a53a4c3238c 348 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 349 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 350 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 351 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 352 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 353 26,
lorcansmith 0:2a53a4c3238c 354 icmp_ids,
lorcansmith 0:2a53a4c3238c 355 icmp_nodes
lorcansmith 0:2a53a4c3238c 356 };
lorcansmith 0:2a53a4c3238c 357
lorcansmith 0:2a53a4c3238c 358 /** index root node for ipNetToMediaTable */
lorcansmith 0:2a53a4c3238c 359 struct mib_list_rootnode ipntomtree_root = {
lorcansmith 0:2a53a4c3238c 360 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 361 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 362 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 363 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 364 MIB_NODE_LR,
lorcansmith 0:2a53a4c3238c 365 0,
lorcansmith 0:2a53a4c3238c 366 NULL,
lorcansmith 0:2a53a4c3238c 367 NULL,
lorcansmith 0:2a53a4c3238c 368 0
lorcansmith 0:2a53a4c3238c 369 };
lorcansmith 0:2a53a4c3238c 370 const s32_t ipntomentry_ids[4] = { 1, 2, 3, 4 };
lorcansmith 0:2a53a4c3238c 371 struct mib_node* const ipntomentry_nodes[4] = {
lorcansmith 0:2a53a4c3238c 372 (struct mib_node*)&ipntomtree_root, (struct mib_node*)&ipntomtree_root,
lorcansmith 0:2a53a4c3238c 373 (struct mib_node*)&ipntomtree_root, (struct mib_node*)&ipntomtree_root
lorcansmith 0:2a53a4c3238c 374 };
lorcansmith 0:2a53a4c3238c 375 const struct mib_array_node ipntomentry = {
lorcansmith 0:2a53a4c3238c 376 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 377 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 378 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 379 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 380 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 381 4,
lorcansmith 0:2a53a4c3238c 382 ipntomentry_ids,
lorcansmith 0:2a53a4c3238c 383 ipntomentry_nodes
lorcansmith 0:2a53a4c3238c 384 };
lorcansmith 0:2a53a4c3238c 385
lorcansmith 0:2a53a4c3238c 386 s32_t ipntomtable_id = 1;
lorcansmith 0:2a53a4c3238c 387 struct mib_node* ipntomtable_node = (struct mib_node*)&ipntomentry;
lorcansmith 0:2a53a4c3238c 388 struct mib_ram_array_node ipntomtable = {
lorcansmith 0:2a53a4c3238c 389 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 390 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 391 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 392 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 393 MIB_NODE_RA,
lorcansmith 0:2a53a4c3238c 394 0,
lorcansmith 0:2a53a4c3238c 395 &ipntomtable_id,
lorcansmith 0:2a53a4c3238c 396 &ipntomtable_node
lorcansmith 0:2a53a4c3238c 397 };
lorcansmith 0:2a53a4c3238c 398
lorcansmith 0:2a53a4c3238c 399 /** index root node for ipRouteTable */
lorcansmith 0:2a53a4c3238c 400 struct mib_list_rootnode iprtetree_root = {
lorcansmith 0:2a53a4c3238c 401 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 402 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 403 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 404 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 405 MIB_NODE_LR,
lorcansmith 0:2a53a4c3238c 406 0,
lorcansmith 0:2a53a4c3238c 407 NULL,
lorcansmith 0:2a53a4c3238c 408 NULL,
lorcansmith 0:2a53a4c3238c 409 0
lorcansmith 0:2a53a4c3238c 410 };
lorcansmith 0:2a53a4c3238c 411 const s32_t iprteentry_ids[13] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
lorcansmith 0:2a53a4c3238c 412 struct mib_node* const iprteentry_nodes[13] = {
lorcansmith 0:2a53a4c3238c 413 (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root,
lorcansmith 0:2a53a4c3238c 414 (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root,
lorcansmith 0:2a53a4c3238c 415 (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root,
lorcansmith 0:2a53a4c3238c 416 (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root,
lorcansmith 0:2a53a4c3238c 417 (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root,
lorcansmith 0:2a53a4c3238c 418 (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root,
lorcansmith 0:2a53a4c3238c 419 (struct mib_node*)&iprtetree_root
lorcansmith 0:2a53a4c3238c 420 };
lorcansmith 0:2a53a4c3238c 421 const struct mib_array_node iprteentry = {
lorcansmith 0:2a53a4c3238c 422 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 423 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 424 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 425 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 426 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 427 13,
lorcansmith 0:2a53a4c3238c 428 iprteentry_ids,
lorcansmith 0:2a53a4c3238c 429 iprteentry_nodes
lorcansmith 0:2a53a4c3238c 430 };
lorcansmith 0:2a53a4c3238c 431
lorcansmith 0:2a53a4c3238c 432 s32_t iprtetable_id = 1;
lorcansmith 0:2a53a4c3238c 433 struct mib_node* iprtetable_node = (struct mib_node*)&iprteentry;
lorcansmith 0:2a53a4c3238c 434 struct mib_ram_array_node iprtetable = {
lorcansmith 0:2a53a4c3238c 435 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 436 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 437 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 438 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 439 MIB_NODE_RA,
lorcansmith 0:2a53a4c3238c 440 0,
lorcansmith 0:2a53a4c3238c 441 &iprtetable_id,
lorcansmith 0:2a53a4c3238c 442 &iprtetable_node
lorcansmith 0:2a53a4c3238c 443 };
lorcansmith 0:2a53a4c3238c 444
lorcansmith 0:2a53a4c3238c 445 /** index root node for ipAddrTable */
lorcansmith 0:2a53a4c3238c 446 struct mib_list_rootnode ipaddrtree_root = {
lorcansmith 0:2a53a4c3238c 447 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 448 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 449 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 450 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 451 MIB_NODE_LR,
lorcansmith 0:2a53a4c3238c 452 0,
lorcansmith 0:2a53a4c3238c 453 NULL,
lorcansmith 0:2a53a4c3238c 454 NULL,
lorcansmith 0:2a53a4c3238c 455 0
lorcansmith 0:2a53a4c3238c 456 };
lorcansmith 0:2a53a4c3238c 457 const s32_t ipaddrentry_ids[5] = { 1, 2, 3, 4, 5 };
lorcansmith 0:2a53a4c3238c 458 struct mib_node* const ipaddrentry_nodes[5] = {
lorcansmith 0:2a53a4c3238c 459 (struct mib_node*)&ipaddrtree_root,
lorcansmith 0:2a53a4c3238c 460 (struct mib_node*)&ipaddrtree_root,
lorcansmith 0:2a53a4c3238c 461 (struct mib_node*)&ipaddrtree_root,
lorcansmith 0:2a53a4c3238c 462 (struct mib_node*)&ipaddrtree_root,
lorcansmith 0:2a53a4c3238c 463 (struct mib_node*)&ipaddrtree_root
lorcansmith 0:2a53a4c3238c 464 };
lorcansmith 0:2a53a4c3238c 465 const struct mib_array_node ipaddrentry = {
lorcansmith 0:2a53a4c3238c 466 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 467 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 468 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 469 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 470 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 471 5,
lorcansmith 0:2a53a4c3238c 472 ipaddrentry_ids,
lorcansmith 0:2a53a4c3238c 473 ipaddrentry_nodes
lorcansmith 0:2a53a4c3238c 474 };
lorcansmith 0:2a53a4c3238c 475
lorcansmith 0:2a53a4c3238c 476 s32_t ipaddrtable_id = 1;
lorcansmith 0:2a53a4c3238c 477 struct mib_node* ipaddrtable_node = (struct mib_node*)&ipaddrentry;
lorcansmith 0:2a53a4c3238c 478 struct mib_ram_array_node ipaddrtable = {
lorcansmith 0:2a53a4c3238c 479 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 480 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 481 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 482 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 483 MIB_NODE_RA,
lorcansmith 0:2a53a4c3238c 484 0,
lorcansmith 0:2a53a4c3238c 485 &ipaddrtable_id,
lorcansmith 0:2a53a4c3238c 486 &ipaddrtable_node
lorcansmith 0:2a53a4c3238c 487 };
lorcansmith 0:2a53a4c3238c 488
lorcansmith 0:2a53a4c3238c 489 /* ip .1.3.6.1.2.1.4 */
lorcansmith 0:2a53a4c3238c 490 const mib_scalar_node ip_scalar = {
lorcansmith 0:2a53a4c3238c 491 &ip_get_object_def,
lorcansmith 0:2a53a4c3238c 492 &ip_get_value,
lorcansmith 0:2a53a4c3238c 493 &ip_set_test,
lorcansmith 0:2a53a4c3238c 494 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 495 MIB_NODE_SC,
lorcansmith 0:2a53a4c3238c 496 0
lorcansmith 0:2a53a4c3238c 497 };
lorcansmith 0:2a53a4c3238c 498 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 };
lorcansmith 0:2a53a4c3238c 499 struct mib_node* const ip_nodes[23] = {
lorcansmith 0:2a53a4c3238c 500 (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar,
lorcansmith 0:2a53a4c3238c 501 (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar,
lorcansmith 0:2a53a4c3238c 502 (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar,
lorcansmith 0:2a53a4c3238c 503 (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar,
lorcansmith 0:2a53a4c3238c 504 (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar,
lorcansmith 0:2a53a4c3238c 505 (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar,
lorcansmith 0:2a53a4c3238c 506 (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar,
lorcansmith 0:2a53a4c3238c 507 (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar,
lorcansmith 0:2a53a4c3238c 508 (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar,
lorcansmith 0:2a53a4c3238c 509 (struct mib_node*)&ip_scalar, (struct mib_node*)&ipaddrtable,
lorcansmith 0:2a53a4c3238c 510 (struct mib_node*)&iprtetable, (struct mib_node*)&ipntomtable,
lorcansmith 0:2a53a4c3238c 511 (struct mib_node*)&ip_scalar
lorcansmith 0:2a53a4c3238c 512 };
lorcansmith 0:2a53a4c3238c 513 const struct mib_array_node mib2_ip = {
lorcansmith 0:2a53a4c3238c 514 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 515 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 516 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 517 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 518 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 519 23,
lorcansmith 0:2a53a4c3238c 520 ip_ids,
lorcansmith 0:2a53a4c3238c 521 ip_nodes
lorcansmith 0:2a53a4c3238c 522 };
lorcansmith 0:2a53a4c3238c 523
lorcansmith 0:2a53a4c3238c 524 /** index root node for atTable */
lorcansmith 0:2a53a4c3238c 525 struct mib_list_rootnode arptree_root = {
lorcansmith 0:2a53a4c3238c 526 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 527 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 528 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 529 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 530 MIB_NODE_LR,
lorcansmith 0:2a53a4c3238c 531 0,
lorcansmith 0:2a53a4c3238c 532 NULL,
lorcansmith 0:2a53a4c3238c 533 NULL,
lorcansmith 0:2a53a4c3238c 534 0
lorcansmith 0:2a53a4c3238c 535 };
lorcansmith 0:2a53a4c3238c 536 const s32_t atentry_ids[3] = { 1, 2, 3 };
lorcansmith 0:2a53a4c3238c 537 struct mib_node* const atentry_nodes[3] = {
lorcansmith 0:2a53a4c3238c 538 (struct mib_node*)&arptree_root,
lorcansmith 0:2a53a4c3238c 539 (struct mib_node*)&arptree_root,
lorcansmith 0:2a53a4c3238c 540 (struct mib_node*)&arptree_root
lorcansmith 0:2a53a4c3238c 541 };
lorcansmith 0:2a53a4c3238c 542 const struct mib_array_node atentry = {
lorcansmith 0:2a53a4c3238c 543 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 544 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 545 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 546 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 547 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 548 3,
lorcansmith 0:2a53a4c3238c 549 atentry_ids,
lorcansmith 0:2a53a4c3238c 550 atentry_nodes
lorcansmith 0:2a53a4c3238c 551 };
lorcansmith 0:2a53a4c3238c 552
lorcansmith 0:2a53a4c3238c 553 const s32_t attable_id = 1;
lorcansmith 0:2a53a4c3238c 554 struct mib_node* const attable_node = (struct mib_node*)&atentry;
lorcansmith 0:2a53a4c3238c 555 const struct mib_array_node attable = {
lorcansmith 0:2a53a4c3238c 556 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 557 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 558 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 559 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 560 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 561 1,
lorcansmith 0:2a53a4c3238c 562 &attable_id,
lorcansmith 0:2a53a4c3238c 563 &attable_node
lorcansmith 0:2a53a4c3238c 564 };
lorcansmith 0:2a53a4c3238c 565
lorcansmith 0:2a53a4c3238c 566 /* at .1.3.6.1.2.1.3 */
lorcansmith 0:2a53a4c3238c 567 s32_t at_id = 1;
lorcansmith 0:2a53a4c3238c 568 struct mib_node* mib2_at_node = (struct mib_node*)&attable;
lorcansmith 0:2a53a4c3238c 569 struct mib_ram_array_node at = {
lorcansmith 0:2a53a4c3238c 570 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 571 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 572 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 573 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 574 MIB_NODE_RA,
lorcansmith 0:2a53a4c3238c 575 0,
lorcansmith 0:2a53a4c3238c 576 &at_id,
lorcansmith 0:2a53a4c3238c 577 &mib2_at_node
lorcansmith 0:2a53a4c3238c 578 };
lorcansmith 0:2a53a4c3238c 579
lorcansmith 0:2a53a4c3238c 580 /** index root node for ifTable */
lorcansmith 0:2a53a4c3238c 581 struct mib_list_rootnode iflist_root = {
lorcansmith 0:2a53a4c3238c 582 &ifentry_get_object_def,
lorcansmith 0:2a53a4c3238c 583 &ifentry_get_value,
lorcansmith 0:2a53a4c3238c 584 #if SNMP_SAFE_REQUESTS
lorcansmith 0:2a53a4c3238c 585 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 586 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 587 #else /* SNMP_SAFE_REQUESTS */
lorcansmith 0:2a53a4c3238c 588 &ifentry_set_test,
lorcansmith 0:2a53a4c3238c 589 &ifentry_set_value,
lorcansmith 0:2a53a4c3238c 590 #endif /* SNMP_SAFE_REQUESTS */
lorcansmith 0:2a53a4c3238c 591 MIB_NODE_LR,
lorcansmith 0:2a53a4c3238c 592 0,
lorcansmith 0:2a53a4c3238c 593 NULL,
lorcansmith 0:2a53a4c3238c 594 NULL,
lorcansmith 0:2a53a4c3238c 595 0
lorcansmith 0:2a53a4c3238c 596 };
lorcansmith 0:2a53a4c3238c 597 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 };
lorcansmith 0:2a53a4c3238c 598 struct mib_node* const ifentry_nodes[22] = {
lorcansmith 0:2a53a4c3238c 599 (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root,
lorcansmith 0:2a53a4c3238c 600 (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root,
lorcansmith 0:2a53a4c3238c 601 (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root,
lorcansmith 0:2a53a4c3238c 602 (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root,
lorcansmith 0:2a53a4c3238c 603 (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root,
lorcansmith 0:2a53a4c3238c 604 (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root,
lorcansmith 0:2a53a4c3238c 605 (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root,
lorcansmith 0:2a53a4c3238c 606 (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root,
lorcansmith 0:2a53a4c3238c 607 (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root,
lorcansmith 0:2a53a4c3238c 608 (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root,
lorcansmith 0:2a53a4c3238c 609 (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root
lorcansmith 0:2a53a4c3238c 610 };
lorcansmith 0:2a53a4c3238c 611 const struct mib_array_node ifentry = {
lorcansmith 0:2a53a4c3238c 612 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 613 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 614 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 615 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 616 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 617 22,
lorcansmith 0:2a53a4c3238c 618 ifentry_ids,
lorcansmith 0:2a53a4c3238c 619 ifentry_nodes
lorcansmith 0:2a53a4c3238c 620 };
lorcansmith 0:2a53a4c3238c 621
lorcansmith 0:2a53a4c3238c 622 s32_t iftable_id = 1;
lorcansmith 0:2a53a4c3238c 623 struct mib_node* iftable_node = (struct mib_node*)&ifentry;
lorcansmith 0:2a53a4c3238c 624 struct mib_ram_array_node iftable = {
lorcansmith 0:2a53a4c3238c 625 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 626 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 627 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 628 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 629 MIB_NODE_RA,
lorcansmith 0:2a53a4c3238c 630 0,
lorcansmith 0:2a53a4c3238c 631 &iftable_id,
lorcansmith 0:2a53a4c3238c 632 &iftable_node
lorcansmith 0:2a53a4c3238c 633 };
lorcansmith 0:2a53a4c3238c 634
lorcansmith 0:2a53a4c3238c 635 /* interfaces .1.3.6.1.2.1.2 */
lorcansmith 0:2a53a4c3238c 636 const mib_scalar_node interfaces_scalar = {
lorcansmith 0:2a53a4c3238c 637 &interfaces_get_object_def,
lorcansmith 0:2a53a4c3238c 638 &interfaces_get_value,
lorcansmith 0:2a53a4c3238c 639 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 640 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 641 MIB_NODE_SC,
lorcansmith 0:2a53a4c3238c 642 0
lorcansmith 0:2a53a4c3238c 643 };
lorcansmith 0:2a53a4c3238c 644 const s32_t interfaces_ids[2] = { 1, 2 };
lorcansmith 0:2a53a4c3238c 645 struct mib_node* const interfaces_nodes[2] = {
lorcansmith 0:2a53a4c3238c 646 (struct mib_node*)&interfaces_scalar, (struct mib_node*)&iftable
lorcansmith 0:2a53a4c3238c 647 };
lorcansmith 0:2a53a4c3238c 648 const struct mib_array_node interfaces = {
lorcansmith 0:2a53a4c3238c 649 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 650 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 651 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 652 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 653 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 654 2,
lorcansmith 0:2a53a4c3238c 655 interfaces_ids,
lorcansmith 0:2a53a4c3238c 656 interfaces_nodes
lorcansmith 0:2a53a4c3238c 657 };
lorcansmith 0:2a53a4c3238c 658
lorcansmith 0:2a53a4c3238c 659
lorcansmith 0:2a53a4c3238c 660 /* 0 1 2 3 4 5 6 */
lorcansmith 0:2a53a4c3238c 661 /* system .1.3.6.1.2.1.1 */
lorcansmith 0:2a53a4c3238c 662 const mib_scalar_node sys_tem_scalar = {
lorcansmith 0:2a53a4c3238c 663 &system_get_object_def,
lorcansmith 0:2a53a4c3238c 664 &system_get_value,
lorcansmith 0:2a53a4c3238c 665 &system_set_test,
lorcansmith 0:2a53a4c3238c 666 &system_set_value,
lorcansmith 0:2a53a4c3238c 667 MIB_NODE_SC,
lorcansmith 0:2a53a4c3238c 668 0
lorcansmith 0:2a53a4c3238c 669 };
lorcansmith 0:2a53a4c3238c 670 const s32_t sys_tem_ids[7] = { 1, 2, 3, 4, 5, 6, 7 };
lorcansmith 0:2a53a4c3238c 671 struct mib_node* const sys_tem_nodes[7] = {
lorcansmith 0:2a53a4c3238c 672 (struct mib_node*)&sys_tem_scalar, (struct mib_node*)&sys_tem_scalar,
lorcansmith 0:2a53a4c3238c 673 (struct mib_node*)&sys_tem_scalar, (struct mib_node*)&sys_tem_scalar,
lorcansmith 0:2a53a4c3238c 674 (struct mib_node*)&sys_tem_scalar, (struct mib_node*)&sys_tem_scalar,
lorcansmith 0:2a53a4c3238c 675 (struct mib_node*)&sys_tem_scalar
lorcansmith 0:2a53a4c3238c 676 };
lorcansmith 0:2a53a4c3238c 677 /* work around name issue with 'sys_tem', some compiler(s?) seem to reserve 'system' */
lorcansmith 0:2a53a4c3238c 678 const struct mib_array_node sys_tem = {
lorcansmith 0:2a53a4c3238c 679 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 680 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 681 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 682 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 683 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 684 7,
lorcansmith 0:2a53a4c3238c 685 sys_tem_ids,
lorcansmith 0:2a53a4c3238c 686 sys_tem_nodes
lorcansmith 0:2a53a4c3238c 687 };
lorcansmith 0:2a53a4c3238c 688
lorcansmith 0:2a53a4c3238c 689 /* mib-2 .1.3.6.1.2.1 */
lorcansmith 0:2a53a4c3238c 690 #if LWIP_TCP
lorcansmith 0:2a53a4c3238c 691 #define MIB2_GROUPS 8
lorcansmith 0:2a53a4c3238c 692 #else
lorcansmith 0:2a53a4c3238c 693 #define MIB2_GROUPS 7
lorcansmith 0:2a53a4c3238c 694 #endif
lorcansmith 0:2a53a4c3238c 695 const s32_t mib2_ids[MIB2_GROUPS] =
lorcansmith 0:2a53a4c3238c 696 {
lorcansmith 0:2a53a4c3238c 697 1,
lorcansmith 0:2a53a4c3238c 698 2,
lorcansmith 0:2a53a4c3238c 699 3,
lorcansmith 0:2a53a4c3238c 700 4,
lorcansmith 0:2a53a4c3238c 701 5,
lorcansmith 0:2a53a4c3238c 702 #if LWIP_TCP
lorcansmith 0:2a53a4c3238c 703 6,
lorcansmith 0:2a53a4c3238c 704 #endif
lorcansmith 0:2a53a4c3238c 705 7,
lorcansmith 0:2a53a4c3238c 706 11
lorcansmith 0:2a53a4c3238c 707 };
lorcansmith 0:2a53a4c3238c 708 struct mib_node* const mib2_nodes[MIB2_GROUPS] = {
lorcansmith 0:2a53a4c3238c 709 (struct mib_node*)&sys_tem,
lorcansmith 0:2a53a4c3238c 710 (struct mib_node*)&interfaces,
lorcansmith 0:2a53a4c3238c 711 (struct mib_node*)&at,
lorcansmith 0:2a53a4c3238c 712 (struct mib_node*)&mib2_ip,
lorcansmith 0:2a53a4c3238c 713 (struct mib_node*)&icmp,
lorcansmith 0:2a53a4c3238c 714 #if LWIP_TCP
lorcansmith 0:2a53a4c3238c 715 (struct mib_node*)&tcp,
lorcansmith 0:2a53a4c3238c 716 #endif
lorcansmith 0:2a53a4c3238c 717 (struct mib_node*)&udp,
lorcansmith 0:2a53a4c3238c 718 (struct mib_node*)&snmp
lorcansmith 0:2a53a4c3238c 719 };
lorcansmith 0:2a53a4c3238c 720
lorcansmith 0:2a53a4c3238c 721 const struct mib_array_node mib2 = {
lorcansmith 0:2a53a4c3238c 722 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 723 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 724 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 725 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 726 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 727 MIB2_GROUPS,
lorcansmith 0:2a53a4c3238c 728 mib2_ids,
lorcansmith 0:2a53a4c3238c 729 mib2_nodes
lorcansmith 0:2a53a4c3238c 730 };
lorcansmith 0:2a53a4c3238c 731
lorcansmith 0:2a53a4c3238c 732 /* mgmt .1.3.6.1.2 */
lorcansmith 0:2a53a4c3238c 733 const s32_t mgmt_ids[1] = { 1 };
lorcansmith 0:2a53a4c3238c 734 struct mib_node* const mgmt_nodes[1] = { (struct mib_node*)&mib2 };
lorcansmith 0:2a53a4c3238c 735 const struct mib_array_node mgmt = {
lorcansmith 0:2a53a4c3238c 736 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 737 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 738 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 739 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 740 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 741 1,
lorcansmith 0:2a53a4c3238c 742 mgmt_ids,
lorcansmith 0:2a53a4c3238c 743 mgmt_nodes
lorcansmith 0:2a53a4c3238c 744 };
lorcansmith 0:2a53a4c3238c 745
lorcansmith 0:2a53a4c3238c 746 /* internet .1.3.6.1 */
lorcansmith 0:2a53a4c3238c 747 //#if SNMP_PRIVATE_MIB
lorcansmith 0:2a53a4c3238c 748 /* When using a private MIB, you have to create a file 'private_mib.h' that contains
lorcansmith 0:2a53a4c3238c 749 * a 'struct mib_array_node mib_private' which contains your MIB. */
lorcansmith 0:2a53a4c3238c 750 s32_t internet_ids[2] = { 2, 4 };
lorcansmith 0:2a53a4c3238c 751 struct mib_node* const internet_nodes[2] = { (struct mib_node*)&mgmt, (struct mib_node*)&mib_private };
lorcansmith 0:2a53a4c3238c 752 const struct mib_array_node internet = {
lorcansmith 0:2a53a4c3238c 753 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 754 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 755 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 756 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 757 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 758 2,
lorcansmith 0:2a53a4c3238c 759 internet_ids,
lorcansmith 0:2a53a4c3238c 760 internet_nodes
lorcansmith 0:2a53a4c3238c 761 };
lorcansmith 0:2a53a4c3238c 762 /*#else
lorcansmith 0:2a53a4c3238c 763 const s32_t internet_ids[1] = { 2 };
lorcansmith 0:2a53a4c3238c 764 struct mib_node* const internet_nodes[1] = { (struct mib_node*)&mgmt };
lorcansmith 0:2a53a4c3238c 765 const struct mib_array_node internet = {
lorcansmith 0:2a53a4c3238c 766 &noleafs_get_object_def,
lorcansmith 0:2a53a4c3238c 767 &noleafs_get_value,
lorcansmith 0:2a53a4c3238c 768 &noleafs_set_test,
lorcansmith 0:2a53a4c3238c 769 &noleafs_set_value,
lorcansmith 0:2a53a4c3238c 770 MIB_NODE_AR,
lorcansmith 0:2a53a4c3238c 771 1,
lorcansmith 0:2a53a4c3238c 772 internet_ids,
lorcansmith 0:2a53a4c3238c 773 internet_nodes
lorcansmith 0:2a53a4c3238c 774 };
lorcansmith 0:2a53a4c3238c 775 #endif
lorcansmith 0:2a53a4c3238c 776 */
lorcansmith 0:2a53a4c3238c 777 /** mib-2.system.sysObjectID */
lorcansmith 0:2a53a4c3238c 778 static struct snmp_obj_id sysobjid = {SNMP_SYSOBJID_LEN, SNMP_SYSOBJID};
lorcansmith 0:2a53a4c3238c 779 /** enterprise ID for generic TRAPs, .iso.org.dod.internet.mgmt.mib-2.snmp */
lorcansmith 0:2a53a4c3238c 780 static struct snmp_obj_id snmpgrp_id = {7,{1,3,6,1,2,1,11}};
lorcansmith 0:2a53a4c3238c 781 /** mib-2.system.sysServices */
lorcansmith 0:2a53a4c3238c 782 static const s32_t sysservices = SNMP_SYSSERVICES;
lorcansmith 0:2a53a4c3238c 783
lorcansmith 0:2a53a4c3238c 784 /** mib-2.system.sysDescr */
lorcansmith 0:2a53a4c3238c 785 static const u8_t sysdescr_len_default = 30;
lorcansmith 0:2a53a4c3238c 786 static const u8_t sysdescr_default[] = "Multi-channel signal processor";
lorcansmith 0:2a53a4c3238c 787 static u8_t* sysdescr_len_ptr = (u8_t*)&sysdescr_len_default;
lorcansmith 0:2a53a4c3238c 788 static u8_t* sysdescr_ptr = (u8_t*)&sysdescr_default[0];
lorcansmith 0:2a53a4c3238c 789 /** mib-2.system.sysContact */
lorcansmith 0:2a53a4c3238c 790 static const u8_t syscontact_len_default = 10;
lorcansmith 0:2a53a4c3238c 791 static const u8_t syscontact_default[] = "Lee Awcock";
lorcansmith 0:2a53a4c3238c 792 static u8_t* syscontact_len_ptr = (u8_t*)&syscontact_len_default;
lorcansmith 0:2a53a4c3238c 793 static u8_t* syscontact_ptr = (u8_t*)&syscontact_default[0];
lorcansmith 0:2a53a4c3238c 794 /** mib-2.system.sysName */
lorcansmith 0:2a53a4c3238c 795 static const u8_t sysname_len_default = 10;
lorcansmith 0:2a53a4c3238c 796 static const u8_t sysname_default[] = "Field 3000";
lorcansmith 0:2a53a4c3238c 797 static u8_t* sysname_len_ptr = (u8_t*)&sysname_len_default;
lorcansmith 0:2a53a4c3238c 798 static u8_t* sysname_ptr = (u8_t*)&sysname_default[0];
lorcansmith 0:2a53a4c3238c 799 /** mib-2.system.sysLocation */
lorcansmith 0:2a53a4c3238c 800 static const u8_t syslocation_len_default = 2;
lorcansmith 0:2a53a4c3238c 801 const u8_t syslocation_default[] = "UK";
lorcansmith 0:2a53a4c3238c 802 static u8_t* syslocation_len_ptr = (u8_t*)&syslocation_len_default;
lorcansmith 0:2a53a4c3238c 803 static u8_t* syslocation_ptr = (u8_t*)&syslocation_default[0];
lorcansmith 0:2a53a4c3238c 804
lorcansmith 0:2a53a4c3238c 805 /** mib-2.snmp.snmpEnableAuthenTraps */
lorcansmith 0:2a53a4c3238c 806 static const u8_t snmpenableauthentraps_default = 2; /* disabled */
lorcansmith 0:2a53a4c3238c 807 static u8_t snmpenableauthentraps = 2; /* v0.2: Add variable:disabled */
lorcansmith 0:2a53a4c3238c 808 static u8_t* snmpenableauthentraps_ptr = (u8_t*)&snmpenableauthentraps; // v0.2: point to variable
lorcansmith 0:2a53a4c3238c 809
lorcansmith 0:2a53a4c3238c 810 /** mib-2.interfaces.ifTable.ifEntry.ifSpecific (zeroDotZero) */
lorcansmith 0:2a53a4c3238c 811 static const struct snmp_obj_id ifspecific = {2, {0, 0}};
lorcansmith 0:2a53a4c3238c 812 /** mib-2.ip.ipRouteTable.ipRouteEntry.ipRouteInfo (zeroDotZero) */
lorcansmith 0:2a53a4c3238c 813 static const struct snmp_obj_id iprouteinfo = {2, {0, 0}};
lorcansmith 0:2a53a4c3238c 814
lorcansmith 0:2a53a4c3238c 815
lorcansmith 0:2a53a4c3238c 816
lorcansmith 0:2a53a4c3238c 817 /* mib-2.system counter(s) */
lorcansmith 0:2a53a4c3238c 818 static u32_t sysuptime = 0;
lorcansmith 0:2a53a4c3238c 819
lorcansmith 0:2a53a4c3238c 820 /* mib-2.ip counter(s) */
lorcansmith 0:2a53a4c3238c 821 static u32_t ipinreceives = 0,
lorcansmith 0:2a53a4c3238c 822 ipinhdrerrors = 0,
lorcansmith 0:2a53a4c3238c 823 ipinaddrerrors = 0,
lorcansmith 0:2a53a4c3238c 824 ipforwdatagrams = 0,
lorcansmith 0:2a53a4c3238c 825 ipinunknownprotos = 0,
lorcansmith 0:2a53a4c3238c 826 ipindiscards = 0,
lorcansmith 0:2a53a4c3238c 827 ipindelivers = 0,
lorcansmith 0:2a53a4c3238c 828 ipoutrequests = 0,
lorcansmith 0:2a53a4c3238c 829 ipoutdiscards = 0,
lorcansmith 0:2a53a4c3238c 830 ipoutnoroutes = 0,
lorcansmith 0:2a53a4c3238c 831 ipreasmreqds = 0,
lorcansmith 0:2a53a4c3238c 832 ipreasmoks = 0,
lorcansmith 0:2a53a4c3238c 833 ipreasmfails = 0,
lorcansmith 0:2a53a4c3238c 834 ipfragoks = 0,
lorcansmith 0:2a53a4c3238c 835 ipfragfails = 0,
lorcansmith 0:2a53a4c3238c 836 ipfragcreates = 0,
lorcansmith 0:2a53a4c3238c 837 iproutingdiscards = 0;
lorcansmith 0:2a53a4c3238c 838 /* mib-2.icmp counter(s) */
lorcansmith 0:2a53a4c3238c 839 static u32_t icmpinmsgs = 0,
lorcansmith 0:2a53a4c3238c 840 icmpinerrors = 0,
lorcansmith 0:2a53a4c3238c 841 icmpindestunreachs = 0,
lorcansmith 0:2a53a4c3238c 842 icmpintimeexcds = 0,
lorcansmith 0:2a53a4c3238c 843 icmpinparmprobs = 0,
lorcansmith 0:2a53a4c3238c 844 icmpinsrcquenchs = 0,
lorcansmith 0:2a53a4c3238c 845 icmpinredirects = 0,
lorcansmith 0:2a53a4c3238c 846 icmpinechos = 0,
lorcansmith 0:2a53a4c3238c 847 icmpinechoreps = 0,
lorcansmith 0:2a53a4c3238c 848 icmpintimestamps = 0,
lorcansmith 0:2a53a4c3238c 849 icmpintimestampreps = 0,
lorcansmith 0:2a53a4c3238c 850 icmpinaddrmasks = 0,
lorcansmith 0:2a53a4c3238c 851 icmpinaddrmaskreps = 0,
lorcansmith 0:2a53a4c3238c 852 icmpoutmsgs = 0,
lorcansmith 0:2a53a4c3238c 853 icmpouterrors = 0,
lorcansmith 0:2a53a4c3238c 854 icmpoutdestunreachs = 0,
lorcansmith 0:2a53a4c3238c 855 icmpouttimeexcds = 0,
lorcansmith 0:2a53a4c3238c 856 icmpoutparmprobs = 0,
lorcansmith 0:2a53a4c3238c 857 icmpoutsrcquenchs = 0,
lorcansmith 0:2a53a4c3238c 858 icmpoutredirects = 0,
lorcansmith 0:2a53a4c3238c 859 icmpoutechos = 0,
lorcansmith 0:2a53a4c3238c 860 icmpoutechoreps = 0,
lorcansmith 0:2a53a4c3238c 861 icmpouttimestamps = 0,
lorcansmith 0:2a53a4c3238c 862 icmpouttimestampreps = 0,
lorcansmith 0:2a53a4c3238c 863 icmpoutaddrmasks = 0,
lorcansmith 0:2a53a4c3238c 864 icmpoutaddrmaskreps = 0;
lorcansmith 0:2a53a4c3238c 865 /* mib-2.tcp counter(s) */
lorcansmith 0:2a53a4c3238c 866 static u32_t tcpactiveopens = 0,
lorcansmith 0:2a53a4c3238c 867 tcppassiveopens = 0,
lorcansmith 0:2a53a4c3238c 868 tcpattemptfails = 0,
lorcansmith 0:2a53a4c3238c 869 tcpestabresets = 0,
lorcansmith 0:2a53a4c3238c 870 tcpinsegs = 0,
lorcansmith 0:2a53a4c3238c 871 tcpoutsegs = 0,
lorcansmith 0:2a53a4c3238c 872 tcpretranssegs = 0,
lorcansmith 0:2a53a4c3238c 873 tcpinerrs = 0,
lorcansmith 0:2a53a4c3238c 874 tcpoutrsts = 0;
lorcansmith 0:2a53a4c3238c 875 /* mib-2.udp counter(s) */
lorcansmith 0:2a53a4c3238c 876 static u32_t udpindatagrams = 0,
lorcansmith 0:2a53a4c3238c 877 udpnoports = 0,
lorcansmith 0:2a53a4c3238c 878 udpinerrors = 0,
lorcansmith 0:2a53a4c3238c 879 udpoutdatagrams = 0;
lorcansmith 0:2a53a4c3238c 880 /* mib-2.snmp counter(s) */
lorcansmith 0:2a53a4c3238c 881 static u32_t snmpinpkts = 0,
lorcansmith 0:2a53a4c3238c 882 snmpoutpkts = 0,
lorcansmith 0:2a53a4c3238c 883 snmpinbadversions = 0,
lorcansmith 0:2a53a4c3238c 884 snmpinbadcommunitynames = 0,
lorcansmith 0:2a53a4c3238c 885 snmpinbadcommunityuses = 0,
lorcansmith 0:2a53a4c3238c 886 snmpinasnparseerrs = 0,
lorcansmith 0:2a53a4c3238c 887 snmpintoobigs = 0,
lorcansmith 0:2a53a4c3238c 888 snmpinnosuchnames = 0,
lorcansmith 0:2a53a4c3238c 889 snmpinbadvalues = 0,
lorcansmith 0:2a53a4c3238c 890 snmpinreadonlys = 0,
lorcansmith 0:2a53a4c3238c 891 snmpingenerrs = 0,
lorcansmith 0:2a53a4c3238c 892 snmpintotalreqvars = 0,
lorcansmith 0:2a53a4c3238c 893 snmpintotalsetvars = 0,
lorcansmith 0:2a53a4c3238c 894 snmpingetrequests = 0,
lorcansmith 0:2a53a4c3238c 895 snmpingetnexts = 0,
lorcansmith 0:2a53a4c3238c 896 snmpinsetrequests = 0,
lorcansmith 0:2a53a4c3238c 897 snmpingetresponses = 0,
lorcansmith 0:2a53a4c3238c 898 snmpintraps = 0,
lorcansmith 0:2a53a4c3238c 899 snmpouttoobigs = 0,
lorcansmith 0:2a53a4c3238c 900 snmpoutnosuchnames = 0,
lorcansmith 0:2a53a4c3238c 901 snmpoutbadvalues = 0,
lorcansmith 0:2a53a4c3238c 902 snmpoutgenerrs = 0,
lorcansmith 0:2a53a4c3238c 903 snmpoutgetrequests = 0,
lorcansmith 0:2a53a4c3238c 904 snmpoutgetnexts = 0,
lorcansmith 0:2a53a4c3238c 905 snmpoutsetrequests = 0,
lorcansmith 0:2a53a4c3238c 906 snmpoutgetresponses = 0,
lorcansmith 0:2a53a4c3238c 907 snmpouttraps = 0;
lorcansmith 0:2a53a4c3238c 908
lorcansmith 0:2a53a4c3238c 909
lorcansmith 0:2a53a4c3238c 910
lorcansmith 0:2a53a4c3238c 911 /* prototypes of the following functions are in lwip/src/include/lwip/snmp.h */
lorcansmith 0:2a53a4c3238c 912 /**
lorcansmith 0:2a53a4c3238c 913 * Copy octet string.
lorcansmith 0:2a53a4c3238c 914 *
lorcansmith 0:2a53a4c3238c 915 * @param dst points to destination
lorcansmith 0:2a53a4c3238c 916 * @param src points to source
lorcansmith 0:2a53a4c3238c 917 * @param n number of octets to copy.
lorcansmith 0:2a53a4c3238c 918 */
lorcansmith 0:2a53a4c3238c 919 static void ocstrncpy(u8_t *dst, u8_t *src, u16_t n)
lorcansmith 0:2a53a4c3238c 920 {
lorcansmith 0:2a53a4c3238c 921 u16_t i = n;
lorcansmith 0:2a53a4c3238c 922 while (i > 0) {
lorcansmith 0:2a53a4c3238c 923 i--;
lorcansmith 0:2a53a4c3238c 924 *dst++ = *src++;
lorcansmith 0:2a53a4c3238c 925 }
lorcansmith 0:2a53a4c3238c 926 }
lorcansmith 0:2a53a4c3238c 927
lorcansmith 0:2a53a4c3238c 928 /**
lorcansmith 0:2a53a4c3238c 929 * Copy object identifier (s32_t) array.
lorcansmith 0:2a53a4c3238c 930 *
lorcansmith 0:2a53a4c3238c 931 * @param dst points to destination
lorcansmith 0:2a53a4c3238c 932 * @param src points to source
lorcansmith 0:2a53a4c3238c 933 * @param n number of sub identifiers to copy.
lorcansmith 0:2a53a4c3238c 934 */
lorcansmith 0:2a53a4c3238c 935 void objectidncpy(s32_t *dst, s32_t *src, u8_t n)
lorcansmith 0:2a53a4c3238c 936 {
lorcansmith 0:2a53a4c3238c 937 u8_t i = n;
lorcansmith 0:2a53a4c3238c 938 while(i > 0) {
lorcansmith 0:2a53a4c3238c 939 i--;
lorcansmith 0:2a53a4c3238c 940 *dst++ = *src++;
lorcansmith 0:2a53a4c3238c 941 }
lorcansmith 0:2a53a4c3238c 942 }
lorcansmith 0:2a53a4c3238c 943
lorcansmith 0:2a53a4c3238c 944 /**
lorcansmith 0:2a53a4c3238c 945 * Initializes sysDescr pointers.
lorcansmith 0:2a53a4c3238c 946 *
lorcansmith 0:2a53a4c3238c 947 * @param str if non-NULL then copy str pointer
lorcansmith 0:2a53a4c3238c 948 * @param len points to string length, excluding zero terminator
lorcansmith 0:2a53a4c3238c 949 */
lorcansmith 0:2a53a4c3238c 950 void snmp_set_sysdesr(u8_t *str, u8_t *len)
lorcansmith 0:2a53a4c3238c 951 {
lorcansmith 0:2a53a4c3238c 952 if (str != NULL)
lorcansmith 0:2a53a4c3238c 953 {
lorcansmith 0:2a53a4c3238c 954 sysdescr_ptr = str;
lorcansmith 0:2a53a4c3238c 955 sysdescr_len_ptr = len;
lorcansmith 0:2a53a4c3238c 956 }
lorcansmith 0:2a53a4c3238c 957 }
lorcansmith 0:2a53a4c3238c 958
lorcansmith 0:2a53a4c3238c 959 void snmp_get_sysobjid_ptr(struct snmp_obj_id **oid)
lorcansmith 0:2a53a4c3238c 960 {
lorcansmith 0:2a53a4c3238c 961 *oid = &sysobjid;
lorcansmith 0:2a53a4c3238c 962 }
lorcansmith 0:2a53a4c3238c 963
lorcansmith 0:2a53a4c3238c 964 /**
lorcansmith 0:2a53a4c3238c 965 * Initializes sysObjectID value.
lorcansmith 0:2a53a4c3238c 966 *
lorcansmith 0:2a53a4c3238c 967 * @param oid points to stuct snmp_obj_id to copy
lorcansmith 0:2a53a4c3238c 968 */
lorcansmith 0:2a53a4c3238c 969 void snmp_set_sysobjid(struct snmp_obj_id *oid)
lorcansmith 0:2a53a4c3238c 970 {
lorcansmith 0:2a53a4c3238c 971 sysobjid = *oid;
lorcansmith 0:2a53a4c3238c 972 }
lorcansmith 0:2a53a4c3238c 973
lorcansmith 0:2a53a4c3238c 974 /**
lorcansmith 0:2a53a4c3238c 975 * Must be called at regular 10 msec interval from a timer interrupt
lorcansmith 0:2a53a4c3238c 976 * or signal handler depending on your runtime environment.
lorcansmith 0:2a53a4c3238c 977 */
lorcansmith 0:2a53a4c3238c 978 void snmp_inc_sysuptime(void)
lorcansmith 0:2a53a4c3238c 979 {
lorcansmith 0:2a53a4c3238c 980 sysuptime++;
lorcansmith 0:2a53a4c3238c 981 }
lorcansmith 0:2a53a4c3238c 982
lorcansmith 0:2a53a4c3238c 983 void snmp_add_sysuptime(u32_t value)
lorcansmith 0:2a53a4c3238c 984 {
lorcansmith 0:2a53a4c3238c 985 sysuptime+=value;
lorcansmith 0:2a53a4c3238c 986 }
lorcansmith 0:2a53a4c3238c 987
lorcansmith 0:2a53a4c3238c 988 void snmp_get_sysuptime(u32_t *value)
lorcansmith 0:2a53a4c3238c 989 {
lorcansmith 0:2a53a4c3238c 990 SNMP_GET_SYSUPTIME(sysuptime);
lorcansmith 0:2a53a4c3238c 991 *value = sysuptime;
lorcansmith 0:2a53a4c3238c 992 }
lorcansmith 0:2a53a4c3238c 993
lorcansmith 0:2a53a4c3238c 994 /**
lorcansmith 0:2a53a4c3238c 995 * Initializes sysContact pointers,
lorcansmith 0:2a53a4c3238c 996 * e.g. ptrs to non-volatile memory external to lwIP.
lorcansmith 0:2a53a4c3238c 997 *
lorcansmith 0:2a53a4c3238c 998 * @param ocstr if non-NULL then copy str pointer
lorcansmith 0:2a53a4c3238c 999 * @param ocstrlen points to string length, excluding zero terminator
lorcansmith 0:2a53a4c3238c 1000 */
lorcansmith 0:2a53a4c3238c 1001 void snmp_set_syscontact(u8_t *ocstr, u8_t *ocstrlen)
lorcansmith 0:2a53a4c3238c 1002 {
lorcansmith 0:2a53a4c3238c 1003 if (ocstr != NULL)
lorcansmith 0:2a53a4c3238c 1004 {
lorcansmith 0:2a53a4c3238c 1005 syscontact_ptr = ocstr;
lorcansmith 0:2a53a4c3238c 1006 syscontact_len_ptr = ocstrlen;
lorcansmith 0:2a53a4c3238c 1007 }
lorcansmith 0:2a53a4c3238c 1008 }
lorcansmith 0:2a53a4c3238c 1009
lorcansmith 0:2a53a4c3238c 1010 /**
lorcansmith 0:2a53a4c3238c 1011 * Initializes sysName pointers,
lorcansmith 0:2a53a4c3238c 1012 * e.g. ptrs to non-volatile memory external to lwIP.
lorcansmith 0:2a53a4c3238c 1013 *
lorcansmith 0:2a53a4c3238c 1014 * @param ocstr if non-NULL then copy str pointer
lorcansmith 0:2a53a4c3238c 1015 * @param ocstrlen points to string length, excluding zero terminator
lorcansmith 0:2a53a4c3238c 1016 */
lorcansmith 0:2a53a4c3238c 1017 void snmp_set_sysname(u8_t *ocstr, u8_t *ocstrlen)
lorcansmith 0:2a53a4c3238c 1018 {
lorcansmith 0:2a53a4c3238c 1019 if (ocstr != NULL)
lorcansmith 0:2a53a4c3238c 1020 {
lorcansmith 0:2a53a4c3238c 1021 sysname_ptr = ocstr;
lorcansmith 0:2a53a4c3238c 1022 sysname_len_ptr = ocstrlen;
lorcansmith 0:2a53a4c3238c 1023 }
lorcansmith 0:2a53a4c3238c 1024 }
lorcansmith 0:2a53a4c3238c 1025
lorcansmith 0:2a53a4c3238c 1026 /**
lorcansmith 0:2a53a4c3238c 1027 * Initializes sysLocation pointers,
lorcansmith 0:2a53a4c3238c 1028 * e.g. ptrs to non-volatile memory external to lwIP.
lorcansmith 0:2a53a4c3238c 1029 *
lorcansmith 0:2a53a4c3238c 1030 * @param ocstr if non-NULL then copy str pointer
lorcansmith 0:2a53a4c3238c 1031 * @param ocstrlen points to string length, excluding zero terminator
lorcansmith 0:2a53a4c3238c 1032 */
lorcansmith 0:2a53a4c3238c 1033 void snmp_set_syslocation(u8_t *ocstr, u8_t *ocstrlen)
lorcansmith 0:2a53a4c3238c 1034 {
lorcansmith 0:2a53a4c3238c 1035 if (ocstr != NULL)
lorcansmith 0:2a53a4c3238c 1036 {
lorcansmith 0:2a53a4c3238c 1037 syslocation_ptr = ocstr;
lorcansmith 0:2a53a4c3238c 1038 syslocation_len_ptr = ocstrlen;
lorcansmith 0:2a53a4c3238c 1039 }
lorcansmith 0:2a53a4c3238c 1040 }
lorcansmith 0:2a53a4c3238c 1041
lorcansmith 0:2a53a4c3238c 1042
lorcansmith 0:2a53a4c3238c 1043 void snmp_add_ifinoctets(struct netif *ni, u32_t value)
lorcansmith 0:2a53a4c3238c 1044 {
lorcansmith 0:2a53a4c3238c 1045 ni->ifinoctets += value;
lorcansmith 0:2a53a4c3238c 1046 }
lorcansmith 0:2a53a4c3238c 1047
lorcansmith 0:2a53a4c3238c 1048 void snmp_inc_ifinucastpkts(struct netif *ni)
lorcansmith 0:2a53a4c3238c 1049 {
lorcansmith 0:2a53a4c3238c 1050 (ni->ifinucastpkts)++;
lorcansmith 0:2a53a4c3238c 1051 }
lorcansmith 0:2a53a4c3238c 1052
lorcansmith 0:2a53a4c3238c 1053 void snmp_inc_ifinnucastpkts(struct netif *ni)
lorcansmith 0:2a53a4c3238c 1054 {
lorcansmith 0:2a53a4c3238c 1055 (ni->ifinnucastpkts)++;
lorcansmith 0:2a53a4c3238c 1056 }
lorcansmith 0:2a53a4c3238c 1057
lorcansmith 0:2a53a4c3238c 1058 void snmp_inc_ifindiscards(struct netif *ni)
lorcansmith 0:2a53a4c3238c 1059 {
lorcansmith 0:2a53a4c3238c 1060 (ni->ifindiscards)++;
lorcansmith 0:2a53a4c3238c 1061 }
lorcansmith 0:2a53a4c3238c 1062
lorcansmith 0:2a53a4c3238c 1063 void snmp_add_ifoutoctets(struct netif *ni, u32_t value)
lorcansmith 0:2a53a4c3238c 1064 {
lorcansmith 0:2a53a4c3238c 1065 ni->ifoutoctets += value;
lorcansmith 0:2a53a4c3238c 1066 }
lorcansmith 0:2a53a4c3238c 1067
lorcansmith 0:2a53a4c3238c 1068 void snmp_inc_ifoutucastpkts(struct netif *ni)
lorcansmith 0:2a53a4c3238c 1069 {
lorcansmith 0:2a53a4c3238c 1070 (ni->ifoutucastpkts)++;
lorcansmith 0:2a53a4c3238c 1071 }
lorcansmith 0:2a53a4c3238c 1072
lorcansmith 0:2a53a4c3238c 1073 void snmp_inc_ifoutnucastpkts(struct netif *ni)
lorcansmith 0:2a53a4c3238c 1074 {
lorcansmith 0:2a53a4c3238c 1075 (ni->ifoutnucastpkts)++;
lorcansmith 0:2a53a4c3238c 1076 }
lorcansmith 0:2a53a4c3238c 1077
lorcansmith 0:2a53a4c3238c 1078 void snmp_inc_ifoutdiscards(struct netif *ni)
lorcansmith 0:2a53a4c3238c 1079 {
lorcansmith 0:2a53a4c3238c 1080 (ni->ifoutdiscards)++;
lorcansmith 0:2a53a4c3238c 1081 }
lorcansmith 0:2a53a4c3238c 1082
lorcansmith 0:2a53a4c3238c 1083 void snmp_inc_iflist(void)
lorcansmith 0:2a53a4c3238c 1084 {
lorcansmith 0:2a53a4c3238c 1085 struct mib_list_node *if_node = NULL;
lorcansmith 0:2a53a4c3238c 1086
lorcansmith 0:2a53a4c3238c 1087 snmp_mib_node_insert(&iflist_root, iflist_root.count + 1, &if_node);
lorcansmith 0:2a53a4c3238c 1088 /* enable getnext traversal on filled table */
lorcansmith 0:2a53a4c3238c 1089 iftable.maxlength = 1;
lorcansmith 0:2a53a4c3238c 1090 }
lorcansmith 0:2a53a4c3238c 1091
lorcansmith 0:2a53a4c3238c 1092 void snmp_dec_iflist(void)
lorcansmith 0:2a53a4c3238c 1093 {
lorcansmith 0:2a53a4c3238c 1094 snmp_mib_node_delete(&iflist_root, iflist_root.tail);
lorcansmith 0:2a53a4c3238c 1095 /* disable getnext traversal on empty table */
lorcansmith 0:2a53a4c3238c 1096 if(iflist_root.count == 0) iftable.maxlength = 0;
lorcansmith 0:2a53a4c3238c 1097 }
lorcansmith 0:2a53a4c3238c 1098
lorcansmith 0:2a53a4c3238c 1099 /**
lorcansmith 0:2a53a4c3238c 1100 * Inserts ARP table indexes (.xIfIndex.xNetAddress)
lorcansmith 0:2a53a4c3238c 1101 * into arp table index trees (both atTable and ipNetToMediaTable).
lorcansmith 0:2a53a4c3238c 1102 */
lorcansmith 0:2a53a4c3238c 1103 void snmp_insert_arpidx_tree(struct netif *ni, ip_addr_t *ip)
lorcansmith 0:2a53a4c3238c 1104 {
lorcansmith 0:2a53a4c3238c 1105 struct mib_list_rootnode *at_rn;
lorcansmith 0:2a53a4c3238c 1106 struct mib_list_node *at_node;
lorcansmith 0:2a53a4c3238c 1107 s32_t arpidx[5];
lorcansmith 0:2a53a4c3238c 1108 u8_t level, tree;
lorcansmith 0:2a53a4c3238c 1109
lorcansmith 0:2a53a4c3238c 1110 LWIP_ASSERT("ni != NULL", ni != NULL);
lorcansmith 0:2a53a4c3238c 1111 snmp_netiftoifindex(ni, &arpidx[0]);
lorcansmith 0:2a53a4c3238c 1112 snmp_iptooid(ip, &arpidx[1]);
lorcansmith 0:2a53a4c3238c 1113
lorcansmith 0:2a53a4c3238c 1114 for (tree = 0; tree < 2; tree++)
lorcansmith 0:2a53a4c3238c 1115 {
lorcansmith 0:2a53a4c3238c 1116 if (tree == 0)
lorcansmith 0:2a53a4c3238c 1117 {
lorcansmith 0:2a53a4c3238c 1118 at_rn = &arptree_root;
lorcansmith 0:2a53a4c3238c 1119 }
lorcansmith 0:2a53a4c3238c 1120 else
lorcansmith 0:2a53a4c3238c 1121 {
lorcansmith 0:2a53a4c3238c 1122 at_rn = &ipntomtree_root;
lorcansmith 0:2a53a4c3238c 1123 }
lorcansmith 0:2a53a4c3238c 1124 for (level = 0; level < 5; level++)
lorcansmith 0:2a53a4c3238c 1125 {
lorcansmith 0:2a53a4c3238c 1126 at_node = NULL;
lorcansmith 0:2a53a4c3238c 1127 snmp_mib_node_insert(at_rn, arpidx[level], &at_node);
lorcansmith 0:2a53a4c3238c 1128 if ((level != 4) && (at_node != NULL))
lorcansmith 0:2a53a4c3238c 1129 {
lorcansmith 0:2a53a4c3238c 1130 if (at_node->nptr == NULL)
lorcansmith 0:2a53a4c3238c 1131 {
lorcansmith 0:2a53a4c3238c 1132 at_rn = snmp_mib_lrn_alloc();
lorcansmith 0:2a53a4c3238c 1133 at_node->nptr = (struct mib_node*)at_rn;
lorcansmith 0:2a53a4c3238c 1134 if (at_rn != NULL)
lorcansmith 0:2a53a4c3238c 1135 {
lorcansmith 0:2a53a4c3238c 1136 if (level == 3)
lorcansmith 0:2a53a4c3238c 1137 {
lorcansmith 0:2a53a4c3238c 1138 if (tree == 0)
lorcansmith 0:2a53a4c3238c 1139 {
lorcansmith 0:2a53a4c3238c 1140 at_rn->get_object_def = atentry_get_object_def;
lorcansmith 0:2a53a4c3238c 1141 at_rn->get_value = atentry_get_value;
lorcansmith 0:2a53a4c3238c 1142 }
lorcansmith 0:2a53a4c3238c 1143 else
lorcansmith 0:2a53a4c3238c 1144 {
lorcansmith 0:2a53a4c3238c 1145 at_rn->get_object_def = ip_ntomentry_get_object_def;
lorcansmith 0:2a53a4c3238c 1146 at_rn->get_value = ip_ntomentry_get_value;
lorcansmith 0:2a53a4c3238c 1147 }
lorcansmith 0:2a53a4c3238c 1148 at_rn->set_test = noleafs_set_test;
lorcansmith 0:2a53a4c3238c 1149 at_rn->set_value = noleafs_set_value;
lorcansmith 0:2a53a4c3238c 1150 }
lorcansmith 0:2a53a4c3238c 1151 }
lorcansmith 0:2a53a4c3238c 1152 else
lorcansmith 0:2a53a4c3238c 1153 {
lorcansmith 0:2a53a4c3238c 1154 /* at_rn == NULL, malloc failure */
lorcansmith 0:2a53a4c3238c 1155 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_arpidx_tree() insert failed, mem full"));
lorcansmith 0:2a53a4c3238c 1156 break;
lorcansmith 0:2a53a4c3238c 1157 }
lorcansmith 0:2a53a4c3238c 1158 }
lorcansmith 0:2a53a4c3238c 1159 else
lorcansmith 0:2a53a4c3238c 1160 {
lorcansmith 0:2a53a4c3238c 1161 at_rn = (struct mib_list_rootnode*)at_node->nptr;
lorcansmith 0:2a53a4c3238c 1162 }
lorcansmith 0:2a53a4c3238c 1163 }
lorcansmith 0:2a53a4c3238c 1164 }
lorcansmith 0:2a53a4c3238c 1165 }
lorcansmith 0:2a53a4c3238c 1166 /* enable getnext traversal on filled tables */
lorcansmith 0:2a53a4c3238c 1167 at.maxlength = 1;
lorcansmith 0:2a53a4c3238c 1168 ipntomtable.maxlength = 1;
lorcansmith 0:2a53a4c3238c 1169 }
lorcansmith 0:2a53a4c3238c 1170
lorcansmith 0:2a53a4c3238c 1171 /**
lorcansmith 0:2a53a4c3238c 1172 * Removes ARP table indexes (.xIfIndex.xNetAddress)
lorcansmith 0:2a53a4c3238c 1173 * from arp table index trees.
lorcansmith 0:2a53a4c3238c 1174 */
lorcansmith 0:2a53a4c3238c 1175 void snmp_delete_arpidx_tree(struct netif *ni, ip_addr_t *ip)
lorcansmith 0:2a53a4c3238c 1176 {
lorcansmith 0:2a53a4c3238c 1177 struct mib_list_rootnode *at_rn, *next, *del_rn[5];
lorcansmith 0:2a53a4c3238c 1178 struct mib_list_node *at_n, *del_n[5];
lorcansmith 0:2a53a4c3238c 1179 s32_t arpidx[5];
lorcansmith 0:2a53a4c3238c 1180 u8_t fc, tree, level, del_cnt;
lorcansmith 0:2a53a4c3238c 1181
lorcansmith 0:2a53a4c3238c 1182 snmp_netiftoifindex(ni, &arpidx[0]);
lorcansmith 0:2a53a4c3238c 1183 snmp_iptooid(ip, &arpidx[1]);
lorcansmith 0:2a53a4c3238c 1184
lorcansmith 0:2a53a4c3238c 1185 for (tree = 0; tree < 2; tree++)
lorcansmith 0:2a53a4c3238c 1186 {
lorcansmith 0:2a53a4c3238c 1187 /* mark nodes for deletion */
lorcansmith 0:2a53a4c3238c 1188 if (tree == 0)
lorcansmith 0:2a53a4c3238c 1189 {
lorcansmith 0:2a53a4c3238c 1190 at_rn = &arptree_root;
lorcansmith 0:2a53a4c3238c 1191 }
lorcansmith 0:2a53a4c3238c 1192 else
lorcansmith 0:2a53a4c3238c 1193 {
lorcansmith 0:2a53a4c3238c 1194 at_rn = &ipntomtree_root;
lorcansmith 0:2a53a4c3238c 1195 }
lorcansmith 0:2a53a4c3238c 1196 level = 0;
lorcansmith 0:2a53a4c3238c 1197 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1198 while ((level < 5) && (at_rn != NULL))
lorcansmith 0:2a53a4c3238c 1199 {
lorcansmith 0:2a53a4c3238c 1200 fc = snmp_mib_node_find(at_rn, arpidx[level], &at_n);
lorcansmith 0:2a53a4c3238c 1201 if (fc == 0)
lorcansmith 0:2a53a4c3238c 1202 {
lorcansmith 0:2a53a4c3238c 1203 /* arpidx[level] does not exist */
lorcansmith 0:2a53a4c3238c 1204 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1205 at_rn = NULL;
lorcansmith 0:2a53a4c3238c 1206 }
lorcansmith 0:2a53a4c3238c 1207 else if (fc == 1)
lorcansmith 0:2a53a4c3238c 1208 {
lorcansmith 0:2a53a4c3238c 1209 del_rn[del_cnt] = at_rn;
lorcansmith 0:2a53a4c3238c 1210 del_n[del_cnt] = at_n;
lorcansmith 0:2a53a4c3238c 1211 del_cnt++;
lorcansmith 0:2a53a4c3238c 1212 at_rn = (struct mib_list_rootnode*)(at_n->nptr);
lorcansmith 0:2a53a4c3238c 1213 }
lorcansmith 0:2a53a4c3238c 1214 else if (fc == 2)
lorcansmith 0:2a53a4c3238c 1215 {
lorcansmith 0:2a53a4c3238c 1216 /* reset delete (2 or more childs) */
lorcansmith 0:2a53a4c3238c 1217 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1218 at_rn = (struct mib_list_rootnode*)(at_n->nptr);
lorcansmith 0:2a53a4c3238c 1219 }
lorcansmith 0:2a53a4c3238c 1220 level++;
lorcansmith 0:2a53a4c3238c 1221 }
lorcansmith 0:2a53a4c3238c 1222 /* delete marked index nodes */
lorcansmith 0:2a53a4c3238c 1223 while (del_cnt > 0)
lorcansmith 0:2a53a4c3238c 1224 {
lorcansmith 0:2a53a4c3238c 1225 del_cnt--;
lorcansmith 0:2a53a4c3238c 1226
lorcansmith 0:2a53a4c3238c 1227 at_rn = del_rn[del_cnt];
lorcansmith 0:2a53a4c3238c 1228 at_n = del_n[del_cnt];
lorcansmith 0:2a53a4c3238c 1229
lorcansmith 0:2a53a4c3238c 1230 next = snmp_mib_node_delete(at_rn, at_n);
lorcansmith 0:2a53a4c3238c 1231 if (next != NULL)
lorcansmith 0:2a53a4c3238c 1232 {
lorcansmith 0:2a53a4c3238c 1233 LWIP_ASSERT("next_count == 0",next->count == 0);
lorcansmith 0:2a53a4c3238c 1234 snmp_mib_lrn_free(next);
lorcansmith 0:2a53a4c3238c 1235 }
lorcansmith 0:2a53a4c3238c 1236 }
lorcansmith 0:2a53a4c3238c 1237 }
lorcansmith 0:2a53a4c3238c 1238 /* disable getnext traversal on empty tables */
lorcansmith 0:2a53a4c3238c 1239 if(arptree_root.count == 0) at.maxlength = 0;
lorcansmith 0:2a53a4c3238c 1240 if(ipntomtree_root.count == 0) ipntomtable.maxlength = 0;
lorcansmith 0:2a53a4c3238c 1241 }
lorcansmith 0:2a53a4c3238c 1242
lorcansmith 0:2a53a4c3238c 1243 void snmp_inc_ipinreceives(void)
lorcansmith 0:2a53a4c3238c 1244 {
lorcansmith 0:2a53a4c3238c 1245 ipinreceives++;
lorcansmith 0:2a53a4c3238c 1246 }
lorcansmith 0:2a53a4c3238c 1247
lorcansmith 0:2a53a4c3238c 1248 void snmp_inc_ipinhdrerrors(void)
lorcansmith 0:2a53a4c3238c 1249 {
lorcansmith 0:2a53a4c3238c 1250 ipinhdrerrors++;
lorcansmith 0:2a53a4c3238c 1251 }
lorcansmith 0:2a53a4c3238c 1252
lorcansmith 0:2a53a4c3238c 1253 void snmp_inc_ipinaddrerrors(void)
lorcansmith 0:2a53a4c3238c 1254 {
lorcansmith 0:2a53a4c3238c 1255 ipinaddrerrors++;
lorcansmith 0:2a53a4c3238c 1256 }
lorcansmith 0:2a53a4c3238c 1257
lorcansmith 0:2a53a4c3238c 1258 void snmp_inc_ipforwdatagrams(void)
lorcansmith 0:2a53a4c3238c 1259 {
lorcansmith 0:2a53a4c3238c 1260 ipforwdatagrams++;
lorcansmith 0:2a53a4c3238c 1261 }
lorcansmith 0:2a53a4c3238c 1262
lorcansmith 0:2a53a4c3238c 1263 void snmp_inc_ipinunknownprotos(void)
lorcansmith 0:2a53a4c3238c 1264 {
lorcansmith 0:2a53a4c3238c 1265 ipinunknownprotos++;
lorcansmith 0:2a53a4c3238c 1266 }
lorcansmith 0:2a53a4c3238c 1267
lorcansmith 0:2a53a4c3238c 1268 void snmp_inc_ipindiscards(void)
lorcansmith 0:2a53a4c3238c 1269 {
lorcansmith 0:2a53a4c3238c 1270 ipindiscards++;
lorcansmith 0:2a53a4c3238c 1271 }
lorcansmith 0:2a53a4c3238c 1272
lorcansmith 0:2a53a4c3238c 1273 void snmp_inc_ipindelivers(void)
lorcansmith 0:2a53a4c3238c 1274 {
lorcansmith 0:2a53a4c3238c 1275 ipindelivers++;
lorcansmith 0:2a53a4c3238c 1276 }
lorcansmith 0:2a53a4c3238c 1277
lorcansmith 0:2a53a4c3238c 1278 void snmp_inc_ipoutrequests(void)
lorcansmith 0:2a53a4c3238c 1279 {
lorcansmith 0:2a53a4c3238c 1280 ipoutrequests++;
lorcansmith 0:2a53a4c3238c 1281 }
lorcansmith 0:2a53a4c3238c 1282
lorcansmith 0:2a53a4c3238c 1283 void snmp_inc_ipoutdiscards(void)
lorcansmith 0:2a53a4c3238c 1284 {
lorcansmith 0:2a53a4c3238c 1285 ipoutdiscards++;
lorcansmith 0:2a53a4c3238c 1286 }
lorcansmith 0:2a53a4c3238c 1287
lorcansmith 0:2a53a4c3238c 1288 void snmp_inc_ipoutnoroutes(void)
lorcansmith 0:2a53a4c3238c 1289 {
lorcansmith 0:2a53a4c3238c 1290 ipoutnoroutes++;
lorcansmith 0:2a53a4c3238c 1291 }
lorcansmith 0:2a53a4c3238c 1292
lorcansmith 0:2a53a4c3238c 1293 void snmp_inc_ipreasmreqds(void)
lorcansmith 0:2a53a4c3238c 1294 {
lorcansmith 0:2a53a4c3238c 1295 ipreasmreqds++;
lorcansmith 0:2a53a4c3238c 1296 }
lorcansmith 0:2a53a4c3238c 1297
lorcansmith 0:2a53a4c3238c 1298 void snmp_inc_ipreasmoks(void)
lorcansmith 0:2a53a4c3238c 1299 {
lorcansmith 0:2a53a4c3238c 1300 ipreasmoks++;
lorcansmith 0:2a53a4c3238c 1301 }
lorcansmith 0:2a53a4c3238c 1302
lorcansmith 0:2a53a4c3238c 1303 void snmp_inc_ipreasmfails(void)
lorcansmith 0:2a53a4c3238c 1304 {
lorcansmith 0:2a53a4c3238c 1305 ipreasmfails++;
lorcansmith 0:2a53a4c3238c 1306 }
lorcansmith 0:2a53a4c3238c 1307
lorcansmith 0:2a53a4c3238c 1308 void snmp_inc_ipfragoks(void)
lorcansmith 0:2a53a4c3238c 1309 {
lorcansmith 0:2a53a4c3238c 1310 ipfragoks++;
lorcansmith 0:2a53a4c3238c 1311 }
lorcansmith 0:2a53a4c3238c 1312
lorcansmith 0:2a53a4c3238c 1313 void snmp_inc_ipfragfails(void)
lorcansmith 0:2a53a4c3238c 1314 {
lorcansmith 0:2a53a4c3238c 1315 ipfragfails++;
lorcansmith 0:2a53a4c3238c 1316 }
lorcansmith 0:2a53a4c3238c 1317
lorcansmith 0:2a53a4c3238c 1318 void snmp_inc_ipfragcreates(void)
lorcansmith 0:2a53a4c3238c 1319 {
lorcansmith 0:2a53a4c3238c 1320 ipfragcreates++;
lorcansmith 0:2a53a4c3238c 1321 }
lorcansmith 0:2a53a4c3238c 1322
lorcansmith 0:2a53a4c3238c 1323 void snmp_inc_iproutingdiscards(void)
lorcansmith 0:2a53a4c3238c 1324 {
lorcansmith 0:2a53a4c3238c 1325 iproutingdiscards++;
lorcansmith 0:2a53a4c3238c 1326 }
lorcansmith 0:2a53a4c3238c 1327
lorcansmith 0:2a53a4c3238c 1328 /**
lorcansmith 0:2a53a4c3238c 1329 * Inserts ipAddrTable indexes (.ipAdEntAddr)
lorcansmith 0:2a53a4c3238c 1330 * into index tree.
lorcansmith 0:2a53a4c3238c 1331 */
lorcansmith 0:2a53a4c3238c 1332 void snmp_insert_ipaddridx_tree(struct netif *ni)
lorcansmith 0:2a53a4c3238c 1333 {
lorcansmith 0:2a53a4c3238c 1334 struct mib_list_rootnode *ipa_rn;
lorcansmith 0:2a53a4c3238c 1335 struct mib_list_node *ipa_node;
lorcansmith 0:2a53a4c3238c 1336 s32_t ipaddridx[4];
lorcansmith 0:2a53a4c3238c 1337 u8_t level;
lorcansmith 0:2a53a4c3238c 1338
lorcansmith 0:2a53a4c3238c 1339 LWIP_ASSERT("ni != NULL", ni != NULL);
lorcansmith 0:2a53a4c3238c 1340 snmp_iptooid(&ni->ip_addr, &ipaddridx[0]);
lorcansmith 0:2a53a4c3238c 1341
lorcansmith 0:2a53a4c3238c 1342 level = 0;
lorcansmith 0:2a53a4c3238c 1343 ipa_rn = &ipaddrtree_root;
lorcansmith 0:2a53a4c3238c 1344 while (level < 4)
lorcansmith 0:2a53a4c3238c 1345 {
lorcansmith 0:2a53a4c3238c 1346 ipa_node = NULL;
lorcansmith 0:2a53a4c3238c 1347 snmp_mib_node_insert(ipa_rn, ipaddridx[level], &ipa_node);
lorcansmith 0:2a53a4c3238c 1348 if ((level != 3) && (ipa_node != NULL))
lorcansmith 0:2a53a4c3238c 1349 {
lorcansmith 0:2a53a4c3238c 1350 if (ipa_node->nptr == NULL)
lorcansmith 0:2a53a4c3238c 1351 {
lorcansmith 0:2a53a4c3238c 1352 ipa_rn = snmp_mib_lrn_alloc();
lorcansmith 0:2a53a4c3238c 1353 ipa_node->nptr = (struct mib_node*)ipa_rn;
lorcansmith 0:2a53a4c3238c 1354 if (ipa_rn != NULL)
lorcansmith 0:2a53a4c3238c 1355 {
lorcansmith 0:2a53a4c3238c 1356 if (level == 2)
lorcansmith 0:2a53a4c3238c 1357 {
lorcansmith 0:2a53a4c3238c 1358 ipa_rn->get_object_def = ip_addrentry_get_object_def;
lorcansmith 0:2a53a4c3238c 1359 ipa_rn->get_value = ip_addrentry_get_value;
lorcansmith 0:2a53a4c3238c 1360 ipa_rn->set_test = noleafs_set_test;
lorcansmith 0:2a53a4c3238c 1361 ipa_rn->set_value = noleafs_set_value;
lorcansmith 0:2a53a4c3238c 1362 }
lorcansmith 0:2a53a4c3238c 1363 }
lorcansmith 0:2a53a4c3238c 1364 else
lorcansmith 0:2a53a4c3238c 1365 {
lorcansmith 0:2a53a4c3238c 1366 /* ipa_rn == NULL, malloc failure */
lorcansmith 0:2a53a4c3238c 1367 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_ipaddridx_tree() insert failed, mem full"));
lorcansmith 0:2a53a4c3238c 1368 break;
lorcansmith 0:2a53a4c3238c 1369 }
lorcansmith 0:2a53a4c3238c 1370 }
lorcansmith 0:2a53a4c3238c 1371 else
lorcansmith 0:2a53a4c3238c 1372 {
lorcansmith 0:2a53a4c3238c 1373 ipa_rn = (struct mib_list_rootnode*)ipa_node->nptr;
lorcansmith 0:2a53a4c3238c 1374 }
lorcansmith 0:2a53a4c3238c 1375 }
lorcansmith 0:2a53a4c3238c 1376 level++;
lorcansmith 0:2a53a4c3238c 1377 }
lorcansmith 0:2a53a4c3238c 1378 /* enable getnext traversal on filled table */
lorcansmith 0:2a53a4c3238c 1379 ipaddrtable.maxlength = 1;
lorcansmith 0:2a53a4c3238c 1380 }
lorcansmith 0:2a53a4c3238c 1381
lorcansmith 0:2a53a4c3238c 1382 /**
lorcansmith 0:2a53a4c3238c 1383 * Removes ipAddrTable indexes (.ipAdEntAddr)
lorcansmith 0:2a53a4c3238c 1384 * from index tree.
lorcansmith 0:2a53a4c3238c 1385 */
lorcansmith 0:2a53a4c3238c 1386 void snmp_delete_ipaddridx_tree(struct netif *ni)
lorcansmith 0:2a53a4c3238c 1387 {
lorcansmith 0:2a53a4c3238c 1388 struct mib_list_rootnode *ipa_rn, *next, *del_rn[4];
lorcansmith 0:2a53a4c3238c 1389 struct mib_list_node *ipa_n, *del_n[4];
lorcansmith 0:2a53a4c3238c 1390 s32_t ipaddridx[4];
lorcansmith 0:2a53a4c3238c 1391 u8_t fc, level, del_cnt;
lorcansmith 0:2a53a4c3238c 1392
lorcansmith 0:2a53a4c3238c 1393 LWIP_ASSERT("ni != NULL", ni != NULL);
lorcansmith 0:2a53a4c3238c 1394 snmp_iptooid(&ni->ip_addr, &ipaddridx[0]);
lorcansmith 0:2a53a4c3238c 1395
lorcansmith 0:2a53a4c3238c 1396 /* mark nodes for deletion */
lorcansmith 0:2a53a4c3238c 1397 level = 0;
lorcansmith 0:2a53a4c3238c 1398 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1399 ipa_rn = &ipaddrtree_root;
lorcansmith 0:2a53a4c3238c 1400 while ((level < 4) && (ipa_rn != NULL))
lorcansmith 0:2a53a4c3238c 1401 {
lorcansmith 0:2a53a4c3238c 1402 fc = snmp_mib_node_find(ipa_rn, ipaddridx[level], &ipa_n);
lorcansmith 0:2a53a4c3238c 1403 if (fc == 0)
lorcansmith 0:2a53a4c3238c 1404 {
lorcansmith 0:2a53a4c3238c 1405 /* ipaddridx[level] does not exist */
lorcansmith 0:2a53a4c3238c 1406 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1407 ipa_rn = NULL;
lorcansmith 0:2a53a4c3238c 1408 }
lorcansmith 0:2a53a4c3238c 1409 else if (fc == 1)
lorcansmith 0:2a53a4c3238c 1410 {
lorcansmith 0:2a53a4c3238c 1411 del_rn[del_cnt] = ipa_rn;
lorcansmith 0:2a53a4c3238c 1412 del_n[del_cnt] = ipa_n;
lorcansmith 0:2a53a4c3238c 1413 del_cnt++;
lorcansmith 0:2a53a4c3238c 1414 ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);
lorcansmith 0:2a53a4c3238c 1415 }
lorcansmith 0:2a53a4c3238c 1416 else if (fc == 2)
lorcansmith 0:2a53a4c3238c 1417 {
lorcansmith 0:2a53a4c3238c 1418 /* reset delete (2 or more childs) */
lorcansmith 0:2a53a4c3238c 1419 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1420 ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);
lorcansmith 0:2a53a4c3238c 1421 }
lorcansmith 0:2a53a4c3238c 1422 level++;
lorcansmith 0:2a53a4c3238c 1423 }
lorcansmith 0:2a53a4c3238c 1424 /* delete marked index nodes */
lorcansmith 0:2a53a4c3238c 1425 while (del_cnt > 0)
lorcansmith 0:2a53a4c3238c 1426 {
lorcansmith 0:2a53a4c3238c 1427 del_cnt--;
lorcansmith 0:2a53a4c3238c 1428
lorcansmith 0:2a53a4c3238c 1429 ipa_rn = del_rn[del_cnt];
lorcansmith 0:2a53a4c3238c 1430 ipa_n = del_n[del_cnt];
lorcansmith 0:2a53a4c3238c 1431
lorcansmith 0:2a53a4c3238c 1432 next = snmp_mib_node_delete(ipa_rn, ipa_n);
lorcansmith 0:2a53a4c3238c 1433 if (next != NULL)
lorcansmith 0:2a53a4c3238c 1434 {
lorcansmith 0:2a53a4c3238c 1435 LWIP_ASSERT("next_count == 0",next->count == 0);
lorcansmith 0:2a53a4c3238c 1436 snmp_mib_lrn_free(next);
lorcansmith 0:2a53a4c3238c 1437 }
lorcansmith 0:2a53a4c3238c 1438 }
lorcansmith 0:2a53a4c3238c 1439 /* disable getnext traversal on empty table */
lorcansmith 0:2a53a4c3238c 1440 if (ipaddrtree_root.count == 0) ipaddrtable.maxlength = 0;
lorcansmith 0:2a53a4c3238c 1441 }
lorcansmith 0:2a53a4c3238c 1442
lorcansmith 0:2a53a4c3238c 1443 /**
lorcansmith 0:2a53a4c3238c 1444 * Inserts ipRouteTable indexes (.ipRouteDest)
lorcansmith 0:2a53a4c3238c 1445 * into index tree.
lorcansmith 0:2a53a4c3238c 1446 *
lorcansmith 0:2a53a4c3238c 1447 * @param dflt non-zero for the default rte, zero for network rte
lorcansmith 0:2a53a4c3238c 1448 * @param ni points to network interface for this rte
lorcansmith 0:2a53a4c3238c 1449 *
lorcansmith 0:2a53a4c3238c 1450 * @todo record sysuptime for _this_ route when it is installed
lorcansmith 0:2a53a4c3238c 1451 * (needed for ipRouteAge) in the netif.
lorcansmith 0:2a53a4c3238c 1452 */
lorcansmith 0:2a53a4c3238c 1453 void snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni)
lorcansmith 0:2a53a4c3238c 1454 {
lorcansmith 0:2a53a4c3238c 1455 u8_t insert = 0;
lorcansmith 0:2a53a4c3238c 1456 ip_addr_t dst;
lorcansmith 0:2a53a4c3238c 1457
lorcansmith 0:2a53a4c3238c 1458 if (dflt != 0)
lorcansmith 0:2a53a4c3238c 1459 {
lorcansmith 0:2a53a4c3238c 1460 /* the default route 0.0.0.0 */
lorcansmith 0:2a53a4c3238c 1461 ip_addr_set_any(&dst);
lorcansmith 0:2a53a4c3238c 1462 insert = 1;
lorcansmith 0:2a53a4c3238c 1463 }
lorcansmith 0:2a53a4c3238c 1464 else
lorcansmith 0:2a53a4c3238c 1465 {
lorcansmith 0:2a53a4c3238c 1466 /* route to the network address */
lorcansmith 0:2a53a4c3238c 1467 ip_addr_get_network(&dst, &ni->ip_addr, &ni->netmask);
lorcansmith 0:2a53a4c3238c 1468 /* exclude 0.0.0.0 network (reserved for default rte) */
lorcansmith 0:2a53a4c3238c 1469 if (!ip_addr_isany(&dst)) {
lorcansmith 0:2a53a4c3238c 1470 insert = 1;
lorcansmith 0:2a53a4c3238c 1471 }
lorcansmith 0:2a53a4c3238c 1472 }
lorcansmith 0:2a53a4c3238c 1473 if (insert)
lorcansmith 0:2a53a4c3238c 1474 {
lorcansmith 0:2a53a4c3238c 1475 struct mib_list_rootnode *iprte_rn;
lorcansmith 0:2a53a4c3238c 1476 struct mib_list_node *iprte_node;
lorcansmith 0:2a53a4c3238c 1477 s32_t iprteidx[4];
lorcansmith 0:2a53a4c3238c 1478 u8_t level;
lorcansmith 0:2a53a4c3238c 1479
lorcansmith 0:2a53a4c3238c 1480 snmp_iptooid(&dst, &iprteidx[0]);
lorcansmith 0:2a53a4c3238c 1481 level = 0;
lorcansmith 0:2a53a4c3238c 1482 iprte_rn = &iprtetree_root;
lorcansmith 0:2a53a4c3238c 1483 while (level < 4)
lorcansmith 0:2a53a4c3238c 1484 {
lorcansmith 0:2a53a4c3238c 1485 iprte_node = NULL;
lorcansmith 0:2a53a4c3238c 1486 snmp_mib_node_insert(iprte_rn, iprteidx[level], &iprte_node);
lorcansmith 0:2a53a4c3238c 1487 if ((level != 3) && (iprte_node != NULL))
lorcansmith 0:2a53a4c3238c 1488 {
lorcansmith 0:2a53a4c3238c 1489 if (iprte_node->nptr == NULL)
lorcansmith 0:2a53a4c3238c 1490 {
lorcansmith 0:2a53a4c3238c 1491 iprte_rn = snmp_mib_lrn_alloc();
lorcansmith 0:2a53a4c3238c 1492 iprte_node->nptr = (struct mib_node*)iprte_rn;
lorcansmith 0:2a53a4c3238c 1493 if (iprte_rn != NULL)
lorcansmith 0:2a53a4c3238c 1494 {
lorcansmith 0:2a53a4c3238c 1495 if (level == 2)
lorcansmith 0:2a53a4c3238c 1496 {
lorcansmith 0:2a53a4c3238c 1497 iprte_rn->get_object_def = ip_rteentry_get_object_def;
lorcansmith 0:2a53a4c3238c 1498 iprte_rn->get_value = ip_rteentry_get_value;
lorcansmith 0:2a53a4c3238c 1499 iprte_rn->set_test = noleafs_set_test;
lorcansmith 0:2a53a4c3238c 1500 iprte_rn->set_value = noleafs_set_value;
lorcansmith 0:2a53a4c3238c 1501 }
lorcansmith 0:2a53a4c3238c 1502 }
lorcansmith 0:2a53a4c3238c 1503 else
lorcansmith 0:2a53a4c3238c 1504 {
lorcansmith 0:2a53a4c3238c 1505 /* iprte_rn == NULL, malloc failure */
lorcansmith 0:2a53a4c3238c 1506 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_iprteidx_tree() insert failed, mem full"));
lorcansmith 0:2a53a4c3238c 1507 break;
lorcansmith 0:2a53a4c3238c 1508 }
lorcansmith 0:2a53a4c3238c 1509 }
lorcansmith 0:2a53a4c3238c 1510 else
lorcansmith 0:2a53a4c3238c 1511 {
lorcansmith 0:2a53a4c3238c 1512 iprte_rn = (struct mib_list_rootnode*)iprte_node->nptr;
lorcansmith 0:2a53a4c3238c 1513 }
lorcansmith 0:2a53a4c3238c 1514 }
lorcansmith 0:2a53a4c3238c 1515 level++;
lorcansmith 0:2a53a4c3238c 1516 }
lorcansmith 0:2a53a4c3238c 1517 }
lorcansmith 0:2a53a4c3238c 1518 /* enable getnext traversal on filled table */
lorcansmith 0:2a53a4c3238c 1519 iprtetable.maxlength = 1;
lorcansmith 0:2a53a4c3238c 1520 }
lorcansmith 0:2a53a4c3238c 1521
lorcansmith 0:2a53a4c3238c 1522 /**
lorcansmith 0:2a53a4c3238c 1523 * Removes ipRouteTable indexes (.ipRouteDest)
lorcansmith 0:2a53a4c3238c 1524 * from index tree.
lorcansmith 0:2a53a4c3238c 1525 *
lorcansmith 0:2a53a4c3238c 1526 * @param dflt non-zero for the default rte, zero for network rte
lorcansmith 0:2a53a4c3238c 1527 * @param ni points to network interface for this rte or NULL
lorcansmith 0:2a53a4c3238c 1528 * for default route to be removed.
lorcansmith 0:2a53a4c3238c 1529 */
lorcansmith 0:2a53a4c3238c 1530 void snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni)
lorcansmith 0:2a53a4c3238c 1531 {
lorcansmith 0:2a53a4c3238c 1532 u8_t del = 0;
lorcansmith 0:2a53a4c3238c 1533 ip_addr_t dst;
lorcansmith 0:2a53a4c3238c 1534
lorcansmith 0:2a53a4c3238c 1535 if (dflt != 0)
lorcansmith 0:2a53a4c3238c 1536 {
lorcansmith 0:2a53a4c3238c 1537 /* the default route 0.0.0.0 */
lorcansmith 0:2a53a4c3238c 1538 ip_addr_set_any(&dst);
lorcansmith 0:2a53a4c3238c 1539 del = 1;
lorcansmith 0:2a53a4c3238c 1540 }
lorcansmith 0:2a53a4c3238c 1541 else
lorcansmith 0:2a53a4c3238c 1542 {
lorcansmith 0:2a53a4c3238c 1543 /* route to the network address */
lorcansmith 0:2a53a4c3238c 1544 ip_addr_get_network(&dst, &ni->ip_addr, &ni->netmask);
lorcansmith 0:2a53a4c3238c 1545 /* exclude 0.0.0.0 network (reserved for default rte) */
lorcansmith 0:2a53a4c3238c 1546 if (!ip_addr_isany(&dst)) {
lorcansmith 0:2a53a4c3238c 1547 del = 1;
lorcansmith 0:2a53a4c3238c 1548 }
lorcansmith 0:2a53a4c3238c 1549 }
lorcansmith 0:2a53a4c3238c 1550 if (del)
lorcansmith 0:2a53a4c3238c 1551 {
lorcansmith 0:2a53a4c3238c 1552 struct mib_list_rootnode *iprte_rn, *next, *del_rn[4];
lorcansmith 0:2a53a4c3238c 1553 struct mib_list_node *iprte_n, *del_n[4];
lorcansmith 0:2a53a4c3238c 1554 s32_t iprteidx[4];
lorcansmith 0:2a53a4c3238c 1555 u8_t fc, level, del_cnt;
lorcansmith 0:2a53a4c3238c 1556
lorcansmith 0:2a53a4c3238c 1557 snmp_iptooid(&dst, &iprteidx[0]);
lorcansmith 0:2a53a4c3238c 1558 /* mark nodes for deletion */
lorcansmith 0:2a53a4c3238c 1559 level = 0;
lorcansmith 0:2a53a4c3238c 1560 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1561 iprte_rn = &iprtetree_root;
lorcansmith 0:2a53a4c3238c 1562 while ((level < 4) && (iprte_rn != NULL))
lorcansmith 0:2a53a4c3238c 1563 {
lorcansmith 0:2a53a4c3238c 1564 fc = snmp_mib_node_find(iprte_rn, iprteidx[level], &iprte_n);
lorcansmith 0:2a53a4c3238c 1565 if (fc == 0)
lorcansmith 0:2a53a4c3238c 1566 {
lorcansmith 0:2a53a4c3238c 1567 /* iprteidx[level] does not exist */
lorcansmith 0:2a53a4c3238c 1568 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1569 iprte_rn = NULL;
lorcansmith 0:2a53a4c3238c 1570 }
lorcansmith 0:2a53a4c3238c 1571 else if (fc == 1)
lorcansmith 0:2a53a4c3238c 1572 {
lorcansmith 0:2a53a4c3238c 1573 del_rn[del_cnt] = iprte_rn;
lorcansmith 0:2a53a4c3238c 1574 del_n[del_cnt] = iprte_n;
lorcansmith 0:2a53a4c3238c 1575 del_cnt++;
lorcansmith 0:2a53a4c3238c 1576 iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr);
lorcansmith 0:2a53a4c3238c 1577 }
lorcansmith 0:2a53a4c3238c 1578 else if (fc == 2)
lorcansmith 0:2a53a4c3238c 1579 {
lorcansmith 0:2a53a4c3238c 1580 /* reset delete (2 or more childs) */
lorcansmith 0:2a53a4c3238c 1581 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1582 iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr);
lorcansmith 0:2a53a4c3238c 1583 }
lorcansmith 0:2a53a4c3238c 1584 level++;
lorcansmith 0:2a53a4c3238c 1585 }
lorcansmith 0:2a53a4c3238c 1586 /* delete marked index nodes */
lorcansmith 0:2a53a4c3238c 1587 while (del_cnt > 0)
lorcansmith 0:2a53a4c3238c 1588 {
lorcansmith 0:2a53a4c3238c 1589 del_cnt--;
lorcansmith 0:2a53a4c3238c 1590
lorcansmith 0:2a53a4c3238c 1591 iprte_rn = del_rn[del_cnt];
lorcansmith 0:2a53a4c3238c 1592 iprte_n = del_n[del_cnt];
lorcansmith 0:2a53a4c3238c 1593
lorcansmith 0:2a53a4c3238c 1594 next = snmp_mib_node_delete(iprte_rn, iprte_n);
lorcansmith 0:2a53a4c3238c 1595 if (next != NULL)
lorcansmith 0:2a53a4c3238c 1596 {
lorcansmith 0:2a53a4c3238c 1597 LWIP_ASSERT("next_count == 0",next->count == 0);
lorcansmith 0:2a53a4c3238c 1598 snmp_mib_lrn_free(next);
lorcansmith 0:2a53a4c3238c 1599 }
lorcansmith 0:2a53a4c3238c 1600 }
lorcansmith 0:2a53a4c3238c 1601 }
lorcansmith 0:2a53a4c3238c 1602 /* disable getnext traversal on empty table */
lorcansmith 0:2a53a4c3238c 1603 if (iprtetree_root.count == 0) iprtetable.maxlength = 0;
lorcansmith 0:2a53a4c3238c 1604 }
lorcansmith 0:2a53a4c3238c 1605
lorcansmith 0:2a53a4c3238c 1606
lorcansmith 0:2a53a4c3238c 1607 void snmp_inc_icmpinmsgs(void)
lorcansmith 0:2a53a4c3238c 1608 {
lorcansmith 0:2a53a4c3238c 1609 icmpinmsgs++;
lorcansmith 0:2a53a4c3238c 1610 }
lorcansmith 0:2a53a4c3238c 1611
lorcansmith 0:2a53a4c3238c 1612 void snmp_inc_icmpinerrors(void)
lorcansmith 0:2a53a4c3238c 1613 {
lorcansmith 0:2a53a4c3238c 1614 icmpinerrors++;
lorcansmith 0:2a53a4c3238c 1615 }
lorcansmith 0:2a53a4c3238c 1616
lorcansmith 0:2a53a4c3238c 1617 void snmp_inc_icmpindestunreachs(void)
lorcansmith 0:2a53a4c3238c 1618 {
lorcansmith 0:2a53a4c3238c 1619 icmpindestunreachs++;
lorcansmith 0:2a53a4c3238c 1620 }
lorcansmith 0:2a53a4c3238c 1621
lorcansmith 0:2a53a4c3238c 1622 void snmp_inc_icmpintimeexcds(void)
lorcansmith 0:2a53a4c3238c 1623 {
lorcansmith 0:2a53a4c3238c 1624 icmpintimeexcds++;
lorcansmith 0:2a53a4c3238c 1625 }
lorcansmith 0:2a53a4c3238c 1626
lorcansmith 0:2a53a4c3238c 1627 void snmp_inc_icmpinparmprobs(void)
lorcansmith 0:2a53a4c3238c 1628 {
lorcansmith 0:2a53a4c3238c 1629 icmpinparmprobs++;
lorcansmith 0:2a53a4c3238c 1630 }
lorcansmith 0:2a53a4c3238c 1631
lorcansmith 0:2a53a4c3238c 1632 void snmp_inc_icmpinsrcquenchs(void)
lorcansmith 0:2a53a4c3238c 1633 {
lorcansmith 0:2a53a4c3238c 1634 icmpinsrcquenchs++;
lorcansmith 0:2a53a4c3238c 1635 }
lorcansmith 0:2a53a4c3238c 1636
lorcansmith 0:2a53a4c3238c 1637 void snmp_inc_icmpinredirects(void)
lorcansmith 0:2a53a4c3238c 1638 {
lorcansmith 0:2a53a4c3238c 1639 icmpinredirects++;
lorcansmith 0:2a53a4c3238c 1640 }
lorcansmith 0:2a53a4c3238c 1641
lorcansmith 0:2a53a4c3238c 1642 void snmp_inc_icmpinechos(void)
lorcansmith 0:2a53a4c3238c 1643 {
lorcansmith 0:2a53a4c3238c 1644 icmpinechos++;
lorcansmith 0:2a53a4c3238c 1645 }
lorcansmith 0:2a53a4c3238c 1646
lorcansmith 0:2a53a4c3238c 1647 void snmp_inc_icmpinechoreps(void)
lorcansmith 0:2a53a4c3238c 1648 {
lorcansmith 0:2a53a4c3238c 1649 icmpinechoreps++;
lorcansmith 0:2a53a4c3238c 1650 }
lorcansmith 0:2a53a4c3238c 1651
lorcansmith 0:2a53a4c3238c 1652 void snmp_inc_icmpintimestamps(void)
lorcansmith 0:2a53a4c3238c 1653 {
lorcansmith 0:2a53a4c3238c 1654 icmpintimestamps++;
lorcansmith 0:2a53a4c3238c 1655 }
lorcansmith 0:2a53a4c3238c 1656
lorcansmith 0:2a53a4c3238c 1657 void snmp_inc_icmpintimestampreps(void)
lorcansmith 0:2a53a4c3238c 1658 {
lorcansmith 0:2a53a4c3238c 1659 icmpintimestampreps++;
lorcansmith 0:2a53a4c3238c 1660 }
lorcansmith 0:2a53a4c3238c 1661
lorcansmith 0:2a53a4c3238c 1662 void snmp_inc_icmpinaddrmasks(void)
lorcansmith 0:2a53a4c3238c 1663 {
lorcansmith 0:2a53a4c3238c 1664 icmpinaddrmasks++;
lorcansmith 0:2a53a4c3238c 1665 }
lorcansmith 0:2a53a4c3238c 1666
lorcansmith 0:2a53a4c3238c 1667 void snmp_inc_icmpinaddrmaskreps(void)
lorcansmith 0:2a53a4c3238c 1668 {
lorcansmith 0:2a53a4c3238c 1669 icmpinaddrmaskreps++;
lorcansmith 0:2a53a4c3238c 1670 }
lorcansmith 0:2a53a4c3238c 1671
lorcansmith 0:2a53a4c3238c 1672 void snmp_inc_icmpoutmsgs(void)
lorcansmith 0:2a53a4c3238c 1673 {
lorcansmith 0:2a53a4c3238c 1674 icmpoutmsgs++;
lorcansmith 0:2a53a4c3238c 1675 }
lorcansmith 0:2a53a4c3238c 1676
lorcansmith 0:2a53a4c3238c 1677 void snmp_inc_icmpouterrors(void)
lorcansmith 0:2a53a4c3238c 1678 {
lorcansmith 0:2a53a4c3238c 1679 icmpouterrors++;
lorcansmith 0:2a53a4c3238c 1680 }
lorcansmith 0:2a53a4c3238c 1681
lorcansmith 0:2a53a4c3238c 1682 void snmp_inc_icmpoutdestunreachs(void)
lorcansmith 0:2a53a4c3238c 1683 {
lorcansmith 0:2a53a4c3238c 1684 icmpoutdestunreachs++;
lorcansmith 0:2a53a4c3238c 1685 }
lorcansmith 0:2a53a4c3238c 1686
lorcansmith 0:2a53a4c3238c 1687 void snmp_inc_icmpouttimeexcds(void)
lorcansmith 0:2a53a4c3238c 1688 {
lorcansmith 0:2a53a4c3238c 1689 icmpouttimeexcds++;
lorcansmith 0:2a53a4c3238c 1690 }
lorcansmith 0:2a53a4c3238c 1691
lorcansmith 0:2a53a4c3238c 1692 void snmp_inc_icmpoutparmprobs(void)
lorcansmith 0:2a53a4c3238c 1693 {
lorcansmith 0:2a53a4c3238c 1694 icmpoutparmprobs++;
lorcansmith 0:2a53a4c3238c 1695 }
lorcansmith 0:2a53a4c3238c 1696
lorcansmith 0:2a53a4c3238c 1697 void snmp_inc_icmpoutsrcquenchs(void)
lorcansmith 0:2a53a4c3238c 1698 {
lorcansmith 0:2a53a4c3238c 1699 icmpoutsrcquenchs++;
lorcansmith 0:2a53a4c3238c 1700 }
lorcansmith 0:2a53a4c3238c 1701
lorcansmith 0:2a53a4c3238c 1702 void snmp_inc_icmpoutredirects(void)
lorcansmith 0:2a53a4c3238c 1703 {
lorcansmith 0:2a53a4c3238c 1704 icmpoutredirects++;
lorcansmith 0:2a53a4c3238c 1705 }
lorcansmith 0:2a53a4c3238c 1706
lorcansmith 0:2a53a4c3238c 1707 void snmp_inc_icmpoutechos(void)
lorcansmith 0:2a53a4c3238c 1708 {
lorcansmith 0:2a53a4c3238c 1709 icmpoutechos++;
lorcansmith 0:2a53a4c3238c 1710 }
lorcansmith 0:2a53a4c3238c 1711
lorcansmith 0:2a53a4c3238c 1712 void snmp_inc_icmpoutechoreps(void)
lorcansmith 0:2a53a4c3238c 1713 {
lorcansmith 0:2a53a4c3238c 1714 icmpoutechoreps++;
lorcansmith 0:2a53a4c3238c 1715 }
lorcansmith 0:2a53a4c3238c 1716
lorcansmith 0:2a53a4c3238c 1717 void snmp_inc_icmpouttimestamps(void)
lorcansmith 0:2a53a4c3238c 1718 {
lorcansmith 0:2a53a4c3238c 1719 icmpouttimestamps++;
lorcansmith 0:2a53a4c3238c 1720 }
lorcansmith 0:2a53a4c3238c 1721
lorcansmith 0:2a53a4c3238c 1722 void snmp_inc_icmpouttimestampreps(void)
lorcansmith 0:2a53a4c3238c 1723 {
lorcansmith 0:2a53a4c3238c 1724 icmpouttimestampreps++;
lorcansmith 0:2a53a4c3238c 1725 }
lorcansmith 0:2a53a4c3238c 1726
lorcansmith 0:2a53a4c3238c 1727 void snmp_inc_icmpoutaddrmasks(void)
lorcansmith 0:2a53a4c3238c 1728 {
lorcansmith 0:2a53a4c3238c 1729 icmpoutaddrmasks++;
lorcansmith 0:2a53a4c3238c 1730 }
lorcansmith 0:2a53a4c3238c 1731
lorcansmith 0:2a53a4c3238c 1732 void snmp_inc_icmpoutaddrmaskreps(void)
lorcansmith 0:2a53a4c3238c 1733 {
lorcansmith 0:2a53a4c3238c 1734 icmpoutaddrmaskreps++;
lorcansmith 0:2a53a4c3238c 1735 }
lorcansmith 0:2a53a4c3238c 1736
lorcansmith 0:2a53a4c3238c 1737 void snmp_inc_tcpactiveopens(void)
lorcansmith 0:2a53a4c3238c 1738 {
lorcansmith 0:2a53a4c3238c 1739 tcpactiveopens++;
lorcansmith 0:2a53a4c3238c 1740 }
lorcansmith 0:2a53a4c3238c 1741
lorcansmith 0:2a53a4c3238c 1742 void snmp_inc_tcppassiveopens(void)
lorcansmith 0:2a53a4c3238c 1743 {
lorcansmith 0:2a53a4c3238c 1744 tcppassiveopens++;
lorcansmith 0:2a53a4c3238c 1745 }
lorcansmith 0:2a53a4c3238c 1746
lorcansmith 0:2a53a4c3238c 1747 void snmp_inc_tcpattemptfails(void)
lorcansmith 0:2a53a4c3238c 1748 {
lorcansmith 0:2a53a4c3238c 1749 tcpattemptfails++;
lorcansmith 0:2a53a4c3238c 1750 }
lorcansmith 0:2a53a4c3238c 1751
lorcansmith 0:2a53a4c3238c 1752 void snmp_inc_tcpestabresets(void)
lorcansmith 0:2a53a4c3238c 1753 {
lorcansmith 0:2a53a4c3238c 1754 tcpestabresets++;
lorcansmith 0:2a53a4c3238c 1755 }
lorcansmith 0:2a53a4c3238c 1756
lorcansmith 0:2a53a4c3238c 1757 void snmp_inc_tcpinsegs(void)
lorcansmith 0:2a53a4c3238c 1758 {
lorcansmith 0:2a53a4c3238c 1759 tcpinsegs++;
lorcansmith 0:2a53a4c3238c 1760 }
lorcansmith 0:2a53a4c3238c 1761
lorcansmith 0:2a53a4c3238c 1762 void snmp_inc_tcpoutsegs(void)
lorcansmith 0:2a53a4c3238c 1763 {
lorcansmith 0:2a53a4c3238c 1764 tcpoutsegs++;
lorcansmith 0:2a53a4c3238c 1765 }
lorcansmith 0:2a53a4c3238c 1766
lorcansmith 0:2a53a4c3238c 1767 void snmp_inc_tcpretranssegs(void)
lorcansmith 0:2a53a4c3238c 1768 {
lorcansmith 0:2a53a4c3238c 1769 tcpretranssegs++;
lorcansmith 0:2a53a4c3238c 1770 }
lorcansmith 0:2a53a4c3238c 1771
lorcansmith 0:2a53a4c3238c 1772 void snmp_inc_tcpinerrs(void)
lorcansmith 0:2a53a4c3238c 1773 {
lorcansmith 0:2a53a4c3238c 1774 tcpinerrs++;
lorcansmith 0:2a53a4c3238c 1775 }
lorcansmith 0:2a53a4c3238c 1776
lorcansmith 0:2a53a4c3238c 1777 void snmp_inc_tcpoutrsts(void)
lorcansmith 0:2a53a4c3238c 1778 {
lorcansmith 0:2a53a4c3238c 1779 tcpoutrsts++;
lorcansmith 0:2a53a4c3238c 1780 }
lorcansmith 0:2a53a4c3238c 1781
lorcansmith 0:2a53a4c3238c 1782 void snmp_inc_udpindatagrams(void)
lorcansmith 0:2a53a4c3238c 1783 {
lorcansmith 0:2a53a4c3238c 1784 udpindatagrams++;
lorcansmith 0:2a53a4c3238c 1785 }
lorcansmith 0:2a53a4c3238c 1786
lorcansmith 0:2a53a4c3238c 1787 void snmp_inc_udpnoports(void)
lorcansmith 0:2a53a4c3238c 1788 {
lorcansmith 0:2a53a4c3238c 1789 udpnoports++;
lorcansmith 0:2a53a4c3238c 1790 }
lorcansmith 0:2a53a4c3238c 1791
lorcansmith 0:2a53a4c3238c 1792 void snmp_inc_udpinerrors(void)
lorcansmith 0:2a53a4c3238c 1793 {
lorcansmith 0:2a53a4c3238c 1794 udpinerrors++;
lorcansmith 0:2a53a4c3238c 1795 }
lorcansmith 0:2a53a4c3238c 1796
lorcansmith 0:2a53a4c3238c 1797 void snmp_inc_udpoutdatagrams(void)
lorcansmith 0:2a53a4c3238c 1798 {
lorcansmith 0:2a53a4c3238c 1799 udpoutdatagrams++;
lorcansmith 0:2a53a4c3238c 1800 }
lorcansmith 0:2a53a4c3238c 1801
lorcansmith 0:2a53a4c3238c 1802 /**
lorcansmith 0:2a53a4c3238c 1803 * Inserts udpTable indexes (.udpLocalAddress.udpLocalPort)
lorcansmith 0:2a53a4c3238c 1804 * into index tree.
lorcansmith 0:2a53a4c3238c 1805 */
lorcansmith 0:2a53a4c3238c 1806 void snmp_insert_udpidx_tree(struct udp_pcb *pcb)
lorcansmith 0:2a53a4c3238c 1807 {
lorcansmith 0:2a53a4c3238c 1808 struct mib_list_rootnode *udp_rn;
lorcansmith 0:2a53a4c3238c 1809 struct mib_list_node *udp_node;
lorcansmith 0:2a53a4c3238c 1810 s32_t udpidx[5];
lorcansmith 0:2a53a4c3238c 1811 u8_t level;
lorcansmith 0:2a53a4c3238c 1812
lorcansmith 0:2a53a4c3238c 1813 LWIP_ASSERT("pcb != NULL", pcb != NULL);
lorcansmith 0:2a53a4c3238c 1814 snmp_iptooid(&pcb->local_ip, &udpidx[0]);
lorcansmith 0:2a53a4c3238c 1815 udpidx[4] = pcb->local_port;
lorcansmith 0:2a53a4c3238c 1816
lorcansmith 0:2a53a4c3238c 1817 udp_rn = &udp_root;
lorcansmith 0:2a53a4c3238c 1818 for (level = 0; level < 5; level++)
lorcansmith 0:2a53a4c3238c 1819 {
lorcansmith 0:2a53a4c3238c 1820 udp_node = NULL;
lorcansmith 0:2a53a4c3238c 1821 snmp_mib_node_insert(udp_rn, udpidx[level], &udp_node);
lorcansmith 0:2a53a4c3238c 1822 if ((level != 4) && (udp_node != NULL))
lorcansmith 0:2a53a4c3238c 1823 {
lorcansmith 0:2a53a4c3238c 1824 if (udp_node->nptr == NULL)
lorcansmith 0:2a53a4c3238c 1825 {
lorcansmith 0:2a53a4c3238c 1826 udp_rn = snmp_mib_lrn_alloc();
lorcansmith 0:2a53a4c3238c 1827 udp_node->nptr = (struct mib_node*)udp_rn;
lorcansmith 0:2a53a4c3238c 1828 if (udp_rn != NULL)
lorcansmith 0:2a53a4c3238c 1829 {
lorcansmith 0:2a53a4c3238c 1830 if (level == 3)
lorcansmith 0:2a53a4c3238c 1831 {
lorcansmith 0:2a53a4c3238c 1832 udp_rn->get_object_def = udpentry_get_object_def;
lorcansmith 0:2a53a4c3238c 1833 udp_rn->get_value = udpentry_get_value;
lorcansmith 0:2a53a4c3238c 1834 udp_rn->set_test = noleafs_set_test;
lorcansmith 0:2a53a4c3238c 1835 udp_rn->set_value = noleafs_set_value;
lorcansmith 0:2a53a4c3238c 1836 }
lorcansmith 0:2a53a4c3238c 1837 }
lorcansmith 0:2a53a4c3238c 1838 else
lorcansmith 0:2a53a4c3238c 1839 {
lorcansmith 0:2a53a4c3238c 1840 /* udp_rn == NULL, malloc failure */
lorcansmith 0:2a53a4c3238c 1841 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_udpidx_tree() insert failed, mem full"));
lorcansmith 0:2a53a4c3238c 1842 break;
lorcansmith 0:2a53a4c3238c 1843 }
lorcansmith 0:2a53a4c3238c 1844 }
lorcansmith 0:2a53a4c3238c 1845 else
lorcansmith 0:2a53a4c3238c 1846 {
lorcansmith 0:2a53a4c3238c 1847 udp_rn = (struct mib_list_rootnode*)udp_node->nptr;
lorcansmith 0:2a53a4c3238c 1848 }
lorcansmith 0:2a53a4c3238c 1849 }
lorcansmith 0:2a53a4c3238c 1850 }
lorcansmith 0:2a53a4c3238c 1851 udptable.maxlength = 1;
lorcansmith 0:2a53a4c3238c 1852 }
lorcansmith 0:2a53a4c3238c 1853
lorcansmith 0:2a53a4c3238c 1854 /**
lorcansmith 0:2a53a4c3238c 1855 * Removes udpTable indexes (.udpLocalAddress.udpLocalPort)
lorcansmith 0:2a53a4c3238c 1856 * from index tree.
lorcansmith 0:2a53a4c3238c 1857 */
lorcansmith 0:2a53a4c3238c 1858 void snmp_delete_udpidx_tree(struct udp_pcb *pcb)
lorcansmith 0:2a53a4c3238c 1859 {
lorcansmith 0:2a53a4c3238c 1860 struct udp_pcb *npcb;
lorcansmith 0:2a53a4c3238c 1861 struct mib_list_rootnode *udp_rn, *next, *del_rn[5];
lorcansmith 0:2a53a4c3238c 1862 struct mib_list_node *udp_n, *del_n[5];
lorcansmith 0:2a53a4c3238c 1863 s32_t udpidx[5];
lorcansmith 0:2a53a4c3238c 1864 u8_t bindings, fc, level, del_cnt;
lorcansmith 0:2a53a4c3238c 1865
lorcansmith 0:2a53a4c3238c 1866 LWIP_ASSERT("pcb != NULL", pcb != NULL);
lorcansmith 0:2a53a4c3238c 1867 snmp_iptooid(&pcb->local_ip, &udpidx[0]);
lorcansmith 0:2a53a4c3238c 1868 udpidx[4] = pcb->local_port;
lorcansmith 0:2a53a4c3238c 1869
lorcansmith 0:2a53a4c3238c 1870 /* count PCBs for a given binding
lorcansmith 0:2a53a4c3238c 1871 (e.g. when reusing ports or for temp output PCBs) */
lorcansmith 0:2a53a4c3238c 1872 bindings = 0;
lorcansmith 0:2a53a4c3238c 1873 npcb = udp_pcbs;
lorcansmith 0:2a53a4c3238c 1874 while ((npcb != NULL))
lorcansmith 0:2a53a4c3238c 1875 {
lorcansmith 0:2a53a4c3238c 1876 if (ip_addr_cmp(&npcb->local_ip, &pcb->local_ip) &&
lorcansmith 0:2a53a4c3238c 1877 (npcb->local_port == udpidx[4]))
lorcansmith 0:2a53a4c3238c 1878 {
lorcansmith 0:2a53a4c3238c 1879 bindings++;
lorcansmith 0:2a53a4c3238c 1880 }
lorcansmith 0:2a53a4c3238c 1881 npcb = npcb->next;
lorcansmith 0:2a53a4c3238c 1882 }
lorcansmith 0:2a53a4c3238c 1883 if (bindings == 1)
lorcansmith 0:2a53a4c3238c 1884 {
lorcansmith 0:2a53a4c3238c 1885 /* selectively remove */
lorcansmith 0:2a53a4c3238c 1886 /* mark nodes for deletion */
lorcansmith 0:2a53a4c3238c 1887 level = 0;
lorcansmith 0:2a53a4c3238c 1888 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1889 udp_rn = &udp_root;
lorcansmith 0:2a53a4c3238c 1890 while ((level < 5) && (udp_rn != NULL))
lorcansmith 0:2a53a4c3238c 1891 {
lorcansmith 0:2a53a4c3238c 1892 fc = snmp_mib_node_find(udp_rn, udpidx[level], &udp_n);
lorcansmith 0:2a53a4c3238c 1893 if (fc == 0)
lorcansmith 0:2a53a4c3238c 1894 {
lorcansmith 0:2a53a4c3238c 1895 /* udpidx[level] does not exist */
lorcansmith 0:2a53a4c3238c 1896 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1897 udp_rn = NULL;
lorcansmith 0:2a53a4c3238c 1898 }
lorcansmith 0:2a53a4c3238c 1899 else if (fc == 1)
lorcansmith 0:2a53a4c3238c 1900 {
lorcansmith 0:2a53a4c3238c 1901 del_rn[del_cnt] = udp_rn;
lorcansmith 0:2a53a4c3238c 1902 del_n[del_cnt] = udp_n;
lorcansmith 0:2a53a4c3238c 1903 del_cnt++;
lorcansmith 0:2a53a4c3238c 1904 udp_rn = (struct mib_list_rootnode*)(udp_n->nptr);
lorcansmith 0:2a53a4c3238c 1905 }
lorcansmith 0:2a53a4c3238c 1906 else if (fc == 2)
lorcansmith 0:2a53a4c3238c 1907 {
lorcansmith 0:2a53a4c3238c 1908 /* reset delete (2 or more childs) */
lorcansmith 0:2a53a4c3238c 1909 del_cnt = 0;
lorcansmith 0:2a53a4c3238c 1910 udp_rn = (struct mib_list_rootnode*)(udp_n->nptr);
lorcansmith 0:2a53a4c3238c 1911 }
lorcansmith 0:2a53a4c3238c 1912 level++;
lorcansmith 0:2a53a4c3238c 1913 }
lorcansmith 0:2a53a4c3238c 1914 /* delete marked index nodes */
lorcansmith 0:2a53a4c3238c 1915 while (del_cnt > 0)
lorcansmith 0:2a53a4c3238c 1916 {
lorcansmith 0:2a53a4c3238c 1917 del_cnt--;
lorcansmith 0:2a53a4c3238c 1918
lorcansmith 0:2a53a4c3238c 1919 udp_rn = del_rn[del_cnt];
lorcansmith 0:2a53a4c3238c 1920 udp_n = del_n[del_cnt];
lorcansmith 0:2a53a4c3238c 1921
lorcansmith 0:2a53a4c3238c 1922 next = snmp_mib_node_delete(udp_rn, udp_n);
lorcansmith 0:2a53a4c3238c 1923 if (next != NULL)
lorcansmith 0:2a53a4c3238c 1924 {
lorcansmith 0:2a53a4c3238c 1925 LWIP_ASSERT("next_count == 0",next->count == 0);
lorcansmith 0:2a53a4c3238c 1926 snmp_mib_lrn_free(next);
lorcansmith 0:2a53a4c3238c 1927 }
lorcansmith 0:2a53a4c3238c 1928 }
lorcansmith 0:2a53a4c3238c 1929 }
lorcansmith 0:2a53a4c3238c 1930 /* disable getnext traversal on empty table */
lorcansmith 0:2a53a4c3238c 1931 if (udp_root.count == 0) udptable.maxlength = 0;
lorcansmith 0:2a53a4c3238c 1932 }
lorcansmith 0:2a53a4c3238c 1933
lorcansmith 0:2a53a4c3238c 1934
lorcansmith 0:2a53a4c3238c 1935 void snmp_inc_snmpinpkts(void)
lorcansmith 0:2a53a4c3238c 1936 {
lorcansmith 0:2a53a4c3238c 1937 snmpinpkts++;
lorcansmith 0:2a53a4c3238c 1938 }
lorcansmith 0:2a53a4c3238c 1939
lorcansmith 0:2a53a4c3238c 1940 void snmp_inc_snmpoutpkts(void)
lorcansmith 0:2a53a4c3238c 1941 {
lorcansmith 0:2a53a4c3238c 1942 snmpoutpkts++;
lorcansmith 0:2a53a4c3238c 1943 }
lorcansmith 0:2a53a4c3238c 1944
lorcansmith 0:2a53a4c3238c 1945 void snmp_inc_snmpinbadversions(void)
lorcansmith 0:2a53a4c3238c 1946 {
lorcansmith 0:2a53a4c3238c 1947 snmpinbadversions++;
lorcansmith 0:2a53a4c3238c 1948 }
lorcansmith 0:2a53a4c3238c 1949
lorcansmith 0:2a53a4c3238c 1950 void snmp_inc_snmpinbadcommunitynames(void)
lorcansmith 0:2a53a4c3238c 1951 {
lorcansmith 0:2a53a4c3238c 1952 snmpinbadcommunitynames++;
lorcansmith 0:2a53a4c3238c 1953 }
lorcansmith 0:2a53a4c3238c 1954
lorcansmith 0:2a53a4c3238c 1955 void snmp_inc_snmpinbadcommunityuses(void)
lorcansmith 0:2a53a4c3238c 1956 {
lorcansmith 0:2a53a4c3238c 1957 snmpinbadcommunityuses++;
lorcansmith 0:2a53a4c3238c 1958 }
lorcansmith 0:2a53a4c3238c 1959
lorcansmith 0:2a53a4c3238c 1960 void snmp_inc_snmpinasnparseerrs(void)
lorcansmith 0:2a53a4c3238c 1961 {
lorcansmith 0:2a53a4c3238c 1962 snmpinasnparseerrs++;
lorcansmith 0:2a53a4c3238c 1963 }
lorcansmith 0:2a53a4c3238c 1964
lorcansmith 0:2a53a4c3238c 1965 void snmp_inc_snmpintoobigs(void)
lorcansmith 0:2a53a4c3238c 1966 {
lorcansmith 0:2a53a4c3238c 1967 snmpintoobigs++;
lorcansmith 0:2a53a4c3238c 1968 }
lorcansmith 0:2a53a4c3238c 1969
lorcansmith 0:2a53a4c3238c 1970 void snmp_inc_snmpinnosuchnames(void)
lorcansmith 0:2a53a4c3238c 1971 {
lorcansmith 0:2a53a4c3238c 1972 snmpinnosuchnames++;
lorcansmith 0:2a53a4c3238c 1973 }
lorcansmith 0:2a53a4c3238c 1974
lorcansmith 0:2a53a4c3238c 1975 void snmp_inc_snmpinbadvalues(void)
lorcansmith 0:2a53a4c3238c 1976 {
lorcansmith 0:2a53a4c3238c 1977 snmpinbadvalues++;
lorcansmith 0:2a53a4c3238c 1978 }
lorcansmith 0:2a53a4c3238c 1979
lorcansmith 0:2a53a4c3238c 1980 void snmp_inc_snmpinreadonlys(void)
lorcansmith 0:2a53a4c3238c 1981 {
lorcansmith 0:2a53a4c3238c 1982 snmpinreadonlys++;
lorcansmith 0:2a53a4c3238c 1983 }
lorcansmith 0:2a53a4c3238c 1984
lorcansmith 0:2a53a4c3238c 1985 void snmp_inc_snmpingenerrs(void)
lorcansmith 0:2a53a4c3238c 1986 {
lorcansmith 0:2a53a4c3238c 1987 snmpingenerrs++;
lorcansmith 0:2a53a4c3238c 1988 }
lorcansmith 0:2a53a4c3238c 1989
lorcansmith 0:2a53a4c3238c 1990 void snmp_add_snmpintotalreqvars(u8_t value)
lorcansmith 0:2a53a4c3238c 1991 {
lorcansmith 0:2a53a4c3238c 1992 snmpintotalreqvars += value;
lorcansmith 0:2a53a4c3238c 1993 }
lorcansmith 0:2a53a4c3238c 1994
lorcansmith 0:2a53a4c3238c 1995 void snmp_add_snmpintotalsetvars(u8_t value)
lorcansmith 0:2a53a4c3238c 1996 {
lorcansmith 0:2a53a4c3238c 1997 snmpintotalsetvars += value;
lorcansmith 0:2a53a4c3238c 1998 }
lorcansmith 0:2a53a4c3238c 1999
lorcansmith 0:2a53a4c3238c 2000 void snmp_inc_snmpingetrequests(void)
lorcansmith 0:2a53a4c3238c 2001 {
lorcansmith 0:2a53a4c3238c 2002 snmpingetrequests++;
lorcansmith 0:2a53a4c3238c 2003 }
lorcansmith 0:2a53a4c3238c 2004
lorcansmith 0:2a53a4c3238c 2005 void snmp_inc_snmpingetnexts(void)
lorcansmith 0:2a53a4c3238c 2006 {
lorcansmith 0:2a53a4c3238c 2007 snmpingetnexts++;
lorcansmith 0:2a53a4c3238c 2008 }
lorcansmith 0:2a53a4c3238c 2009
lorcansmith 0:2a53a4c3238c 2010 void snmp_inc_snmpinsetrequests(void)
lorcansmith 0:2a53a4c3238c 2011 {
lorcansmith 0:2a53a4c3238c 2012 snmpinsetrequests++;
lorcansmith 0:2a53a4c3238c 2013 }
lorcansmith 0:2a53a4c3238c 2014
lorcansmith 0:2a53a4c3238c 2015 void snmp_inc_snmpingetresponses(void)
lorcansmith 0:2a53a4c3238c 2016 {
lorcansmith 0:2a53a4c3238c 2017 snmpingetresponses++;
lorcansmith 0:2a53a4c3238c 2018 }
lorcansmith 0:2a53a4c3238c 2019
lorcansmith 0:2a53a4c3238c 2020 void snmp_inc_snmpintraps(void)
lorcansmith 0:2a53a4c3238c 2021 {
lorcansmith 0:2a53a4c3238c 2022 snmpintraps++;
lorcansmith 0:2a53a4c3238c 2023 }
lorcansmith 0:2a53a4c3238c 2024
lorcansmith 0:2a53a4c3238c 2025 void snmp_inc_snmpouttoobigs(void)
lorcansmith 0:2a53a4c3238c 2026 {
lorcansmith 0:2a53a4c3238c 2027 snmpouttoobigs++;
lorcansmith 0:2a53a4c3238c 2028 }
lorcansmith 0:2a53a4c3238c 2029
lorcansmith 0:2a53a4c3238c 2030 void snmp_inc_snmpoutnosuchnames(void)
lorcansmith 0:2a53a4c3238c 2031 {
lorcansmith 0:2a53a4c3238c 2032 snmpoutnosuchnames++;
lorcansmith 0:2a53a4c3238c 2033 }
lorcansmith 0:2a53a4c3238c 2034
lorcansmith 0:2a53a4c3238c 2035 void snmp_inc_snmpoutbadvalues(void)
lorcansmith 0:2a53a4c3238c 2036 {
lorcansmith 0:2a53a4c3238c 2037 snmpoutbadvalues++;
lorcansmith 0:2a53a4c3238c 2038 }
lorcansmith 0:2a53a4c3238c 2039
lorcansmith 0:2a53a4c3238c 2040 void snmp_inc_snmpoutgenerrs(void)
lorcansmith 0:2a53a4c3238c 2041 {
lorcansmith 0:2a53a4c3238c 2042 snmpoutgenerrs++;
lorcansmith 0:2a53a4c3238c 2043 }
lorcansmith 0:2a53a4c3238c 2044
lorcansmith 0:2a53a4c3238c 2045 void snmp_inc_snmpoutgetrequests(void)
lorcansmith 0:2a53a4c3238c 2046 {
lorcansmith 0:2a53a4c3238c 2047 snmpoutgetrequests++;
lorcansmith 0:2a53a4c3238c 2048 }
lorcansmith 0:2a53a4c3238c 2049
lorcansmith 0:2a53a4c3238c 2050 void snmp_inc_snmpoutgetnexts(void)
lorcansmith 0:2a53a4c3238c 2051 {
lorcansmith 0:2a53a4c3238c 2052 snmpoutgetnexts++;
lorcansmith 0:2a53a4c3238c 2053 }
lorcansmith 0:2a53a4c3238c 2054
lorcansmith 0:2a53a4c3238c 2055 void snmp_inc_snmpoutsetrequests(void)
lorcansmith 0:2a53a4c3238c 2056 {
lorcansmith 0:2a53a4c3238c 2057 snmpoutsetrequests++;
lorcansmith 0:2a53a4c3238c 2058 }
lorcansmith 0:2a53a4c3238c 2059
lorcansmith 0:2a53a4c3238c 2060 void snmp_inc_snmpoutgetresponses(void)
lorcansmith 0:2a53a4c3238c 2061 {
lorcansmith 0:2a53a4c3238c 2062 snmpoutgetresponses++;
lorcansmith 0:2a53a4c3238c 2063 }
lorcansmith 0:2a53a4c3238c 2064
lorcansmith 0:2a53a4c3238c 2065 void snmp_inc_snmpouttraps(void)
lorcansmith 0:2a53a4c3238c 2066 {
lorcansmith 0:2a53a4c3238c 2067 snmpouttraps++;
lorcansmith 0:2a53a4c3238c 2068 }
lorcansmith 0:2a53a4c3238c 2069
lorcansmith 0:2a53a4c3238c 2070 void snmp_get_snmpgrpid_ptr(struct snmp_obj_id **oid)
lorcansmith 0:2a53a4c3238c 2071 {
lorcansmith 0:2a53a4c3238c 2072 *oid = &snmpgrp_id;
lorcansmith 0:2a53a4c3238c 2073 }
lorcansmith 0:2a53a4c3238c 2074
lorcansmith 0:2a53a4c3238c 2075 void snmp_set_snmpenableauthentraps(u8_t *value)
lorcansmith 0:2a53a4c3238c 2076 {
lorcansmith 0:2a53a4c3238c 2077 if (value != NULL)
lorcansmith 0:2a53a4c3238c 2078 {
lorcansmith 0:2a53a4c3238c 2079 snmpenableauthentraps_ptr = value;
lorcansmith 0:2a53a4c3238c 2080 }
lorcansmith 0:2a53a4c3238c 2081 }
lorcansmith 0:2a53a4c3238c 2082
lorcansmith 0:2a53a4c3238c 2083 void snmp_get_snmpenableauthentraps(u8_t *value)
lorcansmith 0:2a53a4c3238c 2084 {
lorcansmith 0:2a53a4c3238c 2085 *value = *snmpenableauthentraps_ptr;
lorcansmith 0:2a53a4c3238c 2086 }
lorcansmith 0:2a53a4c3238c 2087
lorcansmith 0:2a53a4c3238c 2088 void
lorcansmith 0:2a53a4c3238c 2089 noleafs_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 2090 {
lorcansmith 0:2a53a4c3238c 2091 LWIP_UNUSED_ARG(ident_len);
lorcansmith 0:2a53a4c3238c 2092 LWIP_UNUSED_ARG(ident);
lorcansmith 0:2a53a4c3238c 2093 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 2094 }
lorcansmith 0:2a53a4c3238c 2095
lorcansmith 0:2a53a4c3238c 2096 void
lorcansmith 0:2a53a4c3238c 2097 noleafs_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2098 {
lorcansmith 0:2a53a4c3238c 2099 LWIP_UNUSED_ARG(od);
lorcansmith 0:2a53a4c3238c 2100 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 2101 LWIP_UNUSED_ARG(value);
lorcansmith 0:2a53a4c3238c 2102 }
lorcansmith 0:2a53a4c3238c 2103
lorcansmith 0:2a53a4c3238c 2104 u8_t
lorcansmith 0:2a53a4c3238c 2105 noleafs_set_test(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2106 {
lorcansmith 0:2a53a4c3238c 2107 LWIP_UNUSED_ARG(od);
lorcansmith 0:2a53a4c3238c 2108 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 2109 LWIP_UNUSED_ARG(value);
lorcansmith 0:2a53a4c3238c 2110 /* can't set */
lorcansmith 0:2a53a4c3238c 2111 return 0;
lorcansmith 0:2a53a4c3238c 2112 }
lorcansmith 0:2a53a4c3238c 2113
lorcansmith 0:2a53a4c3238c 2114 void
lorcansmith 0:2a53a4c3238c 2115 noleafs_set_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2116 {
lorcansmith 0:2a53a4c3238c 2117 LWIP_UNUSED_ARG(od);
lorcansmith 0:2a53a4c3238c 2118 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 2119 LWIP_UNUSED_ARG(value);
lorcansmith 0:2a53a4c3238c 2120 }
lorcansmith 0:2a53a4c3238c 2121
lorcansmith 0:2a53a4c3238c 2122
lorcansmith 0:2a53a4c3238c 2123 /**
lorcansmith 0:2a53a4c3238c 2124 * Returns systems object definitions.
lorcansmith 0:2a53a4c3238c 2125 *
lorcansmith 0:2a53a4c3238c 2126 * @param ident_len the address length (2)
lorcansmith 0:2a53a4c3238c 2127 * @param ident points to objectname.0 (object id trailer)
lorcansmith 0:2a53a4c3238c 2128 * @param od points to object definition.
lorcansmith 0:2a53a4c3238c 2129 */
lorcansmith 0:2a53a4c3238c 2130 static void
lorcansmith 0:2a53a4c3238c 2131 system_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 2132 {
lorcansmith 0:2a53a4c3238c 2133 u8_t id;
lorcansmith 0:2a53a4c3238c 2134
lorcansmith 0:2a53a4c3238c 2135 /* return to object name, adding index depth (1) */
lorcansmith 0:2a53a4c3238c 2136 ident_len += 1;
lorcansmith 0:2a53a4c3238c 2137 ident -= 1;
lorcansmith 0:2a53a4c3238c 2138 if (ident_len == 2)
lorcansmith 0:2a53a4c3238c 2139 {
lorcansmith 0:2a53a4c3238c 2140 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 2141 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 2142
lorcansmith 0:2a53a4c3238c 2143 LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 2144 id = (u8_t)ident[0];
lorcansmith 0:2a53a4c3238c 2145 LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def system.%"U16_F".0\n",(u16_t)id));
lorcansmith 0:2a53a4c3238c 2146 switch (id)
lorcansmith 0:2a53a4c3238c 2147 {
lorcansmith 0:2a53a4c3238c 2148 case 1: /* sysDescr */
lorcansmith 0:2a53a4c3238c 2149 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 2150 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2151 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
lorcansmith 0:2a53a4c3238c 2152 od->v_len = *sysdescr_len_ptr;
lorcansmith 0:2a53a4c3238c 2153 break;
lorcansmith 0:2a53a4c3238c 2154 case 2: /* sysObjectID */
lorcansmith 0:2a53a4c3238c 2155 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 2156 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2157 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID);
lorcansmith 0:2a53a4c3238c 2158 od->v_len = sysobjid.len * sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 2159 break;
lorcansmith 0:2a53a4c3238c 2160 case 3: /* sysUpTime */
lorcansmith 0:2a53a4c3238c 2161 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 2162 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2163 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS);
lorcansmith 0:2a53a4c3238c 2164 od->v_len = sizeof(u32_t);
lorcansmith 0:2a53a4c3238c 2165 break;
lorcansmith 0:2a53a4c3238c 2166 case 4: /* sysContact */
lorcansmith 0:2a53a4c3238c 2167 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 2168 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 2169 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
lorcansmith 0:2a53a4c3238c 2170 od->v_len = *syscontact_len_ptr;
lorcansmith 0:2a53a4c3238c 2171 break;
lorcansmith 0:2a53a4c3238c 2172 case 5: /* sysName */
lorcansmith 0:2a53a4c3238c 2173 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 2174 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 2175 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
lorcansmith 0:2a53a4c3238c 2176 od->v_len = *sysname_len_ptr;
lorcansmith 0:2a53a4c3238c 2177 break;
lorcansmith 0:2a53a4c3238c 2178 case 6: /* sysLocation */
lorcansmith 0:2a53a4c3238c 2179 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 2180 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 2181 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
lorcansmith 0:2a53a4c3238c 2182 od->v_len = *syslocation_len_ptr;
lorcansmith 0:2a53a4c3238c 2183 break;
lorcansmith 0:2a53a4c3238c 2184 case 7: /* sysServices */
lorcansmith 0:2a53a4c3238c 2185 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 2186 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2187 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 2188 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 2189 break;
lorcansmith 0:2a53a4c3238c 2190 default:
lorcansmith 0:2a53a4c3238c 2191 LWIP_DEBUGF(SNMP_MIB_DEBUG,("system_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 2192 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 2193 break;
lorcansmith 0:2a53a4c3238c 2194 };
lorcansmith 0:2a53a4c3238c 2195 }
lorcansmith 0:2a53a4c3238c 2196 else
lorcansmith 0:2a53a4c3238c 2197 {
lorcansmith 0:2a53a4c3238c 2198 LWIP_DEBUGF(SNMP_MIB_DEBUG,("system_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 2199 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 2200 }
lorcansmith 0:2a53a4c3238c 2201 }
lorcansmith 0:2a53a4c3238c 2202
lorcansmith 0:2a53a4c3238c 2203 /**
lorcansmith 0:2a53a4c3238c 2204 * Returns system object value.
lorcansmith 0:2a53a4c3238c 2205 *
lorcansmith 0:2a53a4c3238c 2206 * @param ident_len the address length (2)
lorcansmith 0:2a53a4c3238c 2207 * @param ident points to objectname.0 (object id trailer)
lorcansmith 0:2a53a4c3238c 2208 * @param len return value space (in bytes)
lorcansmith 0:2a53a4c3238c 2209 * @param value points to (varbind) space to copy value into.
lorcansmith 0:2a53a4c3238c 2210 */
lorcansmith 0:2a53a4c3238c 2211 static void
lorcansmith 0:2a53a4c3238c 2212 system_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2213 {
lorcansmith 0:2a53a4c3238c 2214 u8_t id;
lorcansmith 0:2a53a4c3238c 2215
lorcansmith 0:2a53a4c3238c 2216 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 2217 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 2218 switch (id)
lorcansmith 0:2a53a4c3238c 2219 {
lorcansmith 0:2a53a4c3238c 2220 case 1: /* sysDescr */
lorcansmith 0:2a53a4c3238c 2221 ocstrncpy((u8_t*)value, sysdescr_ptr, len);
lorcansmith 0:2a53a4c3238c 2222 break;
lorcansmith 0:2a53a4c3238c 2223 case 2: /* sysObjectID */
lorcansmith 0:2a53a4c3238c 2224 objectidncpy((s32_t*)value, (s32_t*)sysobjid.id, (u8_t)(len / sizeof(s32_t)));
lorcansmith 0:2a53a4c3238c 2225 break;
lorcansmith 0:2a53a4c3238c 2226 case 3: /* sysUpTime */
lorcansmith 0:2a53a4c3238c 2227 {
lorcansmith 0:2a53a4c3238c 2228 snmp_get_sysuptime((u32_t*)value);
lorcansmith 0:2a53a4c3238c 2229 }
lorcansmith 0:2a53a4c3238c 2230 break;
lorcansmith 0:2a53a4c3238c 2231 case 4: /* sysContact */
lorcansmith 0:2a53a4c3238c 2232 ocstrncpy((u8_t*)value, syscontact_ptr, len);
lorcansmith 0:2a53a4c3238c 2233 break;
lorcansmith 0:2a53a4c3238c 2234 case 5: /* sysName */
lorcansmith 0:2a53a4c3238c 2235 ocstrncpy((u8_t*)value, sysname_ptr, len);
lorcansmith 0:2a53a4c3238c 2236 break;
lorcansmith 0:2a53a4c3238c 2237 case 6: /* sysLocation */
lorcansmith 0:2a53a4c3238c 2238 ocstrncpy((u8_t*)value, syslocation_ptr, len);
lorcansmith 0:2a53a4c3238c 2239 break;
lorcansmith 0:2a53a4c3238c 2240 case 7: /* sysServices */
lorcansmith 0:2a53a4c3238c 2241 {
lorcansmith 0:2a53a4c3238c 2242 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2243 *sint_ptr = sysservices;
lorcansmith 0:2a53a4c3238c 2244 }
lorcansmith 0:2a53a4c3238c 2245 break;
lorcansmith 0:2a53a4c3238c 2246 };
lorcansmith 0:2a53a4c3238c 2247 }
lorcansmith 0:2a53a4c3238c 2248
lorcansmith 0:2a53a4c3238c 2249 static u8_t
lorcansmith 0:2a53a4c3238c 2250 system_set_test(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2251 {
lorcansmith 0:2a53a4c3238c 2252 u8_t id, set_ok;
lorcansmith 0:2a53a4c3238c 2253
lorcansmith 0:2a53a4c3238c 2254 LWIP_UNUSED_ARG(value);
lorcansmith 0:2a53a4c3238c 2255 set_ok = 0;
lorcansmith 0:2a53a4c3238c 2256 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 2257 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 2258 switch (id)
lorcansmith 0:2a53a4c3238c 2259 {
lorcansmith 0:2a53a4c3238c 2260 case 4: /* sysContact */
lorcansmith 0:2a53a4c3238c 2261 if ((syscontact_ptr != syscontact_default) &&
lorcansmith 0:2a53a4c3238c 2262 (len <= 255))
lorcansmith 0:2a53a4c3238c 2263 {
lorcansmith 0:2a53a4c3238c 2264 set_ok = 1;
lorcansmith 0:2a53a4c3238c 2265 }
lorcansmith 0:2a53a4c3238c 2266 break;
lorcansmith 0:2a53a4c3238c 2267 case 5: /* sysName */
lorcansmith 0:2a53a4c3238c 2268 if ((sysname_ptr != sysname_default) &&
lorcansmith 0:2a53a4c3238c 2269 (len <= 255))
lorcansmith 0:2a53a4c3238c 2270 {
lorcansmith 0:2a53a4c3238c 2271 set_ok = 1;
lorcansmith 0:2a53a4c3238c 2272 }
lorcansmith 0:2a53a4c3238c 2273 break;
lorcansmith 0:2a53a4c3238c 2274 case 6: /* sysLocation */
lorcansmith 0:2a53a4c3238c 2275 if ((syslocation_ptr != syslocation_default) &&
lorcansmith 0:2a53a4c3238c 2276 (len <= 255))
lorcansmith 0:2a53a4c3238c 2277 {
lorcansmith 0:2a53a4c3238c 2278 set_ok = 1;
lorcansmith 0:2a53a4c3238c 2279 }
lorcansmith 0:2a53a4c3238c 2280 break;
lorcansmith 0:2a53a4c3238c 2281 };
lorcansmith 0:2a53a4c3238c 2282 return set_ok;
lorcansmith 0:2a53a4c3238c 2283 }
lorcansmith 0:2a53a4c3238c 2284
lorcansmith 0:2a53a4c3238c 2285 static void
lorcansmith 0:2a53a4c3238c 2286 system_set_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2287 {
lorcansmith 0:2a53a4c3238c 2288 u8_t id;
lorcansmith 0:2a53a4c3238c 2289
lorcansmith 0:2a53a4c3238c 2290 LWIP_ASSERT("invalid len", len <= 0xff);
lorcansmith 0:2a53a4c3238c 2291 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 2292 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 2293 switch (id)
lorcansmith 0:2a53a4c3238c 2294 {
lorcansmith 0:2a53a4c3238c 2295 case 4: /* sysContact */
lorcansmith 0:2a53a4c3238c 2296 ocstrncpy(syscontact_ptr, (u8_t*)value, len);
lorcansmith 0:2a53a4c3238c 2297 *syscontact_len_ptr = (u8_t)len;
lorcansmith 0:2a53a4c3238c 2298 break;
lorcansmith 0:2a53a4c3238c 2299 case 5: /* sysName */
lorcansmith 0:2a53a4c3238c 2300 ocstrncpy(sysname_ptr, (u8_t*)value, len);
lorcansmith 0:2a53a4c3238c 2301 *sysname_len_ptr = (u8_t)len;
lorcansmith 0:2a53a4c3238c 2302 break;
lorcansmith 0:2a53a4c3238c 2303 case 6: /* sysLocation */
lorcansmith 0:2a53a4c3238c 2304 ocstrncpy(syslocation_ptr, (u8_t*)value, len);
lorcansmith 0:2a53a4c3238c 2305 *syslocation_len_ptr = (u8_t)len;
lorcansmith 0:2a53a4c3238c 2306 break;
lorcansmith 0:2a53a4c3238c 2307 };
lorcansmith 0:2a53a4c3238c 2308 }
lorcansmith 0:2a53a4c3238c 2309
lorcansmith 0:2a53a4c3238c 2310 /**
lorcansmith 0:2a53a4c3238c 2311 * Returns interfaces.ifnumber object definition.
lorcansmith 0:2a53a4c3238c 2312 *
lorcansmith 0:2a53a4c3238c 2313 * @param ident_len the address length (2)
lorcansmith 0:2a53a4c3238c 2314 * @param ident points to objectname.index
lorcansmith 0:2a53a4c3238c 2315 * @param od points to object definition.
lorcansmith 0:2a53a4c3238c 2316 */
lorcansmith 0:2a53a4c3238c 2317 static void
lorcansmith 0:2a53a4c3238c 2318 interfaces_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 2319 {
lorcansmith 0:2a53a4c3238c 2320 /* return to object name, adding index depth (1) */
lorcansmith 0:2a53a4c3238c 2321 ident_len += 1;
lorcansmith 0:2a53a4c3238c 2322 ident -= 1;
lorcansmith 0:2a53a4c3238c 2323 if (ident_len == 2)
lorcansmith 0:2a53a4c3238c 2324 {
lorcansmith 0:2a53a4c3238c 2325 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 2326 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 2327
lorcansmith 0:2a53a4c3238c 2328 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 2329 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2330 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 2331 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 2332 }
lorcansmith 0:2a53a4c3238c 2333 else
lorcansmith 0:2a53a4c3238c 2334 {
lorcansmith 0:2a53a4c3238c 2335 LWIP_DEBUGF(SNMP_MIB_DEBUG,("interfaces_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 2336 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 2337 }
lorcansmith 0:2a53a4c3238c 2338 }
lorcansmith 0:2a53a4c3238c 2339
lorcansmith 0:2a53a4c3238c 2340 /**
lorcansmith 0:2a53a4c3238c 2341 * Returns interfaces.ifnumber object value.
lorcansmith 0:2a53a4c3238c 2342 *
lorcansmith 0:2a53a4c3238c 2343 * @param ident_len the address length (2)
lorcansmith 0:2a53a4c3238c 2344 * @param ident points to objectname.0 (object id trailer)
lorcansmith 0:2a53a4c3238c 2345 * @param len return value space (in bytes)
lorcansmith 0:2a53a4c3238c 2346 * @param value points to (varbind) space to copy value into.
lorcansmith 0:2a53a4c3238c 2347 */
lorcansmith 0:2a53a4c3238c 2348 static void
lorcansmith 0:2a53a4c3238c 2349 interfaces_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2350 {
lorcansmith 0:2a53a4c3238c 2351 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 2352 if (od->id_inst_ptr[0] == 1)
lorcansmith 0:2a53a4c3238c 2353 {
lorcansmith 0:2a53a4c3238c 2354 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2355 *sint_ptr = iflist_root.count;
lorcansmith 0:2a53a4c3238c 2356 }
lorcansmith 0:2a53a4c3238c 2357 }
lorcansmith 0:2a53a4c3238c 2358
lorcansmith 0:2a53a4c3238c 2359 /**
lorcansmith 0:2a53a4c3238c 2360 * Returns ifentry object definitions.
lorcansmith 0:2a53a4c3238c 2361 *
lorcansmith 0:2a53a4c3238c 2362 * @param ident_len the address length (2)
lorcansmith 0:2a53a4c3238c 2363 * @param ident points to objectname.index
lorcansmith 0:2a53a4c3238c 2364 * @param od points to object definition.
lorcansmith 0:2a53a4c3238c 2365 */
lorcansmith 0:2a53a4c3238c 2366 static void
lorcansmith 0:2a53a4c3238c 2367 ifentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 2368 {
lorcansmith 0:2a53a4c3238c 2369 u8_t id;
lorcansmith 0:2a53a4c3238c 2370
lorcansmith 0:2a53a4c3238c 2371 /* return to object name, adding index depth (1) */
lorcansmith 0:2a53a4c3238c 2372 ident_len += 1;
lorcansmith 0:2a53a4c3238c 2373 ident -= 1;
lorcansmith 0:2a53a4c3238c 2374 if (ident_len == 2)
lorcansmith 0:2a53a4c3238c 2375 {
lorcansmith 0:2a53a4c3238c 2376 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 2377 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 2378
lorcansmith 0:2a53a4c3238c 2379 LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 2380 id = (u8_t)ident[0];
lorcansmith 0:2a53a4c3238c 2381 LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def ifentry.%"U16_F"\n",(u16_t)id));
lorcansmith 0:2a53a4c3238c 2382 switch (id)
lorcansmith 0:2a53a4c3238c 2383 {
lorcansmith 0:2a53a4c3238c 2384 case 1: /* ifIndex */
lorcansmith 0:2a53a4c3238c 2385 case 3: /* ifType */
lorcansmith 0:2a53a4c3238c 2386 case 4: /* ifMtu */
lorcansmith 0:2a53a4c3238c 2387 case 8: /* ifOperStatus */
lorcansmith 0:2a53a4c3238c 2388 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 2389 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2390 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 2391 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 2392 break;
lorcansmith 0:2a53a4c3238c 2393 case 2: /* ifDescr */
lorcansmith 0:2a53a4c3238c 2394 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 2395 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2396 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
lorcansmith 0:2a53a4c3238c 2397 /** @todo this should be some sort of sizeof(struct netif.name) */
lorcansmith 0:2a53a4c3238c 2398 od->v_len = 2;
lorcansmith 0:2a53a4c3238c 2399 break;
lorcansmith 0:2a53a4c3238c 2400 case 5: /* ifSpeed */
lorcansmith 0:2a53a4c3238c 2401 case 21: /* ifOutQLen */
lorcansmith 0:2a53a4c3238c 2402 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 2403 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2404 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE);
lorcansmith 0:2a53a4c3238c 2405 od->v_len = sizeof(u32_t);
lorcansmith 0:2a53a4c3238c 2406 break;
lorcansmith 0:2a53a4c3238c 2407 case 6: /* ifPhysAddress */
lorcansmith 0:2a53a4c3238c 2408 {
lorcansmith 0:2a53a4c3238c 2409 struct netif *netif;
lorcansmith 0:2a53a4c3238c 2410
lorcansmith 0:2a53a4c3238c 2411 snmp_ifindextonetif(ident[1], &netif);
lorcansmith 0:2a53a4c3238c 2412 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 2413 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2414 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
lorcansmith 0:2a53a4c3238c 2415 od->v_len = netif->hwaddr_len;
lorcansmith 0:2a53a4c3238c 2416 }
lorcansmith 0:2a53a4c3238c 2417 break;
lorcansmith 0:2a53a4c3238c 2418 case 7: /* ifAdminStatus */
lorcansmith 0:2a53a4c3238c 2419 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 2420 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 2421 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 2422 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 2423 break;
lorcansmith 0:2a53a4c3238c 2424 case 9: /* ifLastChange */
lorcansmith 0:2a53a4c3238c 2425 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 2426 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2427 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS);
lorcansmith 0:2a53a4c3238c 2428 od->v_len = sizeof(u32_t);
lorcansmith 0:2a53a4c3238c 2429 break;
lorcansmith 0:2a53a4c3238c 2430 case 10: /* ifInOctets */
lorcansmith 0:2a53a4c3238c 2431 case 11: /* ifInUcastPkts */
lorcansmith 0:2a53a4c3238c 2432 case 12: /* ifInNUcastPkts */
lorcansmith 0:2a53a4c3238c 2433 case 13: /* ifInDiscarts */
lorcansmith 0:2a53a4c3238c 2434 case 14: /* ifInErrors */
lorcansmith 0:2a53a4c3238c 2435 case 15: /* ifInUnkownProtos */
lorcansmith 0:2a53a4c3238c 2436 case 16: /* ifOutOctets */
lorcansmith 0:2a53a4c3238c 2437 case 17: /* ifOutUcastPkts */
lorcansmith 0:2a53a4c3238c 2438 case 18: /* ifOutNUcastPkts */
lorcansmith 0:2a53a4c3238c 2439 case 19: /* ifOutDiscarts */
lorcansmith 0:2a53a4c3238c 2440 case 20: /* ifOutErrors */
lorcansmith 0:2a53a4c3238c 2441 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 2442 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2443 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
lorcansmith 0:2a53a4c3238c 2444 od->v_len = sizeof(u32_t);
lorcansmith 0:2a53a4c3238c 2445 break;
lorcansmith 0:2a53a4c3238c 2446 case 22: /* ifSpecific */
lorcansmith 0:2a53a4c3238c 2447 /** @note returning zeroDotZero (0.0) no media specific MIB support */
lorcansmith 0:2a53a4c3238c 2448 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 2449 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2450 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID);
lorcansmith 0:2a53a4c3238c 2451 od->v_len = ifspecific.len * sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 2452 break;
lorcansmith 0:2a53a4c3238c 2453 default:
lorcansmith 0:2a53a4c3238c 2454 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ifentry_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 2455 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 2456 break;
lorcansmith 0:2a53a4c3238c 2457 };
lorcansmith 0:2a53a4c3238c 2458 }
lorcansmith 0:2a53a4c3238c 2459 else
lorcansmith 0:2a53a4c3238c 2460 {
lorcansmith 0:2a53a4c3238c 2461 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ifentry_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 2462 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 2463 }
lorcansmith 0:2a53a4c3238c 2464 }
lorcansmith 0:2a53a4c3238c 2465
lorcansmith 0:2a53a4c3238c 2466 /**
lorcansmith 0:2a53a4c3238c 2467 * Returns ifentry object value.
lorcansmith 0:2a53a4c3238c 2468 *
lorcansmith 0:2a53a4c3238c 2469 * @param ident_len the address length (2)
lorcansmith 0:2a53a4c3238c 2470 * @param ident points to objectname.0 (object id trailer)
lorcansmith 0:2a53a4c3238c 2471 * @param len return value space (in bytes)
lorcansmith 0:2a53a4c3238c 2472 * @param value points to (varbind) space to copy value into.
lorcansmith 0:2a53a4c3238c 2473 */
lorcansmith 0:2a53a4c3238c 2474 static void
lorcansmith 0:2a53a4c3238c 2475 ifentry_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2476 {
lorcansmith 0:2a53a4c3238c 2477 struct netif *netif;
lorcansmith 0:2a53a4c3238c 2478 u8_t id;
lorcansmith 0:2a53a4c3238c 2479
lorcansmith 0:2a53a4c3238c 2480 snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
lorcansmith 0:2a53a4c3238c 2481 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 2482 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 2483 switch (id)
lorcansmith 0:2a53a4c3238c 2484 {
lorcansmith 0:2a53a4c3238c 2485 case 1: /* ifIndex */
lorcansmith 0:2a53a4c3238c 2486 {
lorcansmith 0:2a53a4c3238c 2487 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2488 *sint_ptr = od->id_inst_ptr[1];
lorcansmith 0:2a53a4c3238c 2489 }
lorcansmith 0:2a53a4c3238c 2490 break;
lorcansmith 0:2a53a4c3238c 2491 case 2: /* ifDescr */
lorcansmith 0:2a53a4c3238c 2492 ocstrncpy((u8_t*)value, (u8_t*)netif->name, len);
lorcansmith 0:2a53a4c3238c 2493 break;
lorcansmith 0:2a53a4c3238c 2494 case 3: /* ifType */
lorcansmith 0:2a53a4c3238c 2495 {
lorcansmith 0:2a53a4c3238c 2496 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2497 *sint_ptr = netif->link_type;
lorcansmith 0:2a53a4c3238c 2498 }
lorcansmith 0:2a53a4c3238c 2499 break;
lorcansmith 0:2a53a4c3238c 2500 case 4: /* ifMtu */
lorcansmith 0:2a53a4c3238c 2501 {
lorcansmith 0:2a53a4c3238c 2502 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2503 *sint_ptr = netif->mtu;
lorcansmith 0:2a53a4c3238c 2504 }
lorcansmith 0:2a53a4c3238c 2505 break;
lorcansmith 0:2a53a4c3238c 2506 case 5: /* ifSpeed */
lorcansmith 0:2a53a4c3238c 2507 {
lorcansmith 0:2a53a4c3238c 2508 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2509 *uint_ptr = netif->link_speed;
lorcansmith 0:2a53a4c3238c 2510 }
lorcansmith 0:2a53a4c3238c 2511 break;
lorcansmith 0:2a53a4c3238c 2512 case 6: /* ifPhysAddress */
lorcansmith 0:2a53a4c3238c 2513 ocstrncpy((u8_t*)value, netif->hwaddr, len);
lorcansmith 0:2a53a4c3238c 2514 break;
lorcansmith 0:2a53a4c3238c 2515 case 7: /* ifAdminStatus */
lorcansmith 0:2a53a4c3238c 2516 {
lorcansmith 0:2a53a4c3238c 2517 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2518 if (netif_is_up(netif))
lorcansmith 0:2a53a4c3238c 2519 {
lorcansmith 0:2a53a4c3238c 2520 if (netif_is_link_up(netif))
lorcansmith 0:2a53a4c3238c 2521 {
lorcansmith 0:2a53a4c3238c 2522 *sint_ptr = 1; /* up */
lorcansmith 0:2a53a4c3238c 2523 }
lorcansmith 0:2a53a4c3238c 2524 else
lorcansmith 0:2a53a4c3238c 2525 {
lorcansmith 0:2a53a4c3238c 2526 *sint_ptr = 7; /* lowerLayerDown */
lorcansmith 0:2a53a4c3238c 2527 }
lorcansmith 0:2a53a4c3238c 2528 }
lorcansmith 0:2a53a4c3238c 2529 else
lorcansmith 0:2a53a4c3238c 2530 {
lorcansmith 0:2a53a4c3238c 2531 *sint_ptr = 2; /* down */
lorcansmith 0:2a53a4c3238c 2532 }
lorcansmith 0:2a53a4c3238c 2533 }
lorcansmith 0:2a53a4c3238c 2534 break;
lorcansmith 0:2a53a4c3238c 2535 case 8: /* ifOperStatus */
lorcansmith 0:2a53a4c3238c 2536 {
lorcansmith 0:2a53a4c3238c 2537 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2538 if (netif_is_up(netif))
lorcansmith 0:2a53a4c3238c 2539 {
lorcansmith 0:2a53a4c3238c 2540 *sint_ptr = 1;
lorcansmith 0:2a53a4c3238c 2541 }
lorcansmith 0:2a53a4c3238c 2542 else
lorcansmith 0:2a53a4c3238c 2543 {
lorcansmith 0:2a53a4c3238c 2544 *sint_ptr = 2;
lorcansmith 0:2a53a4c3238c 2545 }
lorcansmith 0:2a53a4c3238c 2546 }
lorcansmith 0:2a53a4c3238c 2547 break;
lorcansmith 0:2a53a4c3238c 2548 case 9: /* ifLastChange */
lorcansmith 0:2a53a4c3238c 2549 {
lorcansmith 0:2a53a4c3238c 2550 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2551 *uint_ptr = netif->ts;
lorcansmith 0:2a53a4c3238c 2552 }
lorcansmith 0:2a53a4c3238c 2553 break;
lorcansmith 0:2a53a4c3238c 2554 case 10: /* ifInOctets */
lorcansmith 0:2a53a4c3238c 2555 {
lorcansmith 0:2a53a4c3238c 2556 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2557 *uint_ptr = netif->ifinoctets;
lorcansmith 0:2a53a4c3238c 2558 }
lorcansmith 0:2a53a4c3238c 2559 break;
lorcansmith 0:2a53a4c3238c 2560 case 11: /* ifInUcastPkts */
lorcansmith 0:2a53a4c3238c 2561 {
lorcansmith 0:2a53a4c3238c 2562 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2563 *uint_ptr = netif->ifinucastpkts;
lorcansmith 0:2a53a4c3238c 2564 }
lorcansmith 0:2a53a4c3238c 2565 break;
lorcansmith 0:2a53a4c3238c 2566 case 12: /* ifInNUcastPkts */
lorcansmith 0:2a53a4c3238c 2567 {
lorcansmith 0:2a53a4c3238c 2568 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2569 *uint_ptr = netif->ifinnucastpkts;
lorcansmith 0:2a53a4c3238c 2570 }
lorcansmith 0:2a53a4c3238c 2571 break;
lorcansmith 0:2a53a4c3238c 2572 case 13: /* ifInDiscarts */
lorcansmith 0:2a53a4c3238c 2573 {
lorcansmith 0:2a53a4c3238c 2574 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2575 *uint_ptr = netif->ifindiscards;
lorcansmith 0:2a53a4c3238c 2576 }
lorcansmith 0:2a53a4c3238c 2577 break;
lorcansmith 0:2a53a4c3238c 2578 case 14: /* ifInErrors */
lorcansmith 0:2a53a4c3238c 2579 case 15: /* ifInUnkownProtos */
lorcansmith 0:2a53a4c3238c 2580 /** @todo add these counters! */
lorcansmith 0:2a53a4c3238c 2581 {
lorcansmith 0:2a53a4c3238c 2582 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2583 *uint_ptr = 0;
lorcansmith 0:2a53a4c3238c 2584 }
lorcansmith 0:2a53a4c3238c 2585 break;
lorcansmith 0:2a53a4c3238c 2586 case 16: /* ifOutOctets */
lorcansmith 0:2a53a4c3238c 2587 {
lorcansmith 0:2a53a4c3238c 2588 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2589 *uint_ptr = netif->ifoutoctets;
lorcansmith 0:2a53a4c3238c 2590 }
lorcansmith 0:2a53a4c3238c 2591 break;
lorcansmith 0:2a53a4c3238c 2592 case 17: /* ifOutUcastPkts */
lorcansmith 0:2a53a4c3238c 2593 {
lorcansmith 0:2a53a4c3238c 2594 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2595 *uint_ptr = netif->ifoutucastpkts;
lorcansmith 0:2a53a4c3238c 2596 }
lorcansmith 0:2a53a4c3238c 2597 break;
lorcansmith 0:2a53a4c3238c 2598 case 18: /* ifOutNUcastPkts */
lorcansmith 0:2a53a4c3238c 2599 {
lorcansmith 0:2a53a4c3238c 2600 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2601 *uint_ptr = netif->ifoutnucastpkts;
lorcansmith 0:2a53a4c3238c 2602 }
lorcansmith 0:2a53a4c3238c 2603 break;
lorcansmith 0:2a53a4c3238c 2604 case 19: /* ifOutDiscarts */
lorcansmith 0:2a53a4c3238c 2605 {
lorcansmith 0:2a53a4c3238c 2606 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2607 *uint_ptr = netif->ifoutdiscards;
lorcansmith 0:2a53a4c3238c 2608 }
lorcansmith 0:2a53a4c3238c 2609 break;
lorcansmith 0:2a53a4c3238c 2610 case 20: /* ifOutErrors */
lorcansmith 0:2a53a4c3238c 2611 /** @todo add this counter! */
lorcansmith 0:2a53a4c3238c 2612 {
lorcansmith 0:2a53a4c3238c 2613 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2614 *uint_ptr = 0;
lorcansmith 0:2a53a4c3238c 2615 }
lorcansmith 0:2a53a4c3238c 2616 break;
lorcansmith 0:2a53a4c3238c 2617 case 21: /* ifOutQLen */
lorcansmith 0:2a53a4c3238c 2618 /** @todo figure out if this must be 0 (no queue) or 1? */
lorcansmith 0:2a53a4c3238c 2619 {
lorcansmith 0:2a53a4c3238c 2620 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2621 *uint_ptr = 0;
lorcansmith 0:2a53a4c3238c 2622 }
lorcansmith 0:2a53a4c3238c 2623 break;
lorcansmith 0:2a53a4c3238c 2624 case 22: /* ifSpecific */
lorcansmith 0:2a53a4c3238c 2625 objectidncpy((s32_t*)value, (s32_t*)ifspecific.id, (u8_t)(len / sizeof(s32_t)));
lorcansmith 0:2a53a4c3238c 2626 break;
lorcansmith 0:2a53a4c3238c 2627 };
lorcansmith 0:2a53a4c3238c 2628 }
lorcansmith 0:2a53a4c3238c 2629
lorcansmith 0:2a53a4c3238c 2630 #if !SNMP_SAFE_REQUESTS
lorcansmith 0:2a53a4c3238c 2631 static u8_t
lorcansmith 0:2a53a4c3238c 2632 ifentry_set_test(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2633 {
lorcansmith 0:2a53a4c3238c 2634 struct netif *netif;
lorcansmith 0:2a53a4c3238c 2635 u8_t id, set_ok;
lorcansmith 0:2a53a4c3238c 2636 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 2637
lorcansmith 0:2a53a4c3238c 2638 set_ok = 0;
lorcansmith 0:2a53a4c3238c 2639 snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
lorcansmith 0:2a53a4c3238c 2640 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 2641 switch (id)
lorcansmith 0:2a53a4c3238c 2642 {
lorcansmith 0:2a53a4c3238c 2643 case 7: /* ifAdminStatus */
lorcansmith 0:2a53a4c3238c 2644 {
lorcansmith 0:2a53a4c3238c 2645 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2646 if (*sint_ptr == 1 || *sint_ptr == 2)
lorcansmith 0:2a53a4c3238c 2647 set_ok = 1;
lorcansmith 0:2a53a4c3238c 2648 }
lorcansmith 0:2a53a4c3238c 2649 break;
lorcansmith 0:2a53a4c3238c 2650 }
lorcansmith 0:2a53a4c3238c 2651 return set_ok;
lorcansmith 0:2a53a4c3238c 2652 }
lorcansmith 0:2a53a4c3238c 2653
lorcansmith 0:2a53a4c3238c 2654 static void
lorcansmith 0:2a53a4c3238c 2655 ifentry_set_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2656 {
lorcansmith 0:2a53a4c3238c 2657 struct netif *netif;
lorcansmith 0:2a53a4c3238c 2658 u8_t id;
lorcansmith 0:2a53a4c3238c 2659 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 2660
lorcansmith 0:2a53a4c3238c 2661 snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
lorcansmith 0:2a53a4c3238c 2662 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 2663 switch (id)
lorcansmith 0:2a53a4c3238c 2664 {
lorcansmith 0:2a53a4c3238c 2665 case 7: /* ifAdminStatus */
lorcansmith 0:2a53a4c3238c 2666 {
lorcansmith 0:2a53a4c3238c 2667 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2668 if (*sint_ptr == 1)
lorcansmith 0:2a53a4c3238c 2669 {
lorcansmith 0:2a53a4c3238c 2670 netif_set_up(netif);
lorcansmith 0:2a53a4c3238c 2671 }
lorcansmith 0:2a53a4c3238c 2672 else if (*sint_ptr == 2)
lorcansmith 0:2a53a4c3238c 2673 {
lorcansmith 0:2a53a4c3238c 2674 netif_set_down(netif);
lorcansmith 0:2a53a4c3238c 2675 }
lorcansmith 0:2a53a4c3238c 2676 }
lorcansmith 0:2a53a4c3238c 2677 break;
lorcansmith 0:2a53a4c3238c 2678 }
lorcansmith 0:2a53a4c3238c 2679 }
lorcansmith 0:2a53a4c3238c 2680 #endif /* SNMP_SAFE_REQUESTS */
lorcansmith 0:2a53a4c3238c 2681
lorcansmith 0:2a53a4c3238c 2682 /**
lorcansmith 0:2a53a4c3238c 2683 * Returns atentry object definitions.
lorcansmith 0:2a53a4c3238c 2684 *
lorcansmith 0:2a53a4c3238c 2685 * @param ident_len the address length (6)
lorcansmith 0:2a53a4c3238c 2686 * @param ident points to objectname.atifindex.atnetaddress
lorcansmith 0:2a53a4c3238c 2687 * @param od points to object definition.
lorcansmith 0:2a53a4c3238c 2688 */
lorcansmith 0:2a53a4c3238c 2689 static void
lorcansmith 0:2a53a4c3238c 2690 atentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 2691 {
lorcansmith 0:2a53a4c3238c 2692 /* return to object name, adding index depth (5) */
lorcansmith 0:2a53a4c3238c 2693 ident_len += 5;
lorcansmith 0:2a53a4c3238c 2694 ident -= 5;
lorcansmith 0:2a53a4c3238c 2695
lorcansmith 0:2a53a4c3238c 2696 if (ident_len == 6)
lorcansmith 0:2a53a4c3238c 2697 {
lorcansmith 0:2a53a4c3238c 2698 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 2699 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 2700
lorcansmith 0:2a53a4c3238c 2701 switch (ident[0])
lorcansmith 0:2a53a4c3238c 2702 {
lorcansmith 0:2a53a4c3238c 2703 case 1: /* atIfIndex */
lorcansmith 0:2a53a4c3238c 2704 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 2705 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 2706 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 2707 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 2708 break;
lorcansmith 0:2a53a4c3238c 2709 case 2: /* atPhysAddress */
lorcansmith 0:2a53a4c3238c 2710 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 2711 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 2712 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
lorcansmith 0:2a53a4c3238c 2713 od->v_len = 6; /** @todo try to use netif::hwaddr_len */
lorcansmith 0:2a53a4c3238c 2714 break;
lorcansmith 0:2a53a4c3238c 2715 case 3: /* atNetAddress */
lorcansmith 0:2a53a4c3238c 2716 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 2717 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 2718 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
lorcansmith 0:2a53a4c3238c 2719 od->v_len = 4;
lorcansmith 0:2a53a4c3238c 2720 break;
lorcansmith 0:2a53a4c3238c 2721 default:
lorcansmith 0:2a53a4c3238c 2722 LWIP_DEBUGF(SNMP_MIB_DEBUG,("atentry_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 2723 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 2724 break;
lorcansmith 0:2a53a4c3238c 2725 }
lorcansmith 0:2a53a4c3238c 2726 }
lorcansmith 0:2a53a4c3238c 2727 else
lorcansmith 0:2a53a4c3238c 2728 {
lorcansmith 0:2a53a4c3238c 2729 LWIP_DEBUGF(SNMP_MIB_DEBUG,("atentry_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 2730 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 2731 }
lorcansmith 0:2a53a4c3238c 2732 }
lorcansmith 0:2a53a4c3238c 2733
lorcansmith 0:2a53a4c3238c 2734 static void
lorcansmith 0:2a53a4c3238c 2735 atentry_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2736 {
lorcansmith 0:2a53a4c3238c 2737 #if LWIP_ARP
lorcansmith 0:2a53a4c3238c 2738 u8_t id;
lorcansmith 0:2a53a4c3238c 2739 struct eth_addr* ethaddr_ret;
lorcansmith 0:2a53a4c3238c 2740 ip_addr_t* ipaddr_ret;
lorcansmith 0:2a53a4c3238c 2741 #endif /* LWIP_ARP */
lorcansmith 0:2a53a4c3238c 2742 ip_addr_t ip;
lorcansmith 0:2a53a4c3238c 2743 struct netif *netif;
lorcansmith 0:2a53a4c3238c 2744
lorcansmith 0:2a53a4c3238c 2745 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 2746 LWIP_UNUSED_ARG(value);/* if !LWIP_ARP */
lorcansmith 0:2a53a4c3238c 2747
lorcansmith 0:2a53a4c3238c 2748 snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
lorcansmith 0:2a53a4c3238c 2749 snmp_oidtoip(&od->id_inst_ptr[2], &ip);
lorcansmith 0:2a53a4c3238c 2750
lorcansmith 0:2a53a4c3238c 2751 #if LWIP_ARP /** @todo implement a netif_find_addr */
lorcansmith 0:2a53a4c3238c 2752 if (etharp_find_addr(netif, &ip, &ethaddr_ret, &ipaddr_ret) > -1)
lorcansmith 0:2a53a4c3238c 2753 {
lorcansmith 0:2a53a4c3238c 2754 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 2755 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 2756 switch (id)
lorcansmith 0:2a53a4c3238c 2757 {
lorcansmith 0:2a53a4c3238c 2758 case 1: /* atIfIndex */
lorcansmith 0:2a53a4c3238c 2759 {
lorcansmith 0:2a53a4c3238c 2760 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2761 *sint_ptr = od->id_inst_ptr[1];
lorcansmith 0:2a53a4c3238c 2762 }
lorcansmith 0:2a53a4c3238c 2763 break;
lorcansmith 0:2a53a4c3238c 2764 case 2: /* atPhysAddress */
lorcansmith 0:2a53a4c3238c 2765 {
lorcansmith 0:2a53a4c3238c 2766 struct eth_addr *dst = (struct eth_addr*)value;
lorcansmith 0:2a53a4c3238c 2767
lorcansmith 0:2a53a4c3238c 2768 *dst = *ethaddr_ret;
lorcansmith 0:2a53a4c3238c 2769 }
lorcansmith 0:2a53a4c3238c 2770 break;
lorcansmith 0:2a53a4c3238c 2771 case 3: /* atNetAddress */
lorcansmith 0:2a53a4c3238c 2772 {
lorcansmith 0:2a53a4c3238c 2773 ip_addr_t *dst = (ip_addr_t*)value;
lorcansmith 0:2a53a4c3238c 2774
lorcansmith 0:2a53a4c3238c 2775 *dst = *ipaddr_ret;
lorcansmith 0:2a53a4c3238c 2776 }
lorcansmith 0:2a53a4c3238c 2777 break;
lorcansmith 0:2a53a4c3238c 2778 }
lorcansmith 0:2a53a4c3238c 2779 }
lorcansmith 0:2a53a4c3238c 2780 #endif /* LWIP_ARP */
lorcansmith 0:2a53a4c3238c 2781 }
lorcansmith 0:2a53a4c3238c 2782
lorcansmith 0:2a53a4c3238c 2783 static void
lorcansmith 0:2a53a4c3238c 2784 ip_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 2785 {
lorcansmith 0:2a53a4c3238c 2786 u8_t id;
lorcansmith 0:2a53a4c3238c 2787
lorcansmith 0:2a53a4c3238c 2788 /* return to object name, adding index depth (1) */
lorcansmith 0:2a53a4c3238c 2789 ident_len += 1;
lorcansmith 0:2a53a4c3238c 2790 ident -= 1;
lorcansmith 0:2a53a4c3238c 2791 if (ident_len == 2)
lorcansmith 0:2a53a4c3238c 2792 {
lorcansmith 0:2a53a4c3238c 2793 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 2794 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 2795
lorcansmith 0:2a53a4c3238c 2796 LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 2797 id = (u8_t)ident[0];
lorcansmith 0:2a53a4c3238c 2798 LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def ip.%"U16_F".0\n",(u16_t)id));
lorcansmith 0:2a53a4c3238c 2799 switch (id)
lorcansmith 0:2a53a4c3238c 2800 {
lorcansmith 0:2a53a4c3238c 2801 case 1: /* ipForwarding */
lorcansmith 0:2a53a4c3238c 2802 case 2: /* ipDefaultTTL */
lorcansmith 0:2a53a4c3238c 2803 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 2804 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 2805 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 2806 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 2807 break;
lorcansmith 0:2a53a4c3238c 2808 case 3: /* ipInReceives */
lorcansmith 0:2a53a4c3238c 2809 case 4: /* ipInHdrErrors */
lorcansmith 0:2a53a4c3238c 2810 case 5: /* ipInAddrErrors */
lorcansmith 0:2a53a4c3238c 2811 case 6: /* ipForwDatagrams */
lorcansmith 0:2a53a4c3238c 2812 case 7: /* ipInUnknownProtos */
lorcansmith 0:2a53a4c3238c 2813 case 8: /* ipInDiscards */
lorcansmith 0:2a53a4c3238c 2814 case 9: /* ipInDelivers */
lorcansmith 0:2a53a4c3238c 2815 case 10: /* ipOutRequests */
lorcansmith 0:2a53a4c3238c 2816 case 11: /* ipOutDiscards */
lorcansmith 0:2a53a4c3238c 2817 case 12: /* ipOutNoRoutes */
lorcansmith 0:2a53a4c3238c 2818 case 14: /* ipReasmReqds */
lorcansmith 0:2a53a4c3238c 2819 case 15: /* ipReasmOKs */
lorcansmith 0:2a53a4c3238c 2820 case 16: /* ipReasmFails */
lorcansmith 0:2a53a4c3238c 2821 case 17: /* ipFragOKs */
lorcansmith 0:2a53a4c3238c 2822 case 18: /* ipFragFails */
lorcansmith 0:2a53a4c3238c 2823 case 19: /* ipFragCreates */
lorcansmith 0:2a53a4c3238c 2824 case 23: /* ipRoutingDiscards */
lorcansmith 0:2a53a4c3238c 2825 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 2826 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2827 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
lorcansmith 0:2a53a4c3238c 2828 od->v_len = sizeof(u32_t);
lorcansmith 0:2a53a4c3238c 2829 break;
lorcansmith 0:2a53a4c3238c 2830 case 13: /* ipReasmTimeout */
lorcansmith 0:2a53a4c3238c 2831 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 2832 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 2833 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 2834 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 2835 break;
lorcansmith 0:2a53a4c3238c 2836 default:
lorcansmith 0:2a53a4c3238c 2837 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 2838 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 2839 break;
lorcansmith 0:2a53a4c3238c 2840 };
lorcansmith 0:2a53a4c3238c 2841 }
lorcansmith 0:2a53a4c3238c 2842 else
lorcansmith 0:2a53a4c3238c 2843 {
lorcansmith 0:2a53a4c3238c 2844 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 2845 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 2846 }
lorcansmith 0:2a53a4c3238c 2847 }
lorcansmith 0:2a53a4c3238c 2848
lorcansmith 0:2a53a4c3238c 2849 static void
lorcansmith 0:2a53a4c3238c 2850 ip_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 2851 {
lorcansmith 0:2a53a4c3238c 2852 u8_t id;
lorcansmith 0:2a53a4c3238c 2853
lorcansmith 0:2a53a4c3238c 2854 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 2855 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 2856 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 2857 switch (id)
lorcansmith 0:2a53a4c3238c 2858 {
lorcansmith 0:2a53a4c3238c 2859 case 1: /* ipForwarding */
lorcansmith 0:2a53a4c3238c 2860 {
lorcansmith 0:2a53a4c3238c 2861 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2862 #if IP_FORWARD
lorcansmith 0:2a53a4c3238c 2863 /* forwarding */
lorcansmith 0:2a53a4c3238c 2864 *sint_ptr = 1;
lorcansmith 0:2a53a4c3238c 2865 #else
lorcansmith 0:2a53a4c3238c 2866 /* not-forwarding */
lorcansmith 0:2a53a4c3238c 2867 *sint_ptr = 2;
lorcansmith 0:2a53a4c3238c 2868 #endif
lorcansmith 0:2a53a4c3238c 2869 }
lorcansmith 0:2a53a4c3238c 2870 break;
lorcansmith 0:2a53a4c3238c 2871 case 2: /* ipDefaultTTL */
lorcansmith 0:2a53a4c3238c 2872 {
lorcansmith 0:2a53a4c3238c 2873 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2874 *sint_ptr = IP_DEFAULT_TTL;
lorcansmith 0:2a53a4c3238c 2875 }
lorcansmith 0:2a53a4c3238c 2876 break;
lorcansmith 0:2a53a4c3238c 2877 case 3: /* ipInReceives */
lorcansmith 0:2a53a4c3238c 2878 {
lorcansmith 0:2a53a4c3238c 2879 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2880 *uint_ptr = ipinreceives;
lorcansmith 0:2a53a4c3238c 2881 }
lorcansmith 0:2a53a4c3238c 2882 break;
lorcansmith 0:2a53a4c3238c 2883 case 4: /* ipInHdrErrors */
lorcansmith 0:2a53a4c3238c 2884 {
lorcansmith 0:2a53a4c3238c 2885 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2886 *uint_ptr = ipinhdrerrors;
lorcansmith 0:2a53a4c3238c 2887 }
lorcansmith 0:2a53a4c3238c 2888 break;
lorcansmith 0:2a53a4c3238c 2889 case 5: /* ipInAddrErrors */
lorcansmith 0:2a53a4c3238c 2890 {
lorcansmith 0:2a53a4c3238c 2891 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2892 *uint_ptr = ipinaddrerrors;
lorcansmith 0:2a53a4c3238c 2893 }
lorcansmith 0:2a53a4c3238c 2894 break;
lorcansmith 0:2a53a4c3238c 2895 case 6: /* ipForwDatagrams */
lorcansmith 0:2a53a4c3238c 2896 {
lorcansmith 0:2a53a4c3238c 2897 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2898 *uint_ptr = ipforwdatagrams;
lorcansmith 0:2a53a4c3238c 2899 }
lorcansmith 0:2a53a4c3238c 2900 break;
lorcansmith 0:2a53a4c3238c 2901 case 7: /* ipInUnknownProtos */
lorcansmith 0:2a53a4c3238c 2902 {
lorcansmith 0:2a53a4c3238c 2903 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2904 *uint_ptr = ipinunknownprotos;
lorcansmith 0:2a53a4c3238c 2905 }
lorcansmith 0:2a53a4c3238c 2906 break;
lorcansmith 0:2a53a4c3238c 2907 case 8: /* ipInDiscards */
lorcansmith 0:2a53a4c3238c 2908 {
lorcansmith 0:2a53a4c3238c 2909 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2910 *uint_ptr = ipindiscards;
lorcansmith 0:2a53a4c3238c 2911 }
lorcansmith 0:2a53a4c3238c 2912 break;
lorcansmith 0:2a53a4c3238c 2913 case 9: /* ipInDelivers */
lorcansmith 0:2a53a4c3238c 2914 {
lorcansmith 0:2a53a4c3238c 2915 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2916 *uint_ptr = ipindelivers;
lorcansmith 0:2a53a4c3238c 2917 }
lorcansmith 0:2a53a4c3238c 2918 break;
lorcansmith 0:2a53a4c3238c 2919 case 10: /* ipOutRequests */
lorcansmith 0:2a53a4c3238c 2920 {
lorcansmith 0:2a53a4c3238c 2921 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2922 *uint_ptr = ipoutrequests;
lorcansmith 0:2a53a4c3238c 2923 }
lorcansmith 0:2a53a4c3238c 2924 break;
lorcansmith 0:2a53a4c3238c 2925 case 11: /* ipOutDiscards */
lorcansmith 0:2a53a4c3238c 2926 {
lorcansmith 0:2a53a4c3238c 2927 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2928 *uint_ptr = ipoutdiscards;
lorcansmith 0:2a53a4c3238c 2929 }
lorcansmith 0:2a53a4c3238c 2930 break;
lorcansmith 0:2a53a4c3238c 2931 case 12: /* ipOutNoRoutes */
lorcansmith 0:2a53a4c3238c 2932 {
lorcansmith 0:2a53a4c3238c 2933 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2934 *uint_ptr = ipoutnoroutes;
lorcansmith 0:2a53a4c3238c 2935 }
lorcansmith 0:2a53a4c3238c 2936 break;
lorcansmith 0:2a53a4c3238c 2937 case 13: /* ipReasmTimeout */
lorcansmith 0:2a53a4c3238c 2938 {
lorcansmith 0:2a53a4c3238c 2939 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 2940 #if IP_REASSEMBLY
lorcansmith 0:2a53a4c3238c 2941 *sint_ptr = IP_REASS_MAXAGE;
lorcansmith 0:2a53a4c3238c 2942 #else
lorcansmith 0:2a53a4c3238c 2943 *sint_ptr = 0;
lorcansmith 0:2a53a4c3238c 2944 #endif
lorcansmith 0:2a53a4c3238c 2945 }
lorcansmith 0:2a53a4c3238c 2946 break;
lorcansmith 0:2a53a4c3238c 2947 case 14: /* ipReasmReqds */
lorcansmith 0:2a53a4c3238c 2948 {
lorcansmith 0:2a53a4c3238c 2949 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2950 *uint_ptr = ipreasmreqds;
lorcansmith 0:2a53a4c3238c 2951 }
lorcansmith 0:2a53a4c3238c 2952 break;
lorcansmith 0:2a53a4c3238c 2953 case 15: /* ipReasmOKs */
lorcansmith 0:2a53a4c3238c 2954 {
lorcansmith 0:2a53a4c3238c 2955 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2956 *uint_ptr = ipreasmoks;
lorcansmith 0:2a53a4c3238c 2957 }
lorcansmith 0:2a53a4c3238c 2958 break;
lorcansmith 0:2a53a4c3238c 2959 case 16: /* ipReasmFails */
lorcansmith 0:2a53a4c3238c 2960 {
lorcansmith 0:2a53a4c3238c 2961 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2962 *uint_ptr = ipreasmfails;
lorcansmith 0:2a53a4c3238c 2963 }
lorcansmith 0:2a53a4c3238c 2964 break;
lorcansmith 0:2a53a4c3238c 2965 case 17: /* ipFragOKs */
lorcansmith 0:2a53a4c3238c 2966 {
lorcansmith 0:2a53a4c3238c 2967 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2968 *uint_ptr = ipfragoks;
lorcansmith 0:2a53a4c3238c 2969 }
lorcansmith 0:2a53a4c3238c 2970 break;
lorcansmith 0:2a53a4c3238c 2971 case 18: /* ipFragFails */
lorcansmith 0:2a53a4c3238c 2972 {
lorcansmith 0:2a53a4c3238c 2973 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2974 *uint_ptr = ipfragfails;
lorcansmith 0:2a53a4c3238c 2975 }
lorcansmith 0:2a53a4c3238c 2976 break;
lorcansmith 0:2a53a4c3238c 2977 case 19: /* ipFragCreates */
lorcansmith 0:2a53a4c3238c 2978 {
lorcansmith 0:2a53a4c3238c 2979 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2980 *uint_ptr = ipfragcreates;
lorcansmith 0:2a53a4c3238c 2981 }
lorcansmith 0:2a53a4c3238c 2982 break;
lorcansmith 0:2a53a4c3238c 2983 case 23: /* ipRoutingDiscards */
lorcansmith 0:2a53a4c3238c 2984 /** @todo can lwIP discard routes at all?? hardwire this to 0?? */
lorcansmith 0:2a53a4c3238c 2985 {
lorcansmith 0:2a53a4c3238c 2986 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 2987 *uint_ptr = iproutingdiscards;
lorcansmith 0:2a53a4c3238c 2988 }
lorcansmith 0:2a53a4c3238c 2989 break;
lorcansmith 0:2a53a4c3238c 2990 };
lorcansmith 0:2a53a4c3238c 2991 }
lorcansmith 0:2a53a4c3238c 2992
lorcansmith 0:2a53a4c3238c 2993 /**
lorcansmith 0:2a53a4c3238c 2994 * Test ip object value before setting.
lorcansmith 0:2a53a4c3238c 2995 *
lorcansmith 0:2a53a4c3238c 2996 * @param od is the object definition
lorcansmith 0:2a53a4c3238c 2997 * @param len return value space (in bytes)
lorcansmith 0:2a53a4c3238c 2998 * @param value points to (varbind) space to copy value from.
lorcansmith 0:2a53a4c3238c 2999 *
lorcansmith 0:2a53a4c3238c 3000 * @note we allow set if the value matches the hardwired value,
lorcansmith 0:2a53a4c3238c 3001 * otherwise return badvalue.
lorcansmith 0:2a53a4c3238c 3002 */
lorcansmith 0:2a53a4c3238c 3003 static u8_t
lorcansmith 0:2a53a4c3238c 3004 ip_set_test(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 3005 {
lorcansmith 0:2a53a4c3238c 3006 u8_t id, set_ok;
lorcansmith 0:2a53a4c3238c 3007 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3008
lorcansmith 0:2a53a4c3238c 3009 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 3010 set_ok = 0;
lorcansmith 0:2a53a4c3238c 3011 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3012 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 3013 switch (id)
lorcansmith 0:2a53a4c3238c 3014 {
lorcansmith 0:2a53a4c3238c 3015 case 1: /* ipForwarding */
lorcansmith 0:2a53a4c3238c 3016 #if IP_FORWARD
lorcansmith 0:2a53a4c3238c 3017 /* forwarding */
lorcansmith 0:2a53a4c3238c 3018 if (*sint_ptr == 1)
lorcansmith 0:2a53a4c3238c 3019 #else
lorcansmith 0:2a53a4c3238c 3020 /* not-forwarding */
lorcansmith 0:2a53a4c3238c 3021 if (*sint_ptr == 2)
lorcansmith 0:2a53a4c3238c 3022 #endif
lorcansmith 0:2a53a4c3238c 3023 {
lorcansmith 0:2a53a4c3238c 3024 set_ok = 1;
lorcansmith 0:2a53a4c3238c 3025 }
lorcansmith 0:2a53a4c3238c 3026 break;
lorcansmith 0:2a53a4c3238c 3027 case 2: /* ipDefaultTTL */
lorcansmith 0:2a53a4c3238c 3028 if (*sint_ptr == IP_DEFAULT_TTL)
lorcansmith 0:2a53a4c3238c 3029 {
lorcansmith 0:2a53a4c3238c 3030 set_ok = 1;
lorcansmith 0:2a53a4c3238c 3031 }
lorcansmith 0:2a53a4c3238c 3032 break;
lorcansmith 0:2a53a4c3238c 3033 };
lorcansmith 0:2a53a4c3238c 3034 return set_ok;
lorcansmith 0:2a53a4c3238c 3035 }
lorcansmith 0:2a53a4c3238c 3036
lorcansmith 0:2a53a4c3238c 3037 static void
lorcansmith 0:2a53a4c3238c 3038 ip_addrentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 3039 {
lorcansmith 0:2a53a4c3238c 3040 /* return to object name, adding index depth (4) */
lorcansmith 0:2a53a4c3238c 3041 ident_len += 4;
lorcansmith 0:2a53a4c3238c 3042 ident -= 4;
lorcansmith 0:2a53a4c3238c 3043
lorcansmith 0:2a53a4c3238c 3044 if (ident_len == 5)
lorcansmith 0:2a53a4c3238c 3045 {
lorcansmith 0:2a53a4c3238c 3046 u8_t id;
lorcansmith 0:2a53a4c3238c 3047
lorcansmith 0:2a53a4c3238c 3048 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 3049 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 3050
lorcansmith 0:2a53a4c3238c 3051 LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3052 id = (u8_t)ident[0];
lorcansmith 0:2a53a4c3238c 3053 switch (id)
lorcansmith 0:2a53a4c3238c 3054 {
lorcansmith 0:2a53a4c3238c 3055 case 1: /* ipAdEntAddr */
lorcansmith 0:2a53a4c3238c 3056 case 3: /* ipAdEntNetMask */
lorcansmith 0:2a53a4c3238c 3057 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3058 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3059 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
lorcansmith 0:2a53a4c3238c 3060 od->v_len = 4;
lorcansmith 0:2a53a4c3238c 3061 break;
lorcansmith 0:2a53a4c3238c 3062 case 2: /* ipAdEntIfIndex */
lorcansmith 0:2a53a4c3238c 3063 case 4: /* ipAdEntBcastAddr */
lorcansmith 0:2a53a4c3238c 3064 case 5: /* ipAdEntReasmMaxSize */
lorcansmith 0:2a53a4c3238c 3065 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3066 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3067 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 3068 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 3069 break;
lorcansmith 0:2a53a4c3238c 3070 default:
lorcansmith 0:2a53a4c3238c 3071 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_addrentry_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 3072 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3073 break;
lorcansmith 0:2a53a4c3238c 3074 }
lorcansmith 0:2a53a4c3238c 3075 }
lorcansmith 0:2a53a4c3238c 3076 else
lorcansmith 0:2a53a4c3238c 3077 {
lorcansmith 0:2a53a4c3238c 3078 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_addrentry_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 3079 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3080 }
lorcansmith 0:2a53a4c3238c 3081 }
lorcansmith 0:2a53a4c3238c 3082
lorcansmith 0:2a53a4c3238c 3083 static void
lorcansmith 0:2a53a4c3238c 3084 ip_addrentry_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 3085 {
lorcansmith 0:2a53a4c3238c 3086 u8_t id;
lorcansmith 0:2a53a4c3238c 3087 u16_t ifidx;
lorcansmith 0:2a53a4c3238c 3088 ip_addr_t ip;
lorcansmith 0:2a53a4c3238c 3089 struct netif *netif = netif_list;
lorcansmith 0:2a53a4c3238c 3090
lorcansmith 0:2a53a4c3238c 3091 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 3092 snmp_oidtoip(&od->id_inst_ptr[1], &ip);
lorcansmith 0:2a53a4c3238c 3093 ifidx = 0;
lorcansmith 0:2a53a4c3238c 3094 while ((netif != NULL) && !ip_addr_cmp(&ip, &netif->ip_addr))
lorcansmith 0:2a53a4c3238c 3095 {
lorcansmith 0:2a53a4c3238c 3096 netif = netif->next;
lorcansmith 0:2a53a4c3238c 3097 ifidx++;
lorcansmith 0:2a53a4c3238c 3098 }
lorcansmith 0:2a53a4c3238c 3099
lorcansmith 0:2a53a4c3238c 3100 if (netif != NULL)
lorcansmith 0:2a53a4c3238c 3101 {
lorcansmith 0:2a53a4c3238c 3102 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3103 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 3104 switch (id)
lorcansmith 0:2a53a4c3238c 3105 {
lorcansmith 0:2a53a4c3238c 3106 case 1: /* ipAdEntAddr */
lorcansmith 0:2a53a4c3238c 3107 {
lorcansmith 0:2a53a4c3238c 3108 ip_addr_t *dst = (ip_addr_t*)value;
lorcansmith 0:2a53a4c3238c 3109 *dst = netif->ip_addr;
lorcansmith 0:2a53a4c3238c 3110 }
lorcansmith 0:2a53a4c3238c 3111 break;
lorcansmith 0:2a53a4c3238c 3112 case 2: /* ipAdEntIfIndex */
lorcansmith 0:2a53a4c3238c 3113 {
lorcansmith 0:2a53a4c3238c 3114 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3115 *sint_ptr = ifidx + 1;
lorcansmith 0:2a53a4c3238c 3116 }
lorcansmith 0:2a53a4c3238c 3117 break;
lorcansmith 0:2a53a4c3238c 3118 case 3: /* ipAdEntNetMask */
lorcansmith 0:2a53a4c3238c 3119 {
lorcansmith 0:2a53a4c3238c 3120 ip_addr_t *dst = (ip_addr_t*)value;
lorcansmith 0:2a53a4c3238c 3121 *dst = netif->netmask;
lorcansmith 0:2a53a4c3238c 3122 }
lorcansmith 0:2a53a4c3238c 3123 break;
lorcansmith 0:2a53a4c3238c 3124 case 4: /* ipAdEntBcastAddr */
lorcansmith 0:2a53a4c3238c 3125 {
lorcansmith 0:2a53a4c3238c 3126 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3127
lorcansmith 0:2a53a4c3238c 3128 /* lwIP oddity, there's no broadcast
lorcansmith 0:2a53a4c3238c 3129 address in the netif we can rely on */
lorcansmith 0:2a53a4c3238c 3130 *sint_ptr = IPADDR_BROADCAST & 1;
lorcansmith 0:2a53a4c3238c 3131 }
lorcansmith 0:2a53a4c3238c 3132 break;
lorcansmith 0:2a53a4c3238c 3133 case 5: /* ipAdEntReasmMaxSize */
lorcansmith 0:2a53a4c3238c 3134 {
lorcansmith 0:2a53a4c3238c 3135 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3136 #if IP_REASSEMBLY
lorcansmith 0:2a53a4c3238c 3137 /* @todo The theoretical maximum is IP_REASS_MAX_PBUFS * size of the pbufs,
lorcansmith 0:2a53a4c3238c 3138 * but only if receiving one fragmented packet at a time.
lorcansmith 0:2a53a4c3238c 3139 * The current solution is to calculate for 2 simultaneous packets...
lorcansmith 0:2a53a4c3238c 3140 */
lorcansmith 0:2a53a4c3238c 3141 *sint_ptr = (IP_HLEN + ((IP_REASS_MAX_PBUFS/2) *
lorcansmith 0:2a53a4c3238c 3142 (PBUF_POOL_BUFSIZE - PBUF_LINK_HLEN - IP_HLEN)));
lorcansmith 0:2a53a4c3238c 3143 #else
lorcansmith 0:2a53a4c3238c 3144 /** @todo returning MTU would be a bad thing and
lorcansmith 0:2a53a4c3238c 3145 returning a wild guess like '576' isn't good either */
lorcansmith 0:2a53a4c3238c 3146 *sint_ptr = 0;
lorcansmith 0:2a53a4c3238c 3147 #endif
lorcansmith 0:2a53a4c3238c 3148 }
lorcansmith 0:2a53a4c3238c 3149 break;
lorcansmith 0:2a53a4c3238c 3150 }
lorcansmith 0:2a53a4c3238c 3151 }
lorcansmith 0:2a53a4c3238c 3152 }
lorcansmith 0:2a53a4c3238c 3153
lorcansmith 0:2a53a4c3238c 3154 /**
lorcansmith 0:2a53a4c3238c 3155 * @note
lorcansmith 0:2a53a4c3238c 3156 * lwIP IP routing is currently using the network addresses in netif_list.
lorcansmith 0:2a53a4c3238c 3157 * if no suitable network IP is found in netif_list, the default_netif is used.
lorcansmith 0:2a53a4c3238c 3158 */
lorcansmith 0:2a53a4c3238c 3159 static void
lorcansmith 0:2a53a4c3238c 3160 ip_rteentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 3161 {
lorcansmith 0:2a53a4c3238c 3162 u8_t id;
lorcansmith 0:2a53a4c3238c 3163
lorcansmith 0:2a53a4c3238c 3164 /* return to object name, adding index depth (4) */
lorcansmith 0:2a53a4c3238c 3165 ident_len += 4;
lorcansmith 0:2a53a4c3238c 3166 ident -= 4;
lorcansmith 0:2a53a4c3238c 3167
lorcansmith 0:2a53a4c3238c 3168 if (ident_len == 5)
lorcansmith 0:2a53a4c3238c 3169 {
lorcansmith 0:2a53a4c3238c 3170 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 3171 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 3172
lorcansmith 0:2a53a4c3238c 3173 LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3174 id = (u8_t)ident[0];
lorcansmith 0:2a53a4c3238c 3175 switch (id)
lorcansmith 0:2a53a4c3238c 3176 {
lorcansmith 0:2a53a4c3238c 3177 case 1: /* ipRouteDest */
lorcansmith 0:2a53a4c3238c 3178 case 7: /* ipRouteNextHop */
lorcansmith 0:2a53a4c3238c 3179 case 11: /* ipRouteMask */
lorcansmith 0:2a53a4c3238c 3180 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3181 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 3182 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
lorcansmith 0:2a53a4c3238c 3183 od->v_len = 4;
lorcansmith 0:2a53a4c3238c 3184 break;
lorcansmith 0:2a53a4c3238c 3185 case 2: /* ipRouteIfIndex */
lorcansmith 0:2a53a4c3238c 3186 case 3: /* ipRouteMetric1 */
lorcansmith 0:2a53a4c3238c 3187 case 4: /* ipRouteMetric2 */
lorcansmith 0:2a53a4c3238c 3188 case 5: /* ipRouteMetric3 */
lorcansmith 0:2a53a4c3238c 3189 case 6: /* ipRouteMetric4 */
lorcansmith 0:2a53a4c3238c 3190 case 8: /* ipRouteType */
lorcansmith 0:2a53a4c3238c 3191 case 10: /* ipRouteAge */
lorcansmith 0:2a53a4c3238c 3192 case 12: /* ipRouteMetric5 */
lorcansmith 0:2a53a4c3238c 3193 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3194 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 3195 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 3196 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 3197 break;
lorcansmith 0:2a53a4c3238c 3198 case 9: /* ipRouteProto */
lorcansmith 0:2a53a4c3238c 3199 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3200 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3201 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 3202 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 3203 break;
lorcansmith 0:2a53a4c3238c 3204 case 13: /* ipRouteInfo */
lorcansmith 0:2a53a4c3238c 3205 /** @note returning zeroDotZero (0.0) no routing protocol specific MIB */
lorcansmith 0:2a53a4c3238c 3206 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3207 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3208 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID);
lorcansmith 0:2a53a4c3238c 3209 od->v_len = iprouteinfo.len * sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 3210 break;
lorcansmith 0:2a53a4c3238c 3211 default:
lorcansmith 0:2a53a4c3238c 3212 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_rteentry_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 3213 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3214 break;
lorcansmith 0:2a53a4c3238c 3215 }
lorcansmith 0:2a53a4c3238c 3216 }
lorcansmith 0:2a53a4c3238c 3217 else
lorcansmith 0:2a53a4c3238c 3218 {
lorcansmith 0:2a53a4c3238c 3219 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_rteentry_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 3220 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3221 }
lorcansmith 0:2a53a4c3238c 3222 }
lorcansmith 0:2a53a4c3238c 3223
lorcansmith 0:2a53a4c3238c 3224 static void
lorcansmith 0:2a53a4c3238c 3225 ip_rteentry_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 3226 {
lorcansmith 0:2a53a4c3238c 3227 struct netif *netif;
lorcansmith 0:2a53a4c3238c 3228 ip_addr_t dest;
lorcansmith 0:2a53a4c3238c 3229 s32_t *ident;
lorcansmith 0:2a53a4c3238c 3230 u8_t id;
lorcansmith 0:2a53a4c3238c 3231
lorcansmith 0:2a53a4c3238c 3232 ident = od->id_inst_ptr;
lorcansmith 0:2a53a4c3238c 3233 snmp_oidtoip(&ident[1], &dest);
lorcansmith 0:2a53a4c3238c 3234
lorcansmith 0:2a53a4c3238c 3235 if (ip_addr_isany(&dest))
lorcansmith 0:2a53a4c3238c 3236 {
lorcansmith 0:2a53a4c3238c 3237 /* ip_route() uses default netif for default route */
lorcansmith 0:2a53a4c3238c 3238 netif = netif_default;
lorcansmith 0:2a53a4c3238c 3239 }
lorcansmith 0:2a53a4c3238c 3240 else
lorcansmith 0:2a53a4c3238c 3241 {
lorcansmith 0:2a53a4c3238c 3242 /* not using ip_route(), need exact match! */
lorcansmith 0:2a53a4c3238c 3243 netif = netif_list;
lorcansmith 0:2a53a4c3238c 3244 while ((netif != NULL) &&
lorcansmith 0:2a53a4c3238c 3245 !ip_addr_netcmp(&dest, &(netif->ip_addr), &(netif->netmask)) )
lorcansmith 0:2a53a4c3238c 3246 {
lorcansmith 0:2a53a4c3238c 3247 netif = netif->next;
lorcansmith 0:2a53a4c3238c 3248 }
lorcansmith 0:2a53a4c3238c 3249 }
lorcansmith 0:2a53a4c3238c 3250 if (netif != NULL)
lorcansmith 0:2a53a4c3238c 3251 {
lorcansmith 0:2a53a4c3238c 3252 LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3253 id = (u8_t)ident[0];
lorcansmith 0:2a53a4c3238c 3254 switch (id)
lorcansmith 0:2a53a4c3238c 3255 {
lorcansmith 0:2a53a4c3238c 3256 case 1: /* ipRouteDest */
lorcansmith 0:2a53a4c3238c 3257 {
lorcansmith 0:2a53a4c3238c 3258 ip_addr_t *dst = (ip_addr_t*)value;
lorcansmith 0:2a53a4c3238c 3259
lorcansmith 0:2a53a4c3238c 3260 if (ip_addr_isany(&dest))
lorcansmith 0:2a53a4c3238c 3261 {
lorcansmith 0:2a53a4c3238c 3262 /* default rte has 0.0.0.0 dest */
lorcansmith 0:2a53a4c3238c 3263 ip_addr_set_zero(dst);
lorcansmith 0:2a53a4c3238c 3264 }
lorcansmith 0:2a53a4c3238c 3265 else
lorcansmith 0:2a53a4c3238c 3266 {
lorcansmith 0:2a53a4c3238c 3267 /* netifs have netaddress dest */
lorcansmith 0:2a53a4c3238c 3268 ip_addr_get_network(dst, &netif->ip_addr, &netif->netmask);
lorcansmith 0:2a53a4c3238c 3269 }
lorcansmith 0:2a53a4c3238c 3270 }
lorcansmith 0:2a53a4c3238c 3271 break;
lorcansmith 0:2a53a4c3238c 3272 case 2: /* ipRouteIfIndex */
lorcansmith 0:2a53a4c3238c 3273 {
lorcansmith 0:2a53a4c3238c 3274 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3275
lorcansmith 0:2a53a4c3238c 3276 snmp_netiftoifindex(netif, sint_ptr);
lorcansmith 0:2a53a4c3238c 3277 }
lorcansmith 0:2a53a4c3238c 3278 break;
lorcansmith 0:2a53a4c3238c 3279 case 3: /* ipRouteMetric1 */
lorcansmith 0:2a53a4c3238c 3280 {
lorcansmith 0:2a53a4c3238c 3281 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3282
lorcansmith 0:2a53a4c3238c 3283 if (ip_addr_isany(&dest))
lorcansmith 0:2a53a4c3238c 3284 {
lorcansmith 0:2a53a4c3238c 3285 /* default rte has metric 1 */
lorcansmith 0:2a53a4c3238c 3286 *sint_ptr = 1;
lorcansmith 0:2a53a4c3238c 3287 }
lorcansmith 0:2a53a4c3238c 3288 else
lorcansmith 0:2a53a4c3238c 3289 {
lorcansmith 0:2a53a4c3238c 3290 /* other rtes have metric 0 */
lorcansmith 0:2a53a4c3238c 3291 *sint_ptr = 0;
lorcansmith 0:2a53a4c3238c 3292 }
lorcansmith 0:2a53a4c3238c 3293 }
lorcansmith 0:2a53a4c3238c 3294 break;
lorcansmith 0:2a53a4c3238c 3295 case 4: /* ipRouteMetric2 */
lorcansmith 0:2a53a4c3238c 3296 case 5: /* ipRouteMetric3 */
lorcansmith 0:2a53a4c3238c 3297 case 6: /* ipRouteMetric4 */
lorcansmith 0:2a53a4c3238c 3298 case 12: /* ipRouteMetric5 */
lorcansmith 0:2a53a4c3238c 3299 {
lorcansmith 0:2a53a4c3238c 3300 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3301 /* not used */
lorcansmith 0:2a53a4c3238c 3302 *sint_ptr = -1;
lorcansmith 0:2a53a4c3238c 3303 }
lorcansmith 0:2a53a4c3238c 3304 break;
lorcansmith 0:2a53a4c3238c 3305 case 7: /* ipRouteNextHop */
lorcansmith 0:2a53a4c3238c 3306 {
lorcansmith 0:2a53a4c3238c 3307 ip_addr_t *dst = (ip_addr_t*)value;
lorcansmith 0:2a53a4c3238c 3308
lorcansmith 0:2a53a4c3238c 3309 if (ip_addr_isany(&dest))
lorcansmith 0:2a53a4c3238c 3310 {
lorcansmith 0:2a53a4c3238c 3311 /* default rte: gateway */
lorcansmith 0:2a53a4c3238c 3312 *dst = netif->gw;
lorcansmith 0:2a53a4c3238c 3313 }
lorcansmith 0:2a53a4c3238c 3314 else
lorcansmith 0:2a53a4c3238c 3315 {
lorcansmith 0:2a53a4c3238c 3316 /* other rtes: netif ip_addr */
lorcansmith 0:2a53a4c3238c 3317 *dst = netif->ip_addr;
lorcansmith 0:2a53a4c3238c 3318 }
lorcansmith 0:2a53a4c3238c 3319 }
lorcansmith 0:2a53a4c3238c 3320 break;
lorcansmith 0:2a53a4c3238c 3321 case 8: /* ipRouteType */
lorcansmith 0:2a53a4c3238c 3322 {
lorcansmith 0:2a53a4c3238c 3323 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3324
lorcansmith 0:2a53a4c3238c 3325 if (ip_addr_isany(&dest))
lorcansmith 0:2a53a4c3238c 3326 {
lorcansmith 0:2a53a4c3238c 3327 /* default rte is indirect */
lorcansmith 0:2a53a4c3238c 3328 *sint_ptr = 4;
lorcansmith 0:2a53a4c3238c 3329 }
lorcansmith 0:2a53a4c3238c 3330 else
lorcansmith 0:2a53a4c3238c 3331 {
lorcansmith 0:2a53a4c3238c 3332 /* other rtes are direct */
lorcansmith 0:2a53a4c3238c 3333 *sint_ptr = 3;
lorcansmith 0:2a53a4c3238c 3334 }
lorcansmith 0:2a53a4c3238c 3335 }
lorcansmith 0:2a53a4c3238c 3336 break;
lorcansmith 0:2a53a4c3238c 3337 case 9: /* ipRouteProto */
lorcansmith 0:2a53a4c3238c 3338 {
lorcansmith 0:2a53a4c3238c 3339 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3340 /* locally defined routes */
lorcansmith 0:2a53a4c3238c 3341 *sint_ptr = 2;
lorcansmith 0:2a53a4c3238c 3342 }
lorcansmith 0:2a53a4c3238c 3343 break;
lorcansmith 0:2a53a4c3238c 3344 case 10: /* ipRouteAge */
lorcansmith 0:2a53a4c3238c 3345 {
lorcansmith 0:2a53a4c3238c 3346 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3347 /** @todo (sysuptime - timestamp last change) / 100
lorcansmith 0:2a53a4c3238c 3348 @see snmp_insert_iprteidx_tree() */
lorcansmith 0:2a53a4c3238c 3349 *sint_ptr = 0;
lorcansmith 0:2a53a4c3238c 3350 }
lorcansmith 0:2a53a4c3238c 3351 break;
lorcansmith 0:2a53a4c3238c 3352 case 11: /* ipRouteMask */
lorcansmith 0:2a53a4c3238c 3353 {
lorcansmith 0:2a53a4c3238c 3354 ip_addr_t *dst = (ip_addr_t*)value;
lorcansmith 0:2a53a4c3238c 3355
lorcansmith 0:2a53a4c3238c 3356 if (ip_addr_isany(&dest))
lorcansmith 0:2a53a4c3238c 3357 {
lorcansmith 0:2a53a4c3238c 3358 /* default rte use 0.0.0.0 mask */
lorcansmith 0:2a53a4c3238c 3359 ip_addr_set_zero(dst);
lorcansmith 0:2a53a4c3238c 3360 }
lorcansmith 0:2a53a4c3238c 3361 else
lorcansmith 0:2a53a4c3238c 3362 {
lorcansmith 0:2a53a4c3238c 3363 /* other rtes use netmask */
lorcansmith 0:2a53a4c3238c 3364 *dst = netif->netmask;
lorcansmith 0:2a53a4c3238c 3365 }
lorcansmith 0:2a53a4c3238c 3366 }
lorcansmith 0:2a53a4c3238c 3367 break;
lorcansmith 0:2a53a4c3238c 3368 case 13: /* ipRouteInfo */
lorcansmith 0:2a53a4c3238c 3369 objectidncpy((s32_t*)value, (s32_t*)iprouteinfo.id, (u8_t)(len / sizeof(s32_t)));
lorcansmith 0:2a53a4c3238c 3370 break;
lorcansmith 0:2a53a4c3238c 3371 }
lorcansmith 0:2a53a4c3238c 3372 }
lorcansmith 0:2a53a4c3238c 3373 }
lorcansmith 0:2a53a4c3238c 3374
lorcansmith 0:2a53a4c3238c 3375 static void
lorcansmith 0:2a53a4c3238c 3376 ip_ntomentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 3377 {
lorcansmith 0:2a53a4c3238c 3378 /* return to object name, adding index depth (5) */
lorcansmith 0:2a53a4c3238c 3379 ident_len += 5;
lorcansmith 0:2a53a4c3238c 3380 ident -= 5;
lorcansmith 0:2a53a4c3238c 3381
lorcansmith 0:2a53a4c3238c 3382 if (ident_len == 6)
lorcansmith 0:2a53a4c3238c 3383 {
lorcansmith 0:2a53a4c3238c 3384 u8_t id;
lorcansmith 0:2a53a4c3238c 3385
lorcansmith 0:2a53a4c3238c 3386 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 3387 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 3388
lorcansmith 0:2a53a4c3238c 3389 LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3390 id = (u8_t)ident[0];
lorcansmith 0:2a53a4c3238c 3391 switch (id)
lorcansmith 0:2a53a4c3238c 3392 {
lorcansmith 0:2a53a4c3238c 3393 case 1: /* ipNetToMediaIfIndex */
lorcansmith 0:2a53a4c3238c 3394 case 4: /* ipNetToMediaType */
lorcansmith 0:2a53a4c3238c 3395 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3396 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 3397 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 3398 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 3399 break;
lorcansmith 0:2a53a4c3238c 3400 case 2: /* ipNetToMediaPhysAddress */
lorcansmith 0:2a53a4c3238c 3401 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3402 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 3403 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
lorcansmith 0:2a53a4c3238c 3404 od->v_len = 6; /** @todo try to use netif::hwaddr_len */
lorcansmith 0:2a53a4c3238c 3405 break;
lorcansmith 0:2a53a4c3238c 3406 case 3: /* ipNetToMediaNetAddress */
lorcansmith 0:2a53a4c3238c 3407 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3408 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 3409 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
lorcansmith 0:2a53a4c3238c 3410 od->v_len = 4;
lorcansmith 0:2a53a4c3238c 3411 break;
lorcansmith 0:2a53a4c3238c 3412 default:
lorcansmith 0:2a53a4c3238c 3413 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_ntomentry_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 3414 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3415 break;
lorcansmith 0:2a53a4c3238c 3416 }
lorcansmith 0:2a53a4c3238c 3417 }
lorcansmith 0:2a53a4c3238c 3418 else
lorcansmith 0:2a53a4c3238c 3419 {
lorcansmith 0:2a53a4c3238c 3420 LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_ntomentry_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 3421 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3422 }
lorcansmith 0:2a53a4c3238c 3423 }
lorcansmith 0:2a53a4c3238c 3424
lorcansmith 0:2a53a4c3238c 3425 static void
lorcansmith 0:2a53a4c3238c 3426 ip_ntomentry_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 3427 {
lorcansmith 0:2a53a4c3238c 3428 #if LWIP_ARP
lorcansmith 0:2a53a4c3238c 3429 u8_t id;
lorcansmith 0:2a53a4c3238c 3430 struct eth_addr* ethaddr_ret;
lorcansmith 0:2a53a4c3238c 3431 ip_addr_t* ipaddr_ret;
lorcansmith 0:2a53a4c3238c 3432 #endif /* LWIP_ARP */
lorcansmith 0:2a53a4c3238c 3433 ip_addr_t ip;
lorcansmith 0:2a53a4c3238c 3434 struct netif *netif;
lorcansmith 0:2a53a4c3238c 3435
lorcansmith 0:2a53a4c3238c 3436 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 3437 LWIP_UNUSED_ARG(value);/* if !LWIP_ARP */
lorcansmith 0:2a53a4c3238c 3438
lorcansmith 0:2a53a4c3238c 3439 snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
lorcansmith 0:2a53a4c3238c 3440 snmp_oidtoip(&od->id_inst_ptr[2], &ip);
lorcansmith 0:2a53a4c3238c 3441
lorcansmith 0:2a53a4c3238c 3442 #if LWIP_ARP /** @todo implement a netif_find_addr */
lorcansmith 0:2a53a4c3238c 3443 if (etharp_find_addr(netif, &ip, &ethaddr_ret, &ipaddr_ret) > -1)
lorcansmith 0:2a53a4c3238c 3444 {
lorcansmith 0:2a53a4c3238c 3445 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3446 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 3447 switch (id)
lorcansmith 0:2a53a4c3238c 3448 {
lorcansmith 0:2a53a4c3238c 3449 case 1: /* ipNetToMediaIfIndex */
lorcansmith 0:2a53a4c3238c 3450 {
lorcansmith 0:2a53a4c3238c 3451 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3452 *sint_ptr = od->id_inst_ptr[1];
lorcansmith 0:2a53a4c3238c 3453 }
lorcansmith 0:2a53a4c3238c 3454 break;
lorcansmith 0:2a53a4c3238c 3455 case 2: /* ipNetToMediaPhysAddress */
lorcansmith 0:2a53a4c3238c 3456 {
lorcansmith 0:2a53a4c3238c 3457 struct eth_addr *dst = (struct eth_addr*)value;
lorcansmith 0:2a53a4c3238c 3458
lorcansmith 0:2a53a4c3238c 3459 *dst = *ethaddr_ret;
lorcansmith 0:2a53a4c3238c 3460 }
lorcansmith 0:2a53a4c3238c 3461 break;
lorcansmith 0:2a53a4c3238c 3462 case 3: /* ipNetToMediaNetAddress */
lorcansmith 0:2a53a4c3238c 3463 {
lorcansmith 0:2a53a4c3238c 3464 ip_addr_t *dst = (ip_addr_t*)value;
lorcansmith 0:2a53a4c3238c 3465
lorcansmith 0:2a53a4c3238c 3466 *dst = *ipaddr_ret;
lorcansmith 0:2a53a4c3238c 3467 }
lorcansmith 0:2a53a4c3238c 3468 break;
lorcansmith 0:2a53a4c3238c 3469 case 4: /* ipNetToMediaType */
lorcansmith 0:2a53a4c3238c 3470 {
lorcansmith 0:2a53a4c3238c 3471 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3472 /* dynamic (?) */
lorcansmith 0:2a53a4c3238c 3473 *sint_ptr = 3;
lorcansmith 0:2a53a4c3238c 3474 }
lorcansmith 0:2a53a4c3238c 3475 break;
lorcansmith 0:2a53a4c3238c 3476 }
lorcansmith 0:2a53a4c3238c 3477 }
lorcansmith 0:2a53a4c3238c 3478 #endif /* LWIP_ARP */
lorcansmith 0:2a53a4c3238c 3479 }
lorcansmith 0:2a53a4c3238c 3480
lorcansmith 0:2a53a4c3238c 3481 static void
lorcansmith 0:2a53a4c3238c 3482 icmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 3483 {
lorcansmith 0:2a53a4c3238c 3484 /* return to object name, adding index depth (1) */
lorcansmith 0:2a53a4c3238c 3485 ident_len += 1;
lorcansmith 0:2a53a4c3238c 3486 ident -= 1;
lorcansmith 0:2a53a4c3238c 3487 if ((ident_len == 2) &&
lorcansmith 0:2a53a4c3238c 3488 (ident[0] > 0) && (ident[0] < 27))
lorcansmith 0:2a53a4c3238c 3489 {
lorcansmith 0:2a53a4c3238c 3490 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 3491 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 3492
lorcansmith 0:2a53a4c3238c 3493 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 3494 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3495 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
lorcansmith 0:2a53a4c3238c 3496 od->v_len = sizeof(u32_t);
lorcansmith 0:2a53a4c3238c 3497 }
lorcansmith 0:2a53a4c3238c 3498 else
lorcansmith 0:2a53a4c3238c 3499 {
lorcansmith 0:2a53a4c3238c 3500 LWIP_DEBUGF(SNMP_MIB_DEBUG,("icmp_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 3501 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3502 }
lorcansmith 0:2a53a4c3238c 3503 }
lorcansmith 0:2a53a4c3238c 3504
lorcansmith 0:2a53a4c3238c 3505 static void
lorcansmith 0:2a53a4c3238c 3506 icmp_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 3507 {
lorcansmith 0:2a53a4c3238c 3508 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 3509 u8_t id;
lorcansmith 0:2a53a4c3238c 3510
lorcansmith 0:2a53a4c3238c 3511 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 3512 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3513 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 3514 switch (id)
lorcansmith 0:2a53a4c3238c 3515 {
lorcansmith 0:2a53a4c3238c 3516 case 1: /* icmpInMsgs */
lorcansmith 0:2a53a4c3238c 3517 *uint_ptr = icmpinmsgs;
lorcansmith 0:2a53a4c3238c 3518 break;
lorcansmith 0:2a53a4c3238c 3519 case 2: /* icmpInErrors */
lorcansmith 0:2a53a4c3238c 3520 *uint_ptr = icmpinerrors;
lorcansmith 0:2a53a4c3238c 3521 break;
lorcansmith 0:2a53a4c3238c 3522 case 3: /* icmpInDestUnreachs */
lorcansmith 0:2a53a4c3238c 3523 *uint_ptr = icmpindestunreachs;
lorcansmith 0:2a53a4c3238c 3524 break;
lorcansmith 0:2a53a4c3238c 3525 case 4: /* icmpInTimeExcds */
lorcansmith 0:2a53a4c3238c 3526 *uint_ptr = icmpintimeexcds;
lorcansmith 0:2a53a4c3238c 3527 break;
lorcansmith 0:2a53a4c3238c 3528 case 5: /* icmpInParmProbs */
lorcansmith 0:2a53a4c3238c 3529 *uint_ptr = icmpinparmprobs;
lorcansmith 0:2a53a4c3238c 3530 break;
lorcansmith 0:2a53a4c3238c 3531 case 6: /* icmpInSrcQuenchs */
lorcansmith 0:2a53a4c3238c 3532 *uint_ptr = icmpinsrcquenchs;
lorcansmith 0:2a53a4c3238c 3533 break;
lorcansmith 0:2a53a4c3238c 3534 case 7: /* icmpInRedirects */
lorcansmith 0:2a53a4c3238c 3535 *uint_ptr = icmpinredirects;
lorcansmith 0:2a53a4c3238c 3536 break;
lorcansmith 0:2a53a4c3238c 3537 case 8: /* icmpInEchos */
lorcansmith 0:2a53a4c3238c 3538 *uint_ptr = icmpinechos;
lorcansmith 0:2a53a4c3238c 3539 break;
lorcansmith 0:2a53a4c3238c 3540 case 9: /* icmpInEchoReps */
lorcansmith 0:2a53a4c3238c 3541 *uint_ptr = icmpinechoreps;
lorcansmith 0:2a53a4c3238c 3542 break;
lorcansmith 0:2a53a4c3238c 3543 case 10: /* icmpInTimestamps */
lorcansmith 0:2a53a4c3238c 3544 *uint_ptr = icmpintimestamps;
lorcansmith 0:2a53a4c3238c 3545 break;
lorcansmith 0:2a53a4c3238c 3546 case 11: /* icmpInTimestampReps */
lorcansmith 0:2a53a4c3238c 3547 *uint_ptr = icmpintimestampreps;
lorcansmith 0:2a53a4c3238c 3548 break;
lorcansmith 0:2a53a4c3238c 3549 case 12: /* icmpInAddrMasks */
lorcansmith 0:2a53a4c3238c 3550 *uint_ptr = icmpinaddrmasks;
lorcansmith 0:2a53a4c3238c 3551 break;
lorcansmith 0:2a53a4c3238c 3552 case 13: /* icmpInAddrMaskReps */
lorcansmith 0:2a53a4c3238c 3553 *uint_ptr = icmpinaddrmaskreps;
lorcansmith 0:2a53a4c3238c 3554 break;
lorcansmith 0:2a53a4c3238c 3555 case 14: /* icmpOutMsgs */
lorcansmith 0:2a53a4c3238c 3556 *uint_ptr = icmpoutmsgs;
lorcansmith 0:2a53a4c3238c 3557 break;
lorcansmith 0:2a53a4c3238c 3558 case 15: /* icmpOutErrors */
lorcansmith 0:2a53a4c3238c 3559 *uint_ptr = icmpouterrors;
lorcansmith 0:2a53a4c3238c 3560 break;
lorcansmith 0:2a53a4c3238c 3561 case 16: /* icmpOutDestUnreachs */
lorcansmith 0:2a53a4c3238c 3562 *uint_ptr = icmpoutdestunreachs;
lorcansmith 0:2a53a4c3238c 3563 break;
lorcansmith 0:2a53a4c3238c 3564 case 17: /* icmpOutTimeExcds */
lorcansmith 0:2a53a4c3238c 3565 *uint_ptr = icmpouttimeexcds;
lorcansmith 0:2a53a4c3238c 3566 break;
lorcansmith 0:2a53a4c3238c 3567 case 18: /* icmpOutParmProbs */
lorcansmith 0:2a53a4c3238c 3568 *uint_ptr = icmpoutparmprobs;
lorcansmith 0:2a53a4c3238c 3569 break;
lorcansmith 0:2a53a4c3238c 3570 case 19: /* icmpOutSrcQuenchs */
lorcansmith 0:2a53a4c3238c 3571 *uint_ptr = icmpoutsrcquenchs;
lorcansmith 0:2a53a4c3238c 3572 break;
lorcansmith 0:2a53a4c3238c 3573 case 20: /* icmpOutRedirects */
lorcansmith 0:2a53a4c3238c 3574 *uint_ptr = icmpoutredirects;
lorcansmith 0:2a53a4c3238c 3575 break;
lorcansmith 0:2a53a4c3238c 3576 case 21: /* icmpOutEchos */
lorcansmith 0:2a53a4c3238c 3577 *uint_ptr = icmpoutechos;
lorcansmith 0:2a53a4c3238c 3578 break;
lorcansmith 0:2a53a4c3238c 3579 case 22: /* icmpOutEchoReps */
lorcansmith 0:2a53a4c3238c 3580 *uint_ptr = icmpoutechoreps;
lorcansmith 0:2a53a4c3238c 3581 break;
lorcansmith 0:2a53a4c3238c 3582 case 23: /* icmpOutTimestamps */
lorcansmith 0:2a53a4c3238c 3583 *uint_ptr = icmpouttimestamps;
lorcansmith 0:2a53a4c3238c 3584 break;
lorcansmith 0:2a53a4c3238c 3585 case 24: /* icmpOutTimestampReps */
lorcansmith 0:2a53a4c3238c 3586 *uint_ptr = icmpouttimestampreps;
lorcansmith 0:2a53a4c3238c 3587 break;
lorcansmith 0:2a53a4c3238c 3588 case 25: /* icmpOutAddrMasks */
lorcansmith 0:2a53a4c3238c 3589 *uint_ptr = icmpoutaddrmasks;
lorcansmith 0:2a53a4c3238c 3590 break;
lorcansmith 0:2a53a4c3238c 3591 case 26: /* icmpOutAddrMaskReps */
lorcansmith 0:2a53a4c3238c 3592 *uint_ptr = icmpoutaddrmaskreps;
lorcansmith 0:2a53a4c3238c 3593 break;
lorcansmith 0:2a53a4c3238c 3594 }
lorcansmith 0:2a53a4c3238c 3595 }
lorcansmith 0:2a53a4c3238c 3596
lorcansmith 0:2a53a4c3238c 3597 #if LWIP_TCP
lorcansmith 0:2a53a4c3238c 3598 /** @todo tcp grp */
lorcansmith 0:2a53a4c3238c 3599 static void
lorcansmith 0:2a53a4c3238c 3600 tcp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 3601 {
lorcansmith 0:2a53a4c3238c 3602 u8_t id;
lorcansmith 0:2a53a4c3238c 3603
lorcansmith 0:2a53a4c3238c 3604 /* return to object name, adding index depth (1) */
lorcansmith 0:2a53a4c3238c 3605 ident_len += 1;
lorcansmith 0:2a53a4c3238c 3606 ident -= 1;
lorcansmith 0:2a53a4c3238c 3607 if (ident_len == 2)
lorcansmith 0:2a53a4c3238c 3608 {
lorcansmith 0:2a53a4c3238c 3609 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 3610 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 3611
lorcansmith 0:2a53a4c3238c 3612 LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3613 id = (u8_t)ident[0];
lorcansmith 0:2a53a4c3238c 3614 LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def tcp.%"U16_F".0\n",(u16_t)id));
lorcansmith 0:2a53a4c3238c 3615
lorcansmith 0:2a53a4c3238c 3616 switch (id)
lorcansmith 0:2a53a4c3238c 3617 {
lorcansmith 0:2a53a4c3238c 3618 case 1: /* tcpRtoAlgorithm */
lorcansmith 0:2a53a4c3238c 3619 case 2: /* tcpRtoMin */
lorcansmith 0:2a53a4c3238c 3620 case 3: /* tcpRtoMax */
lorcansmith 0:2a53a4c3238c 3621 case 4: /* tcpMaxConn */
lorcansmith 0:2a53a4c3238c 3622 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 3623 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3624 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 3625 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 3626 break;
lorcansmith 0:2a53a4c3238c 3627 case 5: /* tcpActiveOpens */
lorcansmith 0:2a53a4c3238c 3628 case 6: /* tcpPassiveOpens */
lorcansmith 0:2a53a4c3238c 3629 case 7: /* tcpAttemptFails */
lorcansmith 0:2a53a4c3238c 3630 case 8: /* tcpEstabResets */
lorcansmith 0:2a53a4c3238c 3631 case 10: /* tcpInSegs */
lorcansmith 0:2a53a4c3238c 3632 case 11: /* tcpOutSegs */
lorcansmith 0:2a53a4c3238c 3633 case 12: /* tcpRetransSegs */
lorcansmith 0:2a53a4c3238c 3634 case 14: /* tcpInErrs */
lorcansmith 0:2a53a4c3238c 3635 case 15: /* tcpOutRsts */
lorcansmith 0:2a53a4c3238c 3636 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 3637 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3638 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
lorcansmith 0:2a53a4c3238c 3639 od->v_len = sizeof(u32_t);
lorcansmith 0:2a53a4c3238c 3640 break;
lorcansmith 0:2a53a4c3238c 3641 case 9: /* tcpCurrEstab */
lorcansmith 0:2a53a4c3238c 3642 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3643 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3644 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE);
lorcansmith 0:2a53a4c3238c 3645 od->v_len = sizeof(u32_t);
lorcansmith 0:2a53a4c3238c 3646 break;
lorcansmith 0:2a53a4c3238c 3647 default:
lorcansmith 0:2a53a4c3238c 3648 LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcp_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 3649 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3650 break;
lorcansmith 0:2a53a4c3238c 3651 };
lorcansmith 0:2a53a4c3238c 3652 }
lorcansmith 0:2a53a4c3238c 3653 else
lorcansmith 0:2a53a4c3238c 3654 {
lorcansmith 0:2a53a4c3238c 3655 LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcp_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 3656 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3657 }
lorcansmith 0:2a53a4c3238c 3658 }
lorcansmith 0:2a53a4c3238c 3659
lorcansmith 0:2a53a4c3238c 3660 static void
lorcansmith 0:2a53a4c3238c 3661 tcp_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 3662 {
lorcansmith 0:2a53a4c3238c 3663 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 3664 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3665 u8_t id;
lorcansmith 0:2a53a4c3238c 3666
lorcansmith 0:2a53a4c3238c 3667 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 3668 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3669 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 3670 switch (id)
lorcansmith 0:2a53a4c3238c 3671 {
lorcansmith 0:2a53a4c3238c 3672 case 1: /* tcpRtoAlgorithm, vanj(4) */
lorcansmith 0:2a53a4c3238c 3673 *sint_ptr = 4;
lorcansmith 0:2a53a4c3238c 3674 break;
lorcansmith 0:2a53a4c3238c 3675 case 2: /* tcpRtoMin */
lorcansmith 0:2a53a4c3238c 3676 /* @todo not the actual value, a guess,
lorcansmith 0:2a53a4c3238c 3677 needs to be calculated */
lorcansmith 0:2a53a4c3238c 3678 *sint_ptr = 1000;
lorcansmith 0:2a53a4c3238c 3679 break;
lorcansmith 0:2a53a4c3238c 3680 case 3: /* tcpRtoMax */
lorcansmith 0:2a53a4c3238c 3681 /* @todo not the actual value, a guess,
lorcansmith 0:2a53a4c3238c 3682 needs to be calculated */
lorcansmith 0:2a53a4c3238c 3683 *sint_ptr = 60000;
lorcansmith 0:2a53a4c3238c 3684 break;
lorcansmith 0:2a53a4c3238c 3685 case 4: /* tcpMaxConn */
lorcansmith 0:2a53a4c3238c 3686 *sint_ptr = MEMP_NUM_TCP_PCB;
lorcansmith 0:2a53a4c3238c 3687 break;
lorcansmith 0:2a53a4c3238c 3688 case 5: /* tcpActiveOpens */
lorcansmith 0:2a53a4c3238c 3689 *uint_ptr = tcpactiveopens;
lorcansmith 0:2a53a4c3238c 3690 break;
lorcansmith 0:2a53a4c3238c 3691 case 6: /* tcpPassiveOpens */
lorcansmith 0:2a53a4c3238c 3692 *uint_ptr = tcppassiveopens;
lorcansmith 0:2a53a4c3238c 3693 break;
lorcansmith 0:2a53a4c3238c 3694 case 7: /* tcpAttemptFails */
lorcansmith 0:2a53a4c3238c 3695 *uint_ptr = tcpattemptfails;
lorcansmith 0:2a53a4c3238c 3696 break;
lorcansmith 0:2a53a4c3238c 3697 case 8: /* tcpEstabResets */
lorcansmith 0:2a53a4c3238c 3698 *uint_ptr = tcpestabresets;
lorcansmith 0:2a53a4c3238c 3699 break;
lorcansmith 0:2a53a4c3238c 3700 case 9: /* tcpCurrEstab */
lorcansmith 0:2a53a4c3238c 3701 {
lorcansmith 0:2a53a4c3238c 3702 u16_t tcpcurrestab = 0;
lorcansmith 0:2a53a4c3238c 3703 struct tcp_pcb *pcb = tcp_active_pcbs;
lorcansmith 0:2a53a4c3238c 3704 while (pcb != NULL)
lorcansmith 0:2a53a4c3238c 3705 {
lorcansmith 0:2a53a4c3238c 3706 if ((pcb->state == ESTABLISHED) ||
lorcansmith 0:2a53a4c3238c 3707 (pcb->state == CLOSE_WAIT))
lorcansmith 0:2a53a4c3238c 3708 {
lorcansmith 0:2a53a4c3238c 3709 tcpcurrestab++;
lorcansmith 0:2a53a4c3238c 3710 }
lorcansmith 0:2a53a4c3238c 3711 pcb = pcb->next;
lorcansmith 0:2a53a4c3238c 3712 }
lorcansmith 0:2a53a4c3238c 3713 *uint_ptr = tcpcurrestab;
lorcansmith 0:2a53a4c3238c 3714 }
lorcansmith 0:2a53a4c3238c 3715 break;
lorcansmith 0:2a53a4c3238c 3716 case 10: /* tcpInSegs */
lorcansmith 0:2a53a4c3238c 3717 *uint_ptr = tcpinsegs;
lorcansmith 0:2a53a4c3238c 3718 break;
lorcansmith 0:2a53a4c3238c 3719 case 11: /* tcpOutSegs */
lorcansmith 0:2a53a4c3238c 3720 *uint_ptr = tcpoutsegs;
lorcansmith 0:2a53a4c3238c 3721 break;
lorcansmith 0:2a53a4c3238c 3722 case 12: /* tcpRetransSegs */
lorcansmith 0:2a53a4c3238c 3723 *uint_ptr = tcpretranssegs;
lorcansmith 0:2a53a4c3238c 3724 break;
lorcansmith 0:2a53a4c3238c 3725 case 14: /* tcpInErrs */
lorcansmith 0:2a53a4c3238c 3726 *uint_ptr = tcpinerrs;
lorcansmith 0:2a53a4c3238c 3727 break;
lorcansmith 0:2a53a4c3238c 3728 case 15: /* tcpOutRsts */
lorcansmith 0:2a53a4c3238c 3729 *uint_ptr = tcpoutrsts;
lorcansmith 0:2a53a4c3238c 3730 break;
lorcansmith 0:2a53a4c3238c 3731 }
lorcansmith 0:2a53a4c3238c 3732 }
lorcansmith 0:2a53a4c3238c 3733 #ifdef THIS_SEEMS_UNUSED
lorcansmith 0:2a53a4c3238c 3734 static void
lorcansmith 0:2a53a4c3238c 3735 tcpconnentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 3736 {
lorcansmith 0:2a53a4c3238c 3737 /* return to object name, adding index depth (10) */
lorcansmith 0:2a53a4c3238c 3738 ident_len += 10;
lorcansmith 0:2a53a4c3238c 3739 ident -= 10;
lorcansmith 0:2a53a4c3238c 3740
lorcansmith 0:2a53a4c3238c 3741 if (ident_len == 11)
lorcansmith 0:2a53a4c3238c 3742 {
lorcansmith 0:2a53a4c3238c 3743 u8_t id;
lorcansmith 0:2a53a4c3238c 3744
lorcansmith 0:2a53a4c3238c 3745 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 3746 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 3747
lorcansmith 0:2a53a4c3238c 3748 id = ident[0];
lorcansmith 0:2a53a4c3238c 3749 LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def tcp.%"U16_F".0\n",(u16_t)id));
lorcansmith 0:2a53a4c3238c 3750
lorcansmith 0:2a53a4c3238c 3751 switch (id)
lorcansmith 0:2a53a4c3238c 3752 {
lorcansmith 0:2a53a4c3238c 3753 case 1: /* tcpConnState */
lorcansmith 0:2a53a4c3238c 3754 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3755 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 3756 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 3757 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 3758 break;
lorcansmith 0:2a53a4c3238c 3759 case 2: /* tcpConnLocalAddress */
lorcansmith 0:2a53a4c3238c 3760 case 4: /* tcpConnRemAddress */
lorcansmith 0:2a53a4c3238c 3761 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3762 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3763 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
lorcansmith 0:2a53a4c3238c 3764 od->v_len = 4;
lorcansmith 0:2a53a4c3238c 3765 break;
lorcansmith 0:2a53a4c3238c 3766 case 3: /* tcpConnLocalPort */
lorcansmith 0:2a53a4c3238c 3767 case 5: /* tcpConnRemPort */
lorcansmith 0:2a53a4c3238c 3768 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3769 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3770 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 3771 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 3772 break;
lorcansmith 0:2a53a4c3238c 3773 default:
lorcansmith 0:2a53a4c3238c 3774 LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcpconnentry_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 3775 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3776 break;
lorcansmith 0:2a53a4c3238c 3777 };
lorcansmith 0:2a53a4c3238c 3778 }
lorcansmith 0:2a53a4c3238c 3779 else
lorcansmith 0:2a53a4c3238c 3780 {
lorcansmith 0:2a53a4c3238c 3781 LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcpconnentry_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 3782 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3783 }
lorcansmith 0:2a53a4c3238c 3784 }
lorcansmith 0:2a53a4c3238c 3785
lorcansmith 0:2a53a4c3238c 3786 static void
lorcansmith 0:2a53a4c3238c 3787 tcpconnentry_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 3788 {
lorcansmith 0:2a53a4c3238c 3789 ip_addr_t lip, rip;
lorcansmith 0:2a53a4c3238c 3790 u16_t lport, rport;
lorcansmith 0:2a53a4c3238c 3791 s32_t *ident;
lorcansmith 0:2a53a4c3238c 3792
lorcansmith 0:2a53a4c3238c 3793 ident = od->id_inst_ptr;
lorcansmith 0:2a53a4c3238c 3794 snmp_oidtoip(&ident[1], &lip);
lorcansmith 0:2a53a4c3238c 3795 lport = ident[5];
lorcansmith 0:2a53a4c3238c 3796 snmp_oidtoip(&ident[6], &rip);
lorcansmith 0:2a53a4c3238c 3797 rport = ident[10];
lorcansmith 0:2a53a4c3238c 3798
lorcansmith 0:2a53a4c3238c 3799 /** @todo find matching PCB */
lorcansmith 0:2a53a4c3238c 3800 }
lorcansmith 0:2a53a4c3238c 3801 #endif /* if 0 */
lorcansmith 0:2a53a4c3238c 3802 #endif
lorcansmith 0:2a53a4c3238c 3803
lorcansmith 0:2a53a4c3238c 3804 static void
lorcansmith 0:2a53a4c3238c 3805 udp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 3806 {
lorcansmith 0:2a53a4c3238c 3807 /* return to object name, adding index depth (1) */
lorcansmith 0:2a53a4c3238c 3808 ident_len += 1;
lorcansmith 0:2a53a4c3238c 3809 ident -= 1;
lorcansmith 0:2a53a4c3238c 3810 if ((ident_len == 2) &&
lorcansmith 0:2a53a4c3238c 3811 (ident[0] > 0) && (ident[0] < 6))
lorcansmith 0:2a53a4c3238c 3812 {
lorcansmith 0:2a53a4c3238c 3813 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 3814 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 3815
lorcansmith 0:2a53a4c3238c 3816 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 3817 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3818 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
lorcansmith 0:2a53a4c3238c 3819 od->v_len = sizeof(u32_t);
lorcansmith 0:2a53a4c3238c 3820 }
lorcansmith 0:2a53a4c3238c 3821 else
lorcansmith 0:2a53a4c3238c 3822 {
lorcansmith 0:2a53a4c3238c 3823 LWIP_DEBUGF(SNMP_MIB_DEBUG,("udp_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 3824 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3825 }
lorcansmith 0:2a53a4c3238c 3826 }
lorcansmith 0:2a53a4c3238c 3827
lorcansmith 0:2a53a4c3238c 3828 static void
lorcansmith 0:2a53a4c3238c 3829 udp_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 3830 {
lorcansmith 0:2a53a4c3238c 3831 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 3832 u8_t id;
lorcansmith 0:2a53a4c3238c 3833
lorcansmith 0:2a53a4c3238c 3834 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 3835 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3836 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 3837 switch (id)
lorcansmith 0:2a53a4c3238c 3838 {
lorcansmith 0:2a53a4c3238c 3839 case 1: /* udpInDatagrams */
lorcansmith 0:2a53a4c3238c 3840 *uint_ptr = udpindatagrams;
lorcansmith 0:2a53a4c3238c 3841 break;
lorcansmith 0:2a53a4c3238c 3842 case 2: /* udpNoPorts */
lorcansmith 0:2a53a4c3238c 3843 *uint_ptr = udpnoports;
lorcansmith 0:2a53a4c3238c 3844 break;
lorcansmith 0:2a53a4c3238c 3845 case 3: /* udpInErrors */
lorcansmith 0:2a53a4c3238c 3846 *uint_ptr = udpinerrors;
lorcansmith 0:2a53a4c3238c 3847 break;
lorcansmith 0:2a53a4c3238c 3848 case 4: /* udpOutDatagrams */
lorcansmith 0:2a53a4c3238c 3849 *uint_ptr = udpoutdatagrams;
lorcansmith 0:2a53a4c3238c 3850 break;
lorcansmith 0:2a53a4c3238c 3851 }
lorcansmith 0:2a53a4c3238c 3852 }
lorcansmith 0:2a53a4c3238c 3853
lorcansmith 0:2a53a4c3238c 3854 static void
lorcansmith 0:2a53a4c3238c 3855 udpentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 3856 {
lorcansmith 0:2a53a4c3238c 3857 /* return to object name, adding index depth (5) */
lorcansmith 0:2a53a4c3238c 3858 ident_len += 5;
lorcansmith 0:2a53a4c3238c 3859 ident -= 5;
lorcansmith 0:2a53a4c3238c 3860
lorcansmith 0:2a53a4c3238c 3861 if (ident_len == 6)
lorcansmith 0:2a53a4c3238c 3862 {
lorcansmith 0:2a53a4c3238c 3863 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 3864 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 3865
lorcansmith 0:2a53a4c3238c 3866 switch (ident[0])
lorcansmith 0:2a53a4c3238c 3867 {
lorcansmith 0:2a53a4c3238c 3868 case 1: /* udpLocalAddress */
lorcansmith 0:2a53a4c3238c 3869 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3870 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3871 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
lorcansmith 0:2a53a4c3238c 3872 od->v_len = 4;
lorcansmith 0:2a53a4c3238c 3873 break;
lorcansmith 0:2a53a4c3238c 3874 case 2: /* udpLocalPort */
lorcansmith 0:2a53a4c3238c 3875 od->instance = MIB_OBJECT_TAB;
lorcansmith 0:2a53a4c3238c 3876 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3877 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 3878 od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 3879 break;
lorcansmith 0:2a53a4c3238c 3880 default:
lorcansmith 0:2a53a4c3238c 3881 LWIP_DEBUGF(SNMP_MIB_DEBUG,("udpentry_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 3882 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3883 break;
lorcansmith 0:2a53a4c3238c 3884 }
lorcansmith 0:2a53a4c3238c 3885 }
lorcansmith 0:2a53a4c3238c 3886 else
lorcansmith 0:2a53a4c3238c 3887 {
lorcansmith 0:2a53a4c3238c 3888 LWIP_DEBUGF(SNMP_MIB_DEBUG,("udpentry_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 3889 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3890 }
lorcansmith 0:2a53a4c3238c 3891 }
lorcansmith 0:2a53a4c3238c 3892
lorcansmith 0:2a53a4c3238c 3893 static void
lorcansmith 0:2a53a4c3238c 3894 udpentry_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 3895 {
lorcansmith 0:2a53a4c3238c 3896 u8_t id;
lorcansmith 0:2a53a4c3238c 3897 struct udp_pcb *pcb;
lorcansmith 0:2a53a4c3238c 3898 ip_addr_t ip;
lorcansmith 0:2a53a4c3238c 3899 u16_t port;
lorcansmith 0:2a53a4c3238c 3900
lorcansmith 0:2a53a4c3238c 3901 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 3902 snmp_oidtoip(&od->id_inst_ptr[1], &ip);
lorcansmith 0:2a53a4c3238c 3903 LWIP_ASSERT("invalid port", (od->id_inst_ptr[5] >= 0) && (od->id_inst_ptr[5] <= 0xffff));
lorcansmith 0:2a53a4c3238c 3904 port = (u16_t)od->id_inst_ptr[5];
lorcansmith 0:2a53a4c3238c 3905
lorcansmith 0:2a53a4c3238c 3906 pcb = udp_pcbs;
lorcansmith 0:2a53a4c3238c 3907 while ((pcb != NULL) &&
lorcansmith 0:2a53a4c3238c 3908 !(ip_addr_cmp(&pcb->local_ip, &ip) &&
lorcansmith 0:2a53a4c3238c 3909 (pcb->local_port == port)))
lorcansmith 0:2a53a4c3238c 3910 {
lorcansmith 0:2a53a4c3238c 3911 pcb = pcb->next;
lorcansmith 0:2a53a4c3238c 3912 }
lorcansmith 0:2a53a4c3238c 3913
lorcansmith 0:2a53a4c3238c 3914 if (pcb != NULL)
lorcansmith 0:2a53a4c3238c 3915 {
lorcansmith 0:2a53a4c3238c 3916 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3917 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 3918 switch (id)
lorcansmith 0:2a53a4c3238c 3919 {
lorcansmith 0:2a53a4c3238c 3920 case 1: /* udpLocalAddress */
lorcansmith 0:2a53a4c3238c 3921 {
lorcansmith 0:2a53a4c3238c 3922 ip_addr_t *dst = (ip_addr_t*)value;
lorcansmith 0:2a53a4c3238c 3923 *dst = pcb->local_ip;
lorcansmith 0:2a53a4c3238c 3924 }
lorcansmith 0:2a53a4c3238c 3925 break;
lorcansmith 0:2a53a4c3238c 3926 case 2: /* udpLocalPort */
lorcansmith 0:2a53a4c3238c 3927 {
lorcansmith 0:2a53a4c3238c 3928 s32_t *sint_ptr = (s32_t*)value;
lorcansmith 0:2a53a4c3238c 3929 *sint_ptr = pcb->local_port;
lorcansmith 0:2a53a4c3238c 3930 }
lorcansmith 0:2a53a4c3238c 3931 break;
lorcansmith 0:2a53a4c3238c 3932 }
lorcansmith 0:2a53a4c3238c 3933 }
lorcansmith 0:2a53a4c3238c 3934 }
lorcansmith 0:2a53a4c3238c 3935
lorcansmith 0:2a53a4c3238c 3936 static void
lorcansmith 0:2a53a4c3238c 3937 snmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
lorcansmith 0:2a53a4c3238c 3938 {
lorcansmith 0:2a53a4c3238c 3939 /* return to object name, adding index depth (1) */
lorcansmith 0:2a53a4c3238c 3940 ident_len += 1;
lorcansmith 0:2a53a4c3238c 3941 ident -= 1;
lorcansmith 0:2a53a4c3238c 3942 if (ident_len == 2)
lorcansmith 0:2a53a4c3238c 3943 {
lorcansmith 0:2a53a4c3238c 3944 u8_t id;
lorcansmith 0:2a53a4c3238c 3945
lorcansmith 0:2a53a4c3238c 3946 od->id_inst_len = ident_len;
lorcansmith 0:2a53a4c3238c 3947 od->id_inst_ptr = ident;
lorcansmith 0:2a53a4c3238c 3948
lorcansmith 0:2a53a4c3238c 3949 LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 3950 id = (u8_t)ident[0];
lorcansmith 0:2a53a4c3238c 3951 switch (id)
lorcansmith 0:2a53a4c3238c 3952 {
lorcansmith 0:2a53a4c3238c 3953 case 1: /* snmpInPkts */
lorcansmith 0:2a53a4c3238c 3954 case 2: /* snmpOutPkts */
lorcansmith 0:2a53a4c3238c 3955 case 3: /* snmpInBadVersions */
lorcansmith 0:2a53a4c3238c 3956 case 4: /* snmpInBadCommunityNames */
lorcansmith 0:2a53a4c3238c 3957 case 5: /* snmpInBadCommunityUses */
lorcansmith 0:2a53a4c3238c 3958 case 6: /* snmpInASNParseErrs */
lorcansmith 0:2a53a4c3238c 3959 case 8: /* snmpInTooBigs */
lorcansmith 0:2a53a4c3238c 3960 case 9: /* snmpInNoSuchNames */
lorcansmith 0:2a53a4c3238c 3961 case 10: /* snmpInBadValues */
lorcansmith 0:2a53a4c3238c 3962 case 11: /* snmpInReadOnlys */
lorcansmith 0:2a53a4c3238c 3963 case 12: /* snmpInGenErrs */
lorcansmith 0:2a53a4c3238c 3964 case 13: /* snmpInTotalReqVars */
lorcansmith 0:2a53a4c3238c 3965 case 14: /* snmpInTotalSetVars */
lorcansmith 0:2a53a4c3238c 3966 case 15: /* snmpInGetRequests */
lorcansmith 0:2a53a4c3238c 3967 case 16: /* snmpInGetNexts */
lorcansmith 0:2a53a4c3238c 3968 case 17: /* snmpInSetRequests */
lorcansmith 0:2a53a4c3238c 3969 case 18: /* snmpInGetResponses */
lorcansmith 0:2a53a4c3238c 3970 case 19: /* snmpInTraps */
lorcansmith 0:2a53a4c3238c 3971 case 20: /* snmpOutTooBigs */
lorcansmith 0:2a53a4c3238c 3972 case 21: /* snmpOutNoSuchNames */
lorcansmith 0:2a53a4c3238c 3973 case 22: /* snmpOutBadValues */
lorcansmith 0:2a53a4c3238c 3974 case 24: /* snmpOutGenErrs */
lorcansmith 0:2a53a4c3238c 3975 case 25: /* snmpOutGetRequests */
lorcansmith 0:2a53a4c3238c 3976 case 26: /* snmpOutGetNexts */
lorcansmith 0:2a53a4c3238c 3977 case 27: /* snmpOutSetRequests */
lorcansmith 0:2a53a4c3238c 3978 case 28: /* snmpOutGetResponses */
lorcansmith 0:2a53a4c3238c 3979 case 29: /* snmpOutTraps */
lorcansmith 0:2a53a4c3238c 3980 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 3981 od->access = MIB_OBJECT_READ_ONLY;
lorcansmith 0:2a53a4c3238c 3982 od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
lorcansmith 0:2a53a4c3238c 3983 od->v_len = sizeof(u32_t);
lorcansmith 0:2a53a4c3238c 3984 break;
lorcansmith 0:2a53a4c3238c 3985 case 30: /* snmpEnableAuthenTraps */
lorcansmith 0:2a53a4c3238c 3986 od->instance = MIB_OBJECT_SCALAR;
lorcansmith 0:2a53a4c3238c 3987 od->access = MIB_OBJECT_READ_WRITE;
lorcansmith 0:2a53a4c3238c 3988 od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
lorcansmith 0:2a53a4c3238c 3989 od->v_len = sizeof(u16_t);
lorcansmith 0:2a53a4c3238c 3990 // v?.? debug: replaced by above od->v_len = sizeof(s32_t);
lorcansmith 0:2a53a4c3238c 3991 break;
lorcansmith 0:2a53a4c3238c 3992 default:
lorcansmith 0:2a53a4c3238c 3993 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_get_object_def: no such object\n"));
lorcansmith 0:2a53a4c3238c 3994 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 3995 break;
lorcansmith 0:2a53a4c3238c 3996 };
lorcansmith 0:2a53a4c3238c 3997 }
lorcansmith 0:2a53a4c3238c 3998 else
lorcansmith 0:2a53a4c3238c 3999 {
lorcansmith 0:2a53a4c3238c 4000 LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_get_object_def: no scalar\n"));
lorcansmith 0:2a53a4c3238c 4001 od->instance = MIB_OBJECT_NONE;
lorcansmith 0:2a53a4c3238c 4002 }
lorcansmith 0:2a53a4c3238c 4003 }
lorcansmith 0:2a53a4c3238c 4004
lorcansmith 0:2a53a4c3238c 4005 static void
lorcansmith 0:2a53a4c3238c 4006 snmp_get_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 4007 {
lorcansmith 0:2a53a4c3238c 4008 u32_t *uint_ptr = (u32_t*)value;
lorcansmith 0:2a53a4c3238c 4009 u8_t id;
lorcansmith 0:2a53a4c3238c 4010
lorcansmith 0:2a53a4c3238c 4011 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 4012 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 4013 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 4014 switch (id)
lorcansmith 0:2a53a4c3238c 4015 {
lorcansmith 0:2a53a4c3238c 4016 case 1: /* snmpInPkts */
lorcansmith 0:2a53a4c3238c 4017 *uint_ptr = snmpinpkts;
lorcansmith 0:2a53a4c3238c 4018 break;
lorcansmith 0:2a53a4c3238c 4019 case 2: /* snmpOutPkts */
lorcansmith 0:2a53a4c3238c 4020 *uint_ptr = snmpoutpkts;
lorcansmith 0:2a53a4c3238c 4021 break;
lorcansmith 0:2a53a4c3238c 4022 case 3: /* snmpInBadVersions */
lorcansmith 0:2a53a4c3238c 4023 *uint_ptr = snmpinbadversions;
lorcansmith 0:2a53a4c3238c 4024 break;
lorcansmith 0:2a53a4c3238c 4025 case 4: /* snmpInBadCommunityNames */
lorcansmith 0:2a53a4c3238c 4026 *uint_ptr = snmpinbadcommunitynames;
lorcansmith 0:2a53a4c3238c 4027 break;
lorcansmith 0:2a53a4c3238c 4028 case 5: /* snmpInBadCommunityUses */
lorcansmith 0:2a53a4c3238c 4029 *uint_ptr = snmpinbadcommunityuses;
lorcansmith 0:2a53a4c3238c 4030 break;
lorcansmith 0:2a53a4c3238c 4031 case 6: /* snmpInASNParseErrs */
lorcansmith 0:2a53a4c3238c 4032 *uint_ptr = snmpinasnparseerrs;
lorcansmith 0:2a53a4c3238c 4033 break;
lorcansmith 0:2a53a4c3238c 4034 case 8: /* snmpInTooBigs */
lorcansmith 0:2a53a4c3238c 4035 *uint_ptr = snmpintoobigs;
lorcansmith 0:2a53a4c3238c 4036 break;
lorcansmith 0:2a53a4c3238c 4037 case 9: /* snmpInNoSuchNames */
lorcansmith 0:2a53a4c3238c 4038 *uint_ptr = snmpinnosuchnames;
lorcansmith 0:2a53a4c3238c 4039 break;
lorcansmith 0:2a53a4c3238c 4040 case 10: /* snmpInBadValues */
lorcansmith 0:2a53a4c3238c 4041 *uint_ptr = snmpinbadvalues;
lorcansmith 0:2a53a4c3238c 4042 break;
lorcansmith 0:2a53a4c3238c 4043 case 11: /* snmpInReadOnlys */
lorcansmith 0:2a53a4c3238c 4044 *uint_ptr = snmpinreadonlys;
lorcansmith 0:2a53a4c3238c 4045 break;
lorcansmith 0:2a53a4c3238c 4046 case 12: /* snmpInGenErrs */
lorcansmith 0:2a53a4c3238c 4047 *uint_ptr = snmpingenerrs;
lorcansmith 0:2a53a4c3238c 4048 break;
lorcansmith 0:2a53a4c3238c 4049 case 13: /* snmpInTotalReqVars */
lorcansmith 0:2a53a4c3238c 4050 *uint_ptr = snmpintotalreqvars;
lorcansmith 0:2a53a4c3238c 4051 break;
lorcansmith 0:2a53a4c3238c 4052 case 14: /* snmpInTotalSetVars */
lorcansmith 0:2a53a4c3238c 4053 *uint_ptr = snmpintotalsetvars;
lorcansmith 0:2a53a4c3238c 4054 break;
lorcansmith 0:2a53a4c3238c 4055 case 15: /* snmpInGetRequests */
lorcansmith 0:2a53a4c3238c 4056 *uint_ptr = snmpingetrequests;
lorcansmith 0:2a53a4c3238c 4057 break;
lorcansmith 0:2a53a4c3238c 4058 case 16: /* snmpInGetNexts */
lorcansmith 0:2a53a4c3238c 4059 *uint_ptr = snmpingetnexts;
lorcansmith 0:2a53a4c3238c 4060 break;
lorcansmith 0:2a53a4c3238c 4061 case 17: /* snmpInSetRequests */
lorcansmith 0:2a53a4c3238c 4062 *uint_ptr = snmpinsetrequests;
lorcansmith 0:2a53a4c3238c 4063 break;
lorcansmith 0:2a53a4c3238c 4064 case 18: /* snmpInGetResponses */
lorcansmith 0:2a53a4c3238c 4065 *uint_ptr = snmpingetresponses;
lorcansmith 0:2a53a4c3238c 4066 break;
lorcansmith 0:2a53a4c3238c 4067 case 19: /* snmpInTraps */
lorcansmith 0:2a53a4c3238c 4068 *uint_ptr = snmpintraps;
lorcansmith 0:2a53a4c3238c 4069 break;
lorcansmith 0:2a53a4c3238c 4070 case 20: /* snmpOutTooBigs */
lorcansmith 0:2a53a4c3238c 4071 *uint_ptr = snmpouttoobigs;
lorcansmith 0:2a53a4c3238c 4072 break;
lorcansmith 0:2a53a4c3238c 4073 case 21: /* snmpOutNoSuchNames */
lorcansmith 0:2a53a4c3238c 4074 *uint_ptr = snmpoutnosuchnames;
lorcansmith 0:2a53a4c3238c 4075 break;
lorcansmith 0:2a53a4c3238c 4076 case 22: /* snmpOutBadValues */
lorcansmith 0:2a53a4c3238c 4077 *uint_ptr = snmpoutbadvalues;
lorcansmith 0:2a53a4c3238c 4078 break;
lorcansmith 0:2a53a4c3238c 4079 case 24: /* snmpOutGenErrs */
lorcansmith 0:2a53a4c3238c 4080 *uint_ptr = snmpoutgenerrs;
lorcansmith 0:2a53a4c3238c 4081 break;
lorcansmith 0:2a53a4c3238c 4082 case 25: /* snmpOutGetRequests */
lorcansmith 0:2a53a4c3238c 4083 *uint_ptr = snmpoutgetrequests;
lorcansmith 0:2a53a4c3238c 4084 break;
lorcansmith 0:2a53a4c3238c 4085 case 26: /* snmpOutGetNexts */
lorcansmith 0:2a53a4c3238c 4086 *uint_ptr = snmpoutgetnexts;
lorcansmith 0:2a53a4c3238c 4087 break;
lorcansmith 0:2a53a4c3238c 4088 case 27: /* snmpOutSetRequests */
lorcansmith 0:2a53a4c3238c 4089 *uint_ptr = snmpoutsetrequests;
lorcansmith 0:2a53a4c3238c 4090 break;
lorcansmith 0:2a53a4c3238c 4091 case 28: /* snmpOutGetResponses */
lorcansmith 0:2a53a4c3238c 4092 *uint_ptr = snmpoutgetresponses;
lorcansmith 0:2a53a4c3238c 4093 break;
lorcansmith 0:2a53a4c3238c 4094 case 29: /* snmpOutTraps */
lorcansmith 0:2a53a4c3238c 4095 *uint_ptr = snmpouttraps;
lorcansmith 0:2a53a4c3238c 4096 break;
lorcansmith 0:2a53a4c3238c 4097 case 30: /* snmpEnableAuthenTraps */
lorcansmith 0:2a53a4c3238c 4098 *uint_ptr = *snmpenableauthentraps_ptr;
lorcansmith 0:2a53a4c3238c 4099 break;
lorcansmith 0:2a53a4c3238c 4100 };
lorcansmith 0:2a53a4c3238c 4101 }
lorcansmith 0:2a53a4c3238c 4102
lorcansmith 0:2a53a4c3238c 4103 /**
lorcansmith 0:2a53a4c3238c 4104 * Test snmp object value before setting.
lorcansmith 0:2a53a4c3238c 4105 *
lorcansmith 0:2a53a4c3238c 4106 * @param od is the object definition
lorcansmith 0:2a53a4c3238c 4107 * @param len return value space (in bytes)
lorcansmith 0:2a53a4c3238c 4108 * @param value points to (varbind) space to copy value from.
lorcansmith 0:2a53a4c3238c 4109 */
lorcansmith 0:2a53a4c3238c 4110 static u8_t
lorcansmith 0:2a53a4c3238c 4111 snmp_set_test(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 4112 {
lorcansmith 0:2a53a4c3238c 4113 u8_t id, set_ok;
lorcansmith 0:2a53a4c3238c 4114 u8_t * u8_ptr;
lorcansmith 0:2a53a4c3238c 4115
lorcansmith 0:2a53a4c3238c 4116 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 4117 set_ok = 0;
lorcansmith 0:2a53a4c3238c 4118 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 4119 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 4120 printf("In snmp_set_test: id %d, value %d\r\n", id, *(u8_t*)value);
lorcansmith 0:2a53a4c3238c 4121 if (id == 30)
lorcansmith 0:2a53a4c3238c 4122 {
lorcansmith 0:2a53a4c3238c 4123 /* snmpEnableAuthenTraps */
lorcansmith 0:2a53a4c3238c 4124 u8_ptr = (u8_t *)value; // v0.2: replace s32_t *sint_ptr = (s32_t*)value
lorcansmith 0:2a53a4c3238c 4125
lorcansmith 0:2a53a4c3238c 4126 if (snmpenableauthentraps_ptr != &snmpenableauthentraps_default)
lorcansmith 0:2a53a4c3238c 4127 {
lorcansmith 0:2a53a4c3238c 4128 /* we should have writable non-volatile mem here */
lorcansmith 0:2a53a4c3238c 4129 if ((*u8_ptr == 1) || (*u8_ptr == 2))
lorcansmith 0:2a53a4c3238c 4130 {
lorcansmith 0:2a53a4c3238c 4131 set_ok = 1;
lorcansmith 0:2a53a4c3238c 4132 }
lorcansmith 0:2a53a4c3238c 4133 }
lorcansmith 0:2a53a4c3238c 4134 else
lorcansmith 0:2a53a4c3238c 4135 {
lorcansmith 0:2a53a4c3238c 4136 /* const or hardwired value, so change to default value */
lorcansmith 0:2a53a4c3238c 4137 if (*u8_ptr == snmpenableauthentraps_default)
lorcansmith 0:2a53a4c3238c 4138 {
lorcansmith 0:2a53a4c3238c 4139 set_ok = 1;
lorcansmith 0:2a53a4c3238c 4140 }
lorcansmith 0:2a53a4c3238c 4141 }
lorcansmith 0:2a53a4c3238c 4142 }
lorcansmith 0:2a53a4c3238c 4143 return set_ok;
lorcansmith 0:2a53a4c3238c 4144 }
lorcansmith 0:2a53a4c3238c 4145
lorcansmith 0:2a53a4c3238c 4146 static void
lorcansmith 0:2a53a4c3238c 4147 snmp_set_value(struct obj_def *od, u16_t len, void *value)
lorcansmith 0:2a53a4c3238c 4148 {
lorcansmith 0:2a53a4c3238c 4149 u8_t id;
lorcansmith 0:2a53a4c3238c 4150
lorcansmith 0:2a53a4c3238c 4151 LWIP_UNUSED_ARG(len);
lorcansmith 0:2a53a4c3238c 4152 LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
lorcansmith 0:2a53a4c3238c 4153 id = (u8_t)od->id_inst_ptr[0];
lorcansmith 0:2a53a4c3238c 4154 if (id == 30)
lorcansmith 0:2a53a4c3238c 4155 {
lorcansmith 0:2a53a4c3238c 4156 /* snmpEnableAuthenTraps */
lorcansmith 0:2a53a4c3238c 4157 u8_t *ptr = (u8_t*)value;
lorcansmith 0:2a53a4c3238c 4158 *snmpenableauthentraps_ptr = *ptr;
lorcansmith 0:2a53a4c3238c 4159 // printf("In snmp_set_value %d", *snmpenableauthentraps_ptr);
lorcansmith 0:2a53a4c3238c 4160 }
lorcansmith 0:2a53a4c3238c 4161 }
lorcansmith 0:2a53a4c3238c 4162
lorcansmith 0:2a53a4c3238c 4163 #endif /* LWIP_SNMP */
lorcansmith 0:2a53a4c3238c 4164