Modified version of NetServices. Fixes an issue where connections failed should the HTTP response status line be received in a packet on its own prior to any further headers. Changes are made to the HTTPClient.cpp file's readHeaders method.

Committer:
andrewbonney
Date:
Fri Apr 08 14:39:41 2011 +0000
Revision:
0:ec559500a63f

        

Who changed what in which revision?

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