ZG2100 Network interface source

Committer:
donatien
Date:
Fri Aug 06 10:46:03 2010 +0000
Revision:
4:e00281c7453d
Parent:
1:3a7c15057192

        

Who changed what in which revision?

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