My fork of the HTTPServer (working)

Dependents:   DGWWebServer LAN2

Committer:
screamer
Date:
Mon Aug 06 09:23:14 2012 +0000
Revision:
0:7a64fbb4069d
[mbed] converted /DGWWebServer/HTTPServer

Who changed what in which revision?

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