HTTPClient using static IP

Dependencies:   mbed

Committer:
mr_q
Date:
Mon May 30 11:53:37 2011 +0000
Revision:
0:d8f2f7d5f31b
v0.01 Draft

Who changed what in which revision?

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