Ethernet test for ECE 4180 and others to find your IP address and do a simple HTTP GET request over port 80.

Dependencies:   mbed Socket lwip-eth lwip-sys lwip

Committer:
mkersh3
Date:
Thu Apr 04 05:26:09 2013 +0000
Revision:
0:e7ca326e76ee
Ethernet Test for ECE4180 and others to find their IP Address and do a simple HTTP GET request over port 80.

Who changed what in which revision?

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