ソースの整理中ですが、利用はできます。 大きなファイルはできないかもしれません。

Dependencies:   EthernetInterface HttpServer TextLCD expatlib mbed-rpc mbed-rtos mbed Socket lwip-eth lwip-sys lwip

Fork of giken9_HTMLServer_Sample by Yasushi TAUCHI

Committer:
yueee_yt
Date:
Wed Mar 12 04:19:54 2014 +0000
Revision:
0:7766f6712673
???????????????

Who changed what in which revision?

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