47#if LWIP_SNMP && SNMP_LWIP_MIB2 && LWIP_UDP
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)
61udp_get_value(
struct snmp_node_instance *
instance,
void *
value)
67 *uint_ptr = STATS_GET(
mib2.udpindatagrams);
68 return sizeof(*uint_ptr);
70 *uint_ptr = STATS_GET(
mib2.udpnoports);
71 return sizeof(*uint_ptr);
73 *uint_ptr = STATS_GET(
mib2.udpinerrors);
74 return sizeof(*uint_ptr);
76 *uint_ptr = STATS_GET(
mib2.udpoutdatagrams);
77 return sizeof(*uint_ptr);
81 u64_t val64 = STATS_GET(
mib2.udpindatagrams);
82 *((u64_t *)
value) = val64;
87 u64_t val64 = STATS_GET(
mib2.udpoutdatagrams);
88 *((u64_t *)
value) = val64;
103udp_endpointTable_get_cell_value_core(
const u32_t *
column,
union snmp_variant_value *
value)
111 return SNMP_ERR_NOSUCHINSTANCE;
114 return SNMP_ERR_NOERROR;
121 u16_t local_port, remote_port;
128 idx += snmp_oid_to_ip_port(&row_oid[
idx], row_oid_len -
idx, &local_ip, &local_port);
130 return SNMP_ERR_NOSUCHINSTANCE;
134 idx += snmp_oid_to_ip_port(&row_oid[
idx], row_oid_len -
idx, &remote_ip, &remote_port);
136 return SNMP_ERR_NOSUCHINSTANCE;
140 if (row_oid_len < (
idx + 1)) {
141 return SNMP_ERR_NOSUCHINSTANCE;
143 if (row_oid[
idx] != 0) {
144 return SNMP_ERR_NOSUCHINSTANCE;
149 while (pcb !=
NULL) {
151 (local_port == pcb->local_port) &&
153 (remote_port == pcb->remote_port)) {
155 return udp_endpointTable_get_cell_value_core(
column,
value);
161 return SNMP_ERR_NOSUCHINSTANCE;
165udp_endpointTable_get_next_cell_instance_and_value(
const u32_t *
column,
struct snmp_obj_id *row_oid,
union snmp_variant_value *
value,
u32_t *value_len)
168 struct snmp_next_oid_state
state;
173 u32_t result_temp[39];
178 snmp_next_oid_init(&
state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(result_temp));
182 while (pcb !=
NULL) {
187 idx += snmp_ip_port_to_oid(&pcb->local_ip, pcb->local_port, &test_oid[
idx]);
190 idx += snmp_ip_port_to_oid(&pcb->remote_ip, pcb->remote_port, &test_oid[
idx]);
202 if (
state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
203 snmp_oid_assign(row_oid,
state.next_oid,
state.next_oid_len);
205 return udp_endpointTable_get_cell_value_core(
column,
value);
208 return SNMP_ERR_NOSUCHINSTANCE;
217static const struct snmp_oid_range udp_Table_oid_ranges[] = {
226udp_Table_get_cell_value_core(
struct udp_pcb *pcb,
const u32_t *
column,
union snmp_variant_value *
value,
u32_t *value_len)
233 value->u32 = ip_2_ip4(&pcb->local_ip)->addr;
237 value->u32 = pcb->local_port;
240 return SNMP_ERR_NOSUCHINSTANCE;
243 return SNMP_ERR_NOERROR;
254 if (!snmp_oid_in_range(row_oid, row_oid_len, udp_Table_oid_ranges,
LWIP_ARRAYSIZE(udp_Table_oid_ranges))) {
255 return SNMP_ERR_NOSUCHINSTANCE;
259 snmp_oid_to_ip4(&row_oid[0], &
ip);
264 while (pcb !=
NULL) {
266 if (ip4_addr_eq(&
ip, ip_2_ip4(&pcb->local_ip)) && (
port == pcb->local_port)) {
268 return udp_Table_get_cell_value_core(pcb,
column,
value, value_len);
275 return SNMP_ERR_NOSUCHINSTANCE;
279udp_Table_get_next_cell_instance_and_value(
const u32_t *
column,
struct snmp_obj_id *row_oid,
union snmp_variant_value *
value,
u32_t *value_len)
282 struct snmp_next_oid_state
state;
286 snmp_next_oid_init(&
state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(udp_Table_oid_ranges));
290 while (pcb !=
NULL) {
294 snmp_ip4_to_oid(ip_2_ip4(&pcb->local_ip), &test_oid[0]);
295 test_oid[4] = pcb->local_port;
305 if (
state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
306 snmp_oid_assign(row_oid,
state.next_oid,
state.next_oid_len);
308 return udp_Table_get_cell_value_core((
struct udp_pcb *)
state.reference,
column,
value, value_len);
311 return SNMP_ERR_NOSUCHINSTANCE;
317static const struct snmp_scalar_node udp_inDatagrams = SNMP_SCALAR_CREATE_NODE_READONLY(1, SNMP_ASN1_TYPE_COUNTER, udp_get_value);
318static const struct snmp_scalar_node udp_noPorts = SNMP_SCALAR_CREATE_NODE_READONLY(2, SNMP_ASN1_TYPE_COUNTER, udp_get_value);
319static const struct snmp_scalar_node udp_inErrors = SNMP_SCALAR_CREATE_NODE_READONLY(3, SNMP_ASN1_TYPE_COUNTER, udp_get_value);
320static const struct snmp_scalar_node udp_outDatagrams = SNMP_SCALAR_CREATE_NODE_READONLY(4, SNMP_ASN1_TYPE_COUNTER, udp_get_value);
322static const struct snmp_scalar_node udp_HCInDatagrams = SNMP_SCALAR_CREATE_NODE_READONLY(8, SNMP_ASN1_TYPE_COUNTER64, udp_get_value);
323static const struct snmp_scalar_node udp_HCOutDatagrams = SNMP_SCALAR_CREATE_NODE_READONLY(9, SNMP_ASN1_TYPE_COUNTER64, udp_get_value);
327static const struct snmp_table_simple_col_def udp_Table_columns[] = {
328 { 1, SNMP_ASN1_TYPE_IPADDR, SNMP_VARIANT_VALUE_TYPE_U32 },
329 { 2, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 }
331static const struct snmp_table_simple_node udp_Table = SNMP_TABLE_CREATE_SIMPLE(5, udp_Table_columns, udp_Table_get_cell_value, udp_Table_get_next_cell_instance_and_value);
334static const struct snmp_table_simple_col_def udp_endpointTable_columns[] = {
336 { 8, SNMP_ASN1_TYPE_UNSIGNED32, SNMP_VARIANT_VALUE_TYPE_U32 }
339static const struct snmp_table_simple_node udp_endpointTable = SNMP_TABLE_CREATE_SIMPLE(7, udp_endpointTable_columns, udp_endpointTable_get_cell_value, udp_endpointTable_get_next_cell_instance_and_value);
342CREATE_LWIP_SYNC_NODE(1, udp_inDatagrams)
343CREATE_LWIP_SYNC_NODE(2, udp_noPorts)
344CREATE_LWIP_SYNC_NODE(3, udp_inErrors)
345CREATE_LWIP_SYNC_NODE(4, udp_outDatagrams)
347CREATE_LWIP_SYNC_NODE(5, udp_Table)
349CREATE_LWIP_SYNC_NODE(7, udp_endpointTable)
351CREATE_LWIP_SYNC_NODE(8, udp_HCInDatagrams)
352CREATE_LWIP_SYNC_NODE(9, udp_HCOutDatagrams)
355static const struct snmp_node *
const udp_nodes[] = {
356 &SYNC_NODE_NAME(udp_inDatagrams).node.node,
357 &SYNC_NODE_NAME(udp_noPorts).node.node,
358 &SYNC_NODE_NAME(udp_inErrors).node.node,
359 &SYNC_NODE_NAME(udp_outDatagrams).node.node,
361 &SYNC_NODE_NAME(udp_Table).node.node,
363 &SYNC_NODE_NAME(udp_endpointTable).node.node
366 &SYNC_NODE_NAME(udp_HCInDatagrams).node.node,
367 &SYNC_NODE_NAME(udp_HCOutDatagrams).node.node
371const struct snmp_tree_node snmp_mib2_udp_root = SNMP_CREATE_TREE_NODE(7, udp_nodes);
#define LWIP_ARRAYSIZE(x)
static HINSTANCE instance
#define LWIP_DEBUGF(debug, message)
#define LWIP_UNUSED_ARG(x)
#define ip_addr_eq(addr1, addr2)
#define IP_IS_V4_VAL(ipaddr)