Ethernet for Nucleo and Disco board STM32F746 works with gcc and arm. IAC is untested

Dependents:   STM32F746_iothub_client_sample_mqtt DISCO-F746NG_Ethernet Nucleo_F746ZG_Ethernet thethingsiO-DISCO_F746NG-mqtt ... more

Committer:
DieterGraef
Date:
Sun Jun 19 16:23:40 2016 +0000
Revision:
0:d26c1b55cfca
Ethernet Library for Nucleo stm32f746ZG and Disco stm32f746NG  works under arm and gcc environment

Who changed what in which revision?

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