qwerty

Dependencies:   mbed

Committer:
Hello1024
Date:
Mon Nov 21 18:25:34 2011 +0000
Revision:
0:1619a6b826d7

        

Who changed what in which revision?

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