Leest de waarde van een sensor binnen een maakt deze beschikbaar via internet

Dependencies:   NTPClient_NetServices mbed

Committer:
hendrikvincent
Date:
Mon Dec 02 09:01:23 2013 +0000
Revision:
0:05ccbd4f84f1
eerste programma;

Who changed what in which revision?

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