47#if LWIP_SNMP && SNMP_LWIP_MIB2
50#define SYNC_NODE_NAME(node_name) node_name ## _synced
51#define CREATE_LWIP_SYNC_NODE(oid, node_name) \
52 static const struct snmp_threadsync_node node_name ## _synced = SNMP_CREATE_THREAD_SYNC_NODE(oid, &node_name.node, &snmp_mib2_lwip_locks);
54#define SYNC_NODE_NAME(node_name) node_name
55#define CREATE_LWIP_SYNC_NODE(oid, node_name)
62interfaces_get_value(
struct snmp_node_instance *
instance,
void *
value)
73 *sint_ptr = num_netifs;
74 return sizeof(*sint_ptr);
81static const struct snmp_oid_range interfaces_Table_oid_ranges[] = {
85static const u8_t iftable_ifOutQLen = 0;
87static const u8_t iftable_ifOperStatus_up = 1;
88static const u8_t iftable_ifOperStatus_down = 2;
90static const u8_t iftable_ifAdminStatus_up = 1;
91static const u8_t iftable_ifAdminStatus_lowerLayerDown = 7;
92static const u8_t iftable_ifAdminStatus_down = 2;
95interfaces_Table_get_cell_instance(
const u32_t *
column,
const u32_t *row_oid,
u8_t row_oid_len,
struct snmp_node_instance *cell_instance)
103 if (!snmp_oid_in_range(row_oid, row_oid_len, interfaces_Table_oid_ranges,
LWIP_ARRAYSIZE(interfaces_Table_oid_ranges))) {
104 return SNMP_ERR_NOSUCHINSTANCE;
108 ifIndex = row_oid[0];
112 if (netif_to_num(
netif) == ifIndex) {
114 cell_instance->reference.ptr =
netif;
115 return SNMP_ERR_NOERROR;
120 return SNMP_ERR_NOSUCHINSTANCE;
124interfaces_Table_get_next_cell_instance(
const u32_t *
column,
struct snmp_obj_id *row_oid,
struct snmp_node_instance *cell_instance)
127 struct snmp_next_oid_state
state;
133 snmp_next_oid_init(&
state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(interfaces_Table_oid_ranges));
138 test_oid[0] = netif_to_num(
netif);
145 if (
state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
146 snmp_oid_assign(row_oid,
state.next_oid,
state.next_oid_len);
148 cell_instance->reference.ptr =
state.reference;
149 return SNMP_ERR_NOERROR;
153 return SNMP_ERR_NOSUCHINSTANCE;
157interfaces_Table_get_value(
struct snmp_node_instance *
instance,
void *
value)
164 switch (SNMP_TABLE_GET_COLUMN_FROM_OID(
instance->instance_oid.id)) {
166 *value_s32 = netif_to_num(
netif);
167 value_len =
sizeof(*value_s32);
174 *value_s32 =
netif->link_type;
175 value_len =
sizeof(*value_s32);
179 value_len =
sizeof(*value_s32);
182 *value_u32 =
netif->link_speed;
183 value_len =
sizeof(*value_u32);
191 *value_s32 = iftable_ifOperStatus_up;
193 *value_s32 = iftable_ifOperStatus_down;
195 value_len =
sizeof(*value_s32);
200 *value_s32 = iftable_ifAdminStatus_up;
202 *value_s32 = iftable_ifAdminStatus_lowerLayerDown;
205 *value_s32 = iftable_ifAdminStatus_down;
207 value_len =
sizeof(*value_s32);
210 *value_u32 =
netif->ts;
211 value_len =
sizeof(*value_u32);
214 *value_u32 =
netif->mib2_counters.ifinoctets;
215 value_len =
sizeof(*value_u32);
218 *value_u32 =
netif->mib2_counters.ifinucastpkts;
219 value_len =
sizeof(*value_u32);
222 *value_u32 =
netif->mib2_counters.ifinnucastpkts;
223 value_len =
sizeof(*value_u32);
226 *value_u32 =
netif->mib2_counters.ifindiscards;
227 value_len =
sizeof(*value_u32);
230 *value_u32 =
netif->mib2_counters.ifinerrors;
231 value_len =
sizeof(*value_u32);
234 *value_u32 =
netif->mib2_counters.ifinunknownprotos;
235 value_len =
sizeof(*value_u32);
238 *value_u32 =
netif->mib2_counters.ifoutoctets;
239 value_len =
sizeof(*value_u32);
242 *value_u32 =
netif->mib2_counters.ifoutucastpkts;
243 value_len =
sizeof(*value_u32);
246 *value_u32 =
netif->mib2_counters.ifoutnucastpkts;
247 value_len =
sizeof(*value_u32);
250 *value_u32 =
netif->mib2_counters.ifoutdiscards;
251 value_len =
sizeof(*value_u32);
254 *value_u32 =
netif->mib2_counters.ifouterrors;
255 value_len =
sizeof(*value_u32);
258 *value_u32 = iftable_ifOutQLen;
259 value_len =
sizeof(*value_u32);
263 value_len = snmp_zero_dot_zero.len *
sizeof(
u32_t);
273#if !SNMP_SAFE_REQUESTS
282 LWIP_ASSERT(
"Invalid column", (SNMP_TABLE_GET_COLUMN_FROM_OID(
instance->instance_oid.id) == 7));
285 if (*sint_ptr == 1 || *sint_ptr == 2) {
286 return SNMP_ERR_NOERROR;
289 return SNMP_ERR_WRONGVALUE;
300 LWIP_ASSERT(
"Invalid column", (SNMP_TABLE_GET_COLUMN_FROM_OID(
instance->instance_oid.id) == 7));
303 if (*sint_ptr == 1) {
305 }
else if (*sint_ptr == 2) {
309 return SNMP_ERR_NOERROR;
314static const struct snmp_scalar_node interfaces_Number = SNMP_SCALAR_CREATE_NODE_READONLY(1, SNMP_ASN1_TYPE_INTEGER, interfaces_get_value);
316static const struct snmp_table_col_def interfaces_Table_columns[] = {
317 { 1, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY },
318 { 2, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY },
319 { 3, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY },
320 { 4, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY },
321 { 5, SNMP_ASN1_TYPE_GAUGE, SNMP_NODE_INSTANCE_READ_ONLY },
322 { 6, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY },
323#if !SNMP_SAFE_REQUESTS
324 { 7, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_WRITE },
326 { 7, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY },
328 { 8, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY },
329 { 9, SNMP_ASN1_TYPE_TIMETICKS, SNMP_NODE_INSTANCE_READ_ONLY },
330 { 10, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
331 { 11, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
332 { 12, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
333 { 13, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
334 { 14, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
335 { 15, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
336 { 16, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
337 { 17, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
338 { 18, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
339 { 19, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
340 { 20, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
341 { 21, SNMP_ASN1_TYPE_GAUGE, SNMP_NODE_INSTANCE_READ_ONLY },
342 { 22, SNMP_ASN1_TYPE_OBJECT_ID, SNMP_NODE_INSTANCE_READ_ONLY }
345#if !SNMP_SAFE_REQUESTS
346static const struct snmp_table_node interfaces_Table = SNMP_TABLE_CREATE(
347 2, interfaces_Table_columns,
348 interfaces_Table_get_cell_instance, interfaces_Table_get_next_cell_instance,
349 interfaces_Table_get_value, interfaces_Table_set_test, interfaces_Table_set_value);
351static const struct snmp_table_node interfaces_Table = SNMP_TABLE_CREATE(
352 2, interfaces_Table_columns,
353 interfaces_Table_get_cell_instance, interfaces_Table_get_next_cell_instance,
354 interfaces_Table_get_value,
NULL,
NULL);
358CREATE_LWIP_SYNC_NODE(1, interfaces_Number)
359CREATE_LWIP_SYNC_NODE(2, interfaces_Table)
361static const struct snmp_node *
const interface_nodes[] = {
362 &SYNC_NODE_NAME(interfaces_Number).node.node,
363 &SYNC_NODE_NAME(interfaces_Table).node.node
366const struct snmp_tree_node snmp_mib2_interface_root = SNMP_CREATE_TREE_NODE(2, interface_nodes);
#define LWIP_ARRAYSIZE(x)
static HINSTANCE instance
#define LWIP_ASSERT(message, assertion)
#define LWIP_UNUSED_ARG(x)
void netif_set_down(struct netif *netif)
#define netif_is_up(netif)
void netif_set_up(struct netif *netif)
#define MEMCPY(DST, SRC, BYTES)
#define netif_is_link_up(netif)
#define NETIF_FOREACH(netif)
u8_t hwaddr[NETIF_MAX_HWADDR_LEN]