NetTribute library with debug turned on in FShandler Donatien Garner -> Segundo Equipo -> this version

Committer:
hexley
Date:
Fri Nov 19 01:54:45 2010 +0000
Revision:
0:281d6ff68967

        

Who changed what in which revision?

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