Integrating the ublox LISA C200 modem

Fork of SprintUSBModemHTTPClientTest by Donatien Garnier

Committer:
sam_grove
Date:
Thu Sep 26 00:44:20 2013 -0500
Revision:
5:3f93dd1d4cb3
Exported program and replaced contents of the repo with the source
to build and debug using keil mdk. Libs NOT upto date are lwip, lwip-sys
and socket. these have newer versions under mbed_official but were starting
from a know working point

Who changed what in which revision?

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