This library is stripped down version of NetServices library. HTTP server and client function is NOT supported.

Dependents:   imu-daq-eth

Committer:
idinor
Date:
Wed Jul 20 11:45:39 2011 +0000
Revision:
0:dcf3c92487ca

        

Who changed what in which revision?

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