fdsf

Dependents:   sisk_proj_stat MQTT Hello_FXOS8700Q WireFSHandControl ... more

Committer:
grzemich
Date:
Wed Dec 07 23:47:50 2016 +0000
Revision:
0:d7bd7384a37c
dgd

Who changed what in which revision?

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