Used in Live Traffic Update Nokia LCD Display Project

Fork of NetServices by Segundo Equipo

Committer:
rrajan8
Date:
Wed Mar 06 19:07:23 2013 +0000
Revision:
8:92b57208ab99
Parent:
0:ac1725ba162c
This project utilizes mbed's networking features to display live traffic updates on the Nokia LCD using the MapQuest API's Traffic Web Service.

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 */