Dependents:   TimeZoneDemo EthernetJackTestCode MMEx_Challenge ntp_mem ... more

Committer:
segundo
Date:
Wed Dec 15 18:01:30 2010 +0000
Revision:
7:4e2468d7d5cb
Parent:
0:ac1725ba162c

        

Who changed what in which revision?

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