Netservices modded to read fragmented HTTP respsonse/payload from special purpose server - 180 bytes only

Committer:
RodColeman
Date:
Thu Sep 08 10:41:36 2011 +0000
Revision:
0:8f5825f330b0
setDataLen hacked to 180bytes

Who changed what in which revision?

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