Ethernetwebsoc

Dependencies:   C12832_lcd LM75B WebSocketClient mbed-rtos mbed Socket lwip-eth lwip-sys lwip

Committer:
GordonSin
Date:
Fri May 31 04:09:54 2013 +0000
Revision:
0:0ed2a7c7190c
31/5/2013;

Who changed what in which revision?

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