Committer:
mbed714
Date:
Sat Sep 18 23:05:49 2010 +0000
Revision:
0:d616ece2d859

        

Who changed what in which revision?

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