ProjetoBB

Dependencies:   F7_Ethernet WebSocketClient mbed mcp3008

Fork of Nucleo_F746ZG_Ethernet by Dieter Graef

Committer:
DieterGraef
Date:
Sat Jun 18 10:49:12 2016 +0000
Revision:
0:f9b6112278fe
Ethernet for the NUCLEO STM32F746 Board Testprogram uses DHCP and NTP to set the clock

Who changed what in which revision?

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