Some quick code to use UDP-only (no TCP) with mBed. Echos received packets and sends packets when a button is pressed

Dependencies:   mbed

Committer:
pehrhovey
Date:
Sun Mar 14 00:54:12 2010 +0000
Revision:
0:a548a085de55

        

Who changed what in which revision?

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