Embedded WebSockets Experiment

Dependencies:   mbed MD5

Committer:
nandgate
Date:
Tue Jul 26 05:30:53 2011 +0000
Revision:
0:6dee052a3fa4

        

Who changed what in which revision?

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