44 #error LWIP_SNMP MIB2 needs LWIP_STATS (for MIB2) 47 #error LWIP_SNMP MIB2 needs MIB2_STATS (for MIB2) 75 while (netif_iterator !=
NULL) {
78 if(netif_iterator == netif) {
82 netif_iterator = netif_iterator->
next;
89 #define MIB2_AUTH_TRAPS_ENABLED 1 90 #define MIB2_AUTH_TRAPS_DISABLED 2 95 snmp_mib2_lwip_synchronizer(snmp_threadsync_called_fn fn,
void* arg)
100 struct snmp_threadsync_instance snmp_mib2_lwip_locks;
102 #define SYNC_NODE_NAME(node_name) node_name ## _synced 103 #define CREATE_LWIP_SYNC_NODE(oid, node_name) \ 104 static const struct snmp_threadsync_node node_name ## _synced = SNMP_CREATE_THREAD_SYNC_NODE(oid, &node_name.node, &snmp_mib2_lwip_locks); 106 #define SYNC_NODE_NAME(node_name) node_name 107 #define CREATE_LWIP_SYNC_NODE(oid, node_name) 111 static u16_t snmp_get_value(
const struct snmp_scalar_array_node_def *node,
void *value);
112 static snmp_err_t snmp_set_test(
const struct snmp_scalar_array_node_def *node,
u16_t len,
void *value);
113 static snmp_err_t snmp_set_value(
const struct snmp_scalar_array_node_def *node,
u16_t len,
void *value);
116 static const struct snmp_scalar_array_node_def snmp_nodes[] = {
117 { 1, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
118 { 2, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
119 { 3, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
120 { 4, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
121 { 5, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
122 { 6, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
123 { 8, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
124 { 9, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
125 {10, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
126 {11, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
127 {12, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
128 {13, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
129 {14, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
130 {15, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
131 {16, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
132 {17, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
133 {18, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
134 {19, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
135 {20, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
136 {21, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
137 {22, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
138 {24, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
139 {25, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
140 {26, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
141 {27, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
142 {28, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
143 {29, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
144 {30, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_WRITE},
145 {31, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY},
146 {32, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY}
148 static const struct snmp_scalar_array_node snmp_root = SNMP_SCALAR_CREATE_ARRAY_NODE(11, snmp_nodes, snmp_get_value, snmp_set_test, snmp_set_value);
156 static u16_t udp_get_value(
struct snmp_node_instance* instance,
void* value);
158 static const struct snmp_scalar_node udp_inDatagrams = SNMP_SCALAR_CREATE_NODE_READONLY(1, SNMP_ASN1_TYPE_COUNTER, udp_get_value);
159 static const struct snmp_scalar_node udp_noPorts = SNMP_SCALAR_CREATE_NODE_READONLY(2, SNMP_ASN1_TYPE_COUNTER, udp_get_value);
160 static const struct snmp_scalar_node udp_inErrors = SNMP_SCALAR_CREATE_NODE_READONLY(3, SNMP_ASN1_TYPE_COUNTER, udp_get_value);
161 static const struct snmp_scalar_node udp_outDatagrams = SNMP_SCALAR_CREATE_NODE_READONLY(4, SNMP_ASN1_TYPE_COUNTER, udp_get_value);
162 static const struct snmp_scalar_node udp_HCInDatagrams = SNMP_SCALAR_CREATE_NODE_READONLY(8, SNMP_ASN1_TYPE_COUNTER64, udp_get_value);
163 static const struct snmp_scalar_node udp_HCOutDatagrams = SNMP_SCALAR_CREATE_NODE_READONLY(9, SNMP_ASN1_TYPE_COUNTER64, udp_get_value);
166 static snmp_err_t udp_Table_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len);
167 static snmp_err_t udp_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);
169 static const struct snmp_table_simple_col_def udp_Table_columns[] = {
170 { 1, SNMP_ASN1_TYPE_IPADDR, SNMP_VARIANT_VALUE_TYPE_U32 },
171 { 2, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 }
173 static 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);
176 static snmp_err_t udp_endpointTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len);
177 static snmp_err_t udp_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);
179 static const struct snmp_table_simple_col_def udp_endpointTable_columns[] = {
181 { 8, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 }
184 static 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);
187 CREATE_LWIP_SYNC_NODE(1, udp_inDatagrams)
188 CREATE_LWIP_SYNC_NODE(2, udp_noPorts)
189 CREATE_LWIP_SYNC_NODE(3, udp_inErrors)
190 CREATE_LWIP_SYNC_NODE(4, udp_outDatagrams)
192 CREATE_LWIP_SYNC_NODE(5, udp_Table)
194 CREATE_LWIP_SYNC_NODE(7, udp_endpointTable)
195 CREATE_LWIP_SYNC_NODE(8, udp_HCInDatagrams)
196 CREATE_LWIP_SYNC_NODE(9, udp_HCOutDatagrams)
198 static const struct snmp_node* udp_nodes[] = {
199 &SYNC_NODE_NAME(udp_inDatagrams).node.node,
200 &SYNC_NODE_NAME(udp_noPorts).node.node,
201 &SYNC_NODE_NAME(udp_inErrors).node.node,
202 &SYNC_NODE_NAME(udp_outDatagrams).node.node,
204 &SYNC_NODE_NAME(udp_Table).node.node,
206 &SYNC_NODE_NAME(udp_endpointTable).node.node,
207 &SYNC_NODE_NAME(udp_HCInDatagrams).node.node,
208 &SYNC_NODE_NAME(udp_HCOutDatagrams).node.node
211 static const struct snmp_tree_node udp_root = SNMP_CREATE_TREE_NODE(7, udp_nodes);
218 static u16_t tcp_get_value(
struct snmp_node_instance* instance,
void* value);
220 static const struct snmp_scalar_node tcp_RtoAlgorithm = SNMP_SCALAR_CREATE_NODE_READONLY(1, SNMP_ASN1_TYPE_INTEGER, tcp_get_value);
221 static const struct snmp_scalar_node tcp_RtoMin = SNMP_SCALAR_CREATE_NODE_READONLY(2, SNMP_ASN1_TYPE_INTEGER, tcp_get_value);
222 static const struct snmp_scalar_node tcp_RtoMax = SNMP_SCALAR_CREATE_NODE_READONLY(3, SNMP_ASN1_TYPE_INTEGER, tcp_get_value);
223 static const struct snmp_scalar_node tcp_MaxConn = SNMP_SCALAR_CREATE_NODE_READONLY(4, SNMP_ASN1_TYPE_INTEGER, tcp_get_value);
224 static const struct snmp_scalar_node tcp_ActiveOpens = SNMP_SCALAR_CREATE_NODE_READONLY(5, SNMP_ASN1_TYPE_COUNTER, tcp_get_value);
225 static const struct snmp_scalar_node tcp_PassiveOpens = SNMP_SCALAR_CREATE_NODE_READONLY(6, SNMP_ASN1_TYPE_COUNTER, tcp_get_value);
226 static const struct snmp_scalar_node tcp_AttemptFails = SNMP_SCALAR_CREATE_NODE_READONLY(7, SNMP_ASN1_TYPE_COUNTER, tcp_get_value);
227 static const struct snmp_scalar_node tcp_EstabResets = SNMP_SCALAR_CREATE_NODE_READONLY(8, SNMP_ASN1_TYPE_COUNTER, tcp_get_value);
228 static const struct snmp_scalar_node tcp_CurrEstab = SNMP_SCALAR_CREATE_NODE_READONLY(9, SNMP_ASN1_TYPE_GAUGE, tcp_get_value);
229 static const struct snmp_scalar_node tcp_InSegs = SNMP_SCALAR_CREATE_NODE_READONLY(10, SNMP_ASN1_TYPE_COUNTER, tcp_get_value);
230 static const struct snmp_scalar_node tcp_OutSegs = SNMP_SCALAR_CREATE_NODE_READONLY(11, SNMP_ASN1_TYPE_COUNTER, tcp_get_value);
231 static const struct snmp_scalar_node tcp_RetransSegs = SNMP_SCALAR_CREATE_NODE_READONLY(12, SNMP_ASN1_TYPE_COUNTER, tcp_get_value);
232 static const struct snmp_scalar_node tcp_InErrs = SNMP_SCALAR_CREATE_NODE_READONLY(14, SNMP_ASN1_TYPE_COUNTER, tcp_get_value);
233 static const struct snmp_scalar_node tcp_OutRsts = SNMP_SCALAR_CREATE_NODE_READONLY(15, SNMP_ASN1_TYPE_COUNTER, tcp_get_value);
234 static const struct snmp_scalar_node tcp_HCInSegs = SNMP_SCALAR_CREATE_NODE_READONLY(17, SNMP_ASN1_TYPE_COUNTER64, tcp_get_value);
235 static const struct snmp_scalar_node tcp_HCOutSegs = SNMP_SCALAR_CREATE_NODE_READONLY(18, SNMP_ASN1_TYPE_COUNTER64, tcp_get_value);
238 static snmp_err_t tcp_ConnTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len);
239 static snmp_err_t tcp_ConnTable_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);
241 static const struct snmp_table_simple_col_def tcp_ConnTable_columns[] = {
242 { 1, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 },
243 { 2, SNMP_ASN1_TYPE_IPADDR, SNMP_VARIANT_VALUE_TYPE_U32 },
244 { 3, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 },
245 { 4, SNMP_ASN1_TYPE_IPADDR, SNMP_VARIANT_VALUE_TYPE_U32 },
246 { 5, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 }
249 static const struct snmp_table_simple_node tcp_ConnTable = SNMP_TABLE_CREATE_SIMPLE(13, tcp_ConnTable_columns, tcp_ConnTable_get_cell_value, tcp_ConnTable_get_next_cell_instance_and_value);
252 static snmp_err_t tcp_ConnectionTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len);
253 static snmp_err_t tcp_ConnectionTable_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);
255 static const struct snmp_table_simple_col_def tcp_ConnectionTable_columns[] = {
257 { 7, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 },
258 { 8, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 }
261 static const struct snmp_table_simple_node tcp_ConnectionTable = SNMP_TABLE_CREATE_SIMPLE(19, tcp_ConnectionTable_columns, tcp_ConnectionTable_get_cell_value, tcp_ConnectionTable_get_next_cell_instance_and_value);
264 static snmp_err_t tcp_ListenerTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len);
265 static snmp_err_t tcp_ListenerTable_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);
267 static const struct snmp_table_simple_col_def tcp_ListenerTable_columns[] = {
269 { 4, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 }
272 static const struct snmp_table_simple_node tcp_ListenerTable = SNMP_TABLE_CREATE_SIMPLE(20, tcp_ListenerTable_columns, tcp_ListenerTable_get_cell_value, tcp_ListenerTable_get_next_cell_instance_and_value);
275 CREATE_LWIP_SYNC_NODE( 1, tcp_RtoAlgorithm)
276 CREATE_LWIP_SYNC_NODE( 2, tcp_RtoMin)
277 CREATE_LWIP_SYNC_NODE( 3, tcp_RtoMax)
278 CREATE_LWIP_SYNC_NODE( 4, tcp_MaxConn)
279 CREATE_LWIP_SYNC_NODE( 5, tcp_ActiveOpens)
280 CREATE_LWIP_SYNC_NODE( 6, tcp_PassiveOpens)
281 CREATE_LWIP_SYNC_NODE( 7, tcp_AttemptFails)
282 CREATE_LWIP_SYNC_NODE( 8, tcp_EstabResets)
283 CREATE_LWIP_SYNC_NODE( 9, tcp_CurrEstab)
284 CREATE_LWIP_SYNC_NODE(10, tcp_InSegs)
285 CREATE_LWIP_SYNC_NODE(11, tcp_OutSegs)
286 CREATE_LWIP_SYNC_NODE(12, tcp_RetransSegs)
288 CREATE_LWIP_SYNC_NODE(13, tcp_ConnTable)
290 CREATE_LWIP_SYNC_NODE(14, tcp_InErrs)
291 CREATE_LWIP_SYNC_NODE(15, tcp_OutRsts)
292 CREATE_LWIP_SYNC_NODE(17, tcp_HCInSegs)
293 CREATE_LWIP_SYNC_NODE(18, tcp_HCOutSegs)
294 CREATE_LWIP_SYNC_NODE(19, tcp_ConnectionTable)
295 CREATE_LWIP_SYNC_NODE(20, tcp_ListenerTable)
297 static const struct snmp_node* tcp_nodes[] = {
298 &SYNC_NODE_NAME(tcp_RtoAlgorithm).node.node,
299 &SYNC_NODE_NAME(tcp_RtoMin).node.node,
300 &SYNC_NODE_NAME(tcp_RtoMax).node.node,
301 &SYNC_NODE_NAME(tcp_MaxConn).node.node,
302 &SYNC_NODE_NAME(tcp_ActiveOpens).node.node,
303 &SYNC_NODE_NAME(tcp_PassiveOpens).node.node,
304 &SYNC_NODE_NAME(tcp_AttemptFails).node.node,
305 &SYNC_NODE_NAME(tcp_EstabResets).node.node,
306 &SYNC_NODE_NAME(tcp_CurrEstab).node.node,
307 &SYNC_NODE_NAME(tcp_InSegs).node.node,
308 &SYNC_NODE_NAME(tcp_OutSegs).node.node,
309 &SYNC_NODE_NAME(tcp_RetransSegs).node.node,
311 &SYNC_NODE_NAME(tcp_ConnTable).node.node,
313 &SYNC_NODE_NAME(tcp_InErrs).node.node,
314 &SYNC_NODE_NAME(tcp_OutRsts).node.node,
315 &SYNC_NODE_NAME(tcp_HCInSegs).node.node,
316 &SYNC_NODE_NAME(tcp_HCOutSegs).node.node,
317 &SYNC_NODE_NAME(tcp_ConnectionTable).node.node,
318 &SYNC_NODE_NAME(tcp_ListenerTable).node.node
321 static const struct snmp_tree_node tcp_root = SNMP_CREATE_TREE_NODE(6, tcp_nodes);
326 static u16_t icmp_get_value(
const struct snmp_scalar_array_node_def *node,
void *value);
328 static const struct snmp_scalar_array_node_def icmp_nodes[] = {
329 { 1, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
330 { 2, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
331 { 3, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
332 { 4, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
333 { 5, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
334 { 6, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
335 { 7, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
336 { 8, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
337 { 9, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
338 {10, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
339 {11, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
340 {12, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
341 {13, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
342 {14, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
343 {15, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
344 {16, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
345 {17, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
346 {18, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
347 {19, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
348 {20, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
349 {21, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
350 {22, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
351 {23, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
352 {24, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
353 {25, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY},
354 {26, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY}
356 static const struct snmp_scalar_array_node icmp_root = SNMP_SCALAR_CREATE_ARRAY_NODE(5, icmp_nodes, icmp_get_value,
NULL,
NULL);
361 static u16_t ip_get_value(
struct snmp_node_instance* instance,
void* value);
362 static snmp_err_t ip_set_test(
struct snmp_node_instance* instance,
u16_t len,
void *value);
363 static snmp_err_t ip_set_value(
struct snmp_node_instance* instance,
u16_t len,
void *value);
365 static snmp_err_t ip_AddrTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len);
366 static snmp_err_t ip_AddrTable_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);
367 static snmp_err_t ip_RouteTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len);
368 static snmp_err_t ip_RouteTable_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);
369 static snmp_err_t ip_NetToMediaTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len);
370 static snmp_err_t ip_NetToMediaTable_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);
372 static const struct snmp_scalar_node ip_Forwarding = SNMP_SCALAR_CREATE_NODE(1, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_INTEGER, ip_get_value, ip_set_test, ip_set_value);
373 static const struct snmp_scalar_node ip_DefaultTTL = SNMP_SCALAR_CREATE_NODE(2, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_INTEGER, ip_get_value, ip_set_test, ip_set_value);
374 static const struct snmp_scalar_node ip_InReceives = SNMP_SCALAR_CREATE_NODE_READONLY(3, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
375 static const struct snmp_scalar_node ip_InHdrErrors = SNMP_SCALAR_CREATE_NODE_READONLY(4, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
376 static const struct snmp_scalar_node ip_InAddrErrors = SNMP_SCALAR_CREATE_NODE_READONLY(5, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
377 static const struct snmp_scalar_node ip_ForwDatagrams = SNMP_SCALAR_CREATE_NODE_READONLY(6, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
378 static const struct snmp_scalar_node ip_InUnknownProtos = SNMP_SCALAR_CREATE_NODE_READONLY(7, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
379 static const struct snmp_scalar_node ip_InDiscards = SNMP_SCALAR_CREATE_NODE_READONLY(8, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
380 static const struct snmp_scalar_node ip_InDelivers = SNMP_SCALAR_CREATE_NODE_READONLY(9, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
381 static const struct snmp_scalar_node ip_OutRequests = SNMP_SCALAR_CREATE_NODE_READONLY(10, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
382 static const struct snmp_scalar_node ip_OutDiscards = SNMP_SCALAR_CREATE_NODE_READONLY(11, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
383 static const struct snmp_scalar_node ip_OutNoRoutes = SNMP_SCALAR_CREATE_NODE_READONLY(12, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
384 static const struct snmp_scalar_node ip_ReasmTimeout = SNMP_SCALAR_CREATE_NODE_READONLY(13, SNMP_ASN1_TYPE_INTEGER, ip_get_value);
385 static const struct snmp_scalar_node ip_ReasmReqds = SNMP_SCALAR_CREATE_NODE_READONLY(14, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
386 static const struct snmp_scalar_node ip_ReasmOKs = SNMP_SCALAR_CREATE_NODE_READONLY(15, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
387 static const struct snmp_scalar_node ip_ReasmFails = SNMP_SCALAR_CREATE_NODE_READONLY(16, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
388 static const struct snmp_scalar_node ip_FragOKs = SNMP_SCALAR_CREATE_NODE_READONLY(17, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
389 static const struct snmp_scalar_node ip_FragFails = SNMP_SCALAR_CREATE_NODE_READONLY(18, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
390 static const struct snmp_scalar_node ip_FragCreates = SNMP_SCALAR_CREATE_NODE_READONLY(19, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
391 static const struct snmp_scalar_node ip_RoutingDiscards = SNMP_SCALAR_CREATE_NODE_READONLY(23, SNMP_ASN1_TYPE_COUNTER, ip_get_value);
393 static const struct snmp_table_simple_col_def ip_AddrTable_columns[] = {
394 { 1, SNMP_ASN1_TYPE_IPADDR, SNMP_VARIANT_VALUE_TYPE_U32 },
395 { 2, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 },
396 { 3, SNMP_ASN1_TYPE_IPADDR, SNMP_VARIANT_VALUE_TYPE_U32 },
397 { 4, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 },
398 { 5, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 }
401 static const struct snmp_table_simple_node ip_AddrTable = SNMP_TABLE_CREATE_SIMPLE(20, ip_AddrTable_columns, ip_AddrTable_get_cell_value, ip_AddrTable_get_next_cell_instance_and_value);
403 static const struct snmp_table_simple_col_def ip_RouteTable_columns[] = {
404 { 1, SNMP_ASN1_TYPE_IPADDR, SNMP_VARIANT_VALUE_TYPE_U32 },
405 { 2, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 },
406 { 3, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_S32 },
407 { 4, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_S32 },
408 { 5, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_S32 },
409 { 6, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_S32 },
410 { 7, SNMP_ASN1_TYPE_IPADDR, SNMP_VARIANT_VALUE_TYPE_U32 },
411 { 8, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 },
412 { 9, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 },
413 { 10, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 },
414 { 11, SNMP_ASN1_TYPE_IPADDR, SNMP_VARIANT_VALUE_TYPE_U32 },
415 { 12, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_S32 },
416 { 13, SNMP_ASN1_TYPE_OBJECT_ID, SNMP_VARIANT_VALUE_TYPE_PTR }
419 static const struct snmp_table_simple_node ip_RouteTable = SNMP_TABLE_CREATE_SIMPLE(21, ip_RouteTable_columns, ip_RouteTable_get_cell_value, ip_RouteTable_get_next_cell_instance_and_value);
422 #if LWIP_ARP && LWIP_IPV4 423 static const struct snmp_table_simple_col_def ip_NetToMediaTable_columns[] = {
424 { 1, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 },
425 { 2, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_VARIANT_VALUE_TYPE_PTR },
426 { 3, SNMP_ASN1_TYPE_IPADDR, SNMP_VARIANT_VALUE_TYPE_U32 },
427 { 4, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 }
430 static const struct snmp_table_simple_node ip_NetToMediaTable = SNMP_TABLE_CREATE_SIMPLE(22, ip_NetToMediaTable_columns, ip_NetToMediaTable_get_cell_value, ip_NetToMediaTable_get_next_cell_instance_and_value);
435 CREATE_LWIP_SYNC_NODE( 1, ip_Forwarding)
436 CREATE_LWIP_SYNC_NODE( 2, ip_DefaultTTL)
437 CREATE_LWIP_SYNC_NODE( 3, ip_InReceives)
438 CREATE_LWIP_SYNC_NODE( 4, ip_InHdrErrors)
439 CREATE_LWIP_SYNC_NODE( 5, ip_InAddrErrors)
440 CREATE_LWIP_SYNC_NODE( 6, ip_ForwDatagrams)
441 CREATE_LWIP_SYNC_NODE( 7, ip_InUnknownProtos)
442 CREATE_LWIP_SYNC_NODE( 8, ip_InDiscards)
443 CREATE_LWIP_SYNC_NODE( 9, ip_InDelivers)
444 CREATE_LWIP_SYNC_NODE(10, ip_OutRequests)
445 CREATE_LWIP_SYNC_NODE(11, ip_OutDiscards)
446 CREATE_LWIP_SYNC_NODE(12, ip_OutNoRoutes)
447 CREATE_LWIP_SYNC_NODE(13, ip_ReasmTimeout)
448 CREATE_LWIP_SYNC_NODE(14, ip_ReasmReqds)
449 CREATE_LWIP_SYNC_NODE(15, ip_ReasmOKs)
450 CREATE_LWIP_SYNC_NODE(15, ip_ReasmFails)
451 CREATE_LWIP_SYNC_NODE(17, ip_FragOKs)
452 CREATE_LWIP_SYNC_NODE(18, ip_FragFails)
453 CREATE_LWIP_SYNC_NODE(19, ip_FragCreates)
454 CREATE_LWIP_SYNC_NODE(20, ip_AddrTable)
455 CREATE_LWIP_SYNC_NODE(21, ip_RouteTable)
457 CREATE_LWIP_SYNC_NODE(22, ip_NetToMediaTable)
459 CREATE_LWIP_SYNC_NODE(23, ip_RoutingDiscards)
461 static const struct snmp_node* ip_nodes[] = {
462 &SYNC_NODE_NAME(ip_Forwarding).node.node,
463 &SYNC_NODE_NAME(ip_DefaultTTL).node.node,
464 &SYNC_NODE_NAME(ip_InReceives).node.node,
465 &SYNC_NODE_NAME(ip_InHdrErrors).node.node,
466 &SYNC_NODE_NAME(ip_InAddrErrors).node.node,
467 &SYNC_NODE_NAME(ip_ForwDatagrams).node.node,
468 &SYNC_NODE_NAME(ip_InUnknownProtos).node.node,
469 &SYNC_NODE_NAME(ip_InDiscards).node.node,
470 &SYNC_NODE_NAME(ip_InDelivers).node.node,
471 &SYNC_NODE_NAME(ip_OutRequests).node.node,
472 &SYNC_NODE_NAME(ip_OutDiscards).node.node,
473 &SYNC_NODE_NAME(ip_OutNoRoutes).node.node,
474 &SYNC_NODE_NAME(ip_ReasmTimeout).node.node,
475 &SYNC_NODE_NAME(ip_ReasmReqds).node.node,
476 &SYNC_NODE_NAME(ip_ReasmOKs).node.node,
477 &SYNC_NODE_NAME(ip_ReasmFails).node.node,
478 &SYNC_NODE_NAME(ip_FragOKs).node.node,
479 &SYNC_NODE_NAME(ip_FragFails).node.node,
480 &SYNC_NODE_NAME(ip_FragCreates).node.node,
481 &SYNC_NODE_NAME(ip_AddrTable).node.node,
482 &SYNC_NODE_NAME(ip_RouteTable).node.node,
484 &SYNC_NODE_NAME(ip_NetToMediaTable).node.node,
486 &SYNC_NODE_NAME(ip_RoutingDiscards).node.node
489 static const struct snmp_tree_node ip_root = SNMP_CREATE_TREE_NODE(4, ip_nodes);
494 #if LWIP_ARP && LWIP_IPV4 496 static const struct snmp_table_simple_col_def at_Table_columns[] = {
497 { 1, SNMP_ASN1_TYPE_INTEGER, SNMP_VARIANT_VALUE_TYPE_U32 },
498 { 2, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_VARIANT_VALUE_TYPE_PTR },
499 { 3, SNMP_ASN1_TYPE_IPADDR, SNMP_VARIANT_VALUE_TYPE_U32 }
502 static const struct snmp_table_simple_node at_Table = SNMP_TABLE_CREATE_SIMPLE(1, at_Table_columns, ip_NetToMediaTable_get_cell_value, ip_NetToMediaTable_get_next_cell_instance_and_value);
505 CREATE_LWIP_SYNC_NODE(1, at_Table)
507 static const struct snmp_node* at_nodes[] = {
508 &SYNC_NODE_NAME(at_Table).node.node
511 static const struct snmp_tree_node at_root = SNMP_CREATE_TREE_NODE(3, at_nodes);
515 static u16_t interfaces_get_value(
struct snmp_node_instance* instance,
void* value);
516 static snmp_err_t interfaces_Table_get_cell_instance(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
struct snmp_node_instance* cell_instance);
517 static snmp_err_t interfaces_Table_get_next_cell_instance(
const u32_t* column,
struct snmp_obj_id* row_oid,
struct snmp_node_instance* cell_instance);
518 static u16_t interfaces_Table_get_value(
struct snmp_node_instance* instance,
void* value);
519 #if !SNMP_SAFE_REQUESTS 520 static snmp_err_t interfaces_Table_set_test(
struct snmp_node_instance* instance,
u16_t len,
void *value);
521 static snmp_err_t interfaces_Table_set_value(
struct snmp_node_instance* instance,
u16_t len,
void *value);
524 static const struct snmp_scalar_node interfaces_Number = SNMP_SCALAR_CREATE_NODE_READONLY(1, SNMP_ASN1_TYPE_INTEGER, interfaces_get_value);
526 static const struct snmp_table_col_def interfaces_Table_columns[] = {
527 { 1, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY },
528 { 2, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY },
529 { 3, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY },
530 { 4, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY },
531 { 5, SNMP_ASN1_TYPE_GAUGE, SNMP_NODE_INSTANCE_READ_ONLY },
532 { 6, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY },
533 #if !SNMP_SAFE_REQUESTS 534 { 7, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_WRITE },
536 { 7, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY },
538 { 8, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY },
539 { 9, SNMP_ASN1_TYPE_TIMETICKS, SNMP_NODE_INSTANCE_READ_ONLY },
540 { 10, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
541 { 11, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
542 { 12, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
543 { 13, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
544 { 14, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
545 { 15, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
546 { 16, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
547 { 17, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
548 { 18, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
549 { 19, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
550 { 20, SNMP_ASN1_TYPE_COUNTER, SNMP_NODE_INSTANCE_READ_ONLY },
551 { 21, SNMP_ASN1_TYPE_GAUGE, SNMP_NODE_INSTANCE_READ_ONLY },
552 { 22, SNMP_ASN1_TYPE_OBJECT_ID, SNMP_NODE_INSTANCE_READ_ONLY }
555 #if !SNMP_SAFE_REQUESTS 556 static const struct snmp_table_node interfaces_Table = SNMP_TABLE_CREATE(
557 2, interfaces_Table_columns,
558 interfaces_Table_get_cell_instance, interfaces_Table_get_next_cell_instance,
559 interfaces_Table_get_value, interfaces_Table_set_test, interfaces_Table_set_value);
561 static const struct snmp_table_node interfaces_Table = SNMP_TABLE_CREATE(
562 2, interfaces_Table_columns,
563 interfaces_Table_get_cell_instance, interfaces_Table_get_next_cell_instance,
564 interfaces_Table_get_value,
NULL,
NULL);
568 CREATE_LWIP_SYNC_NODE(1, interfaces_Number)
569 CREATE_LWIP_SYNC_NODE(2, interfaces_Table)
571 static const struct snmp_node* interface_nodes[] = {
572 &SYNC_NODE_NAME(interfaces_Number).node.node,
573 &SYNC_NODE_NAME(interfaces_Table).node.node
576 static const struct snmp_tree_node interface_root = SNMP_CREATE_TREE_NODE(2, interface_nodes);
579 static u16_t system_get_value(
const struct snmp_scalar_array_node_def *node,
void *value);
580 static snmp_err_t system_set_test(
const struct snmp_scalar_array_node_def *node,
u16_t len,
void *value);
581 static snmp_err_t system_set_value(
const struct snmp_scalar_array_node_def *node,
u16_t len,
void *value);
583 static const struct snmp_scalar_array_node_def system_nodes[] = {
584 {1, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
585 {2, SNMP_ASN1_TYPE_OBJECT_ID, SNMP_NODE_INSTANCE_READ_ONLY},
586 {3, SNMP_ASN1_TYPE_TIMETICKS, SNMP_NODE_INSTANCE_READ_ONLY},
587 {4, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_WRITE},
588 {5, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_WRITE},
589 {6, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_WRITE},
590 {7, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY}
593 static const struct snmp_scalar_array_node system_node = SNMP_SCALAR_CREATE_ARRAY_NODE(1, system_nodes, system_get_value, system_set_test, system_set_value);
596 static const struct snmp_node* mib2_nodes[] = {
597 &system_node.node.node,
598 &interface_root.node,
599 #if LWIP_ARP && LWIP_IPV4 606 &icmp_root.node.node,
608 #if LWIP_TCP && LWIP_IPV4 611 #if LWIP_UDP && LWIP_IPV4 617 static const struct snmp_tree_node mib2_root = SNMP_CREATE_TREE_NODE(1, mib2_nodes);
619 static const u32_t mib2_base_oid_arr[] = { 1,3,6,1,2,1 };
620 const struct snmp_mib mib2 = SNMP_MIB_CREATE(mib2_base_oid_arr, &mib2_root.node);
624 static const u8_t* sysdescr = sysdescr_default;
629 static const u8_t* syscontact = syscontact_default;
630 static const u16_t* syscontact_len =
NULL;
633 static u16_t syscontact_bufsize = 0;
637 static const u8_t* sysname = sysname_default;
641 static u16_t sysname_bufsize = 0;
645 static const u8_t* syslocation = syslocation_default;
646 static const u16_t* syslocation_len =
NULL;
649 static u16_t syslocation_bufsize = 0;
657 void snmp_mib2_set_sysdescr(
const u8_t *str,
const u16_t *len)
678 void snmp_mib2_set_syscontact(
u8_t *ocstr,
u16_t *ocstrlen,
u16_t bufsize)
682 syscontact_wr = ocstr;
683 syscontact_len = ocstrlen;
684 syscontact_wr_len = ocstrlen;
685 syscontact_bufsize = bufsize;
689 void snmp_mib2_set_syscontact_readonly(
const u8_t *ocstr,
const u16_t *ocstrlen)
693 syscontact_len = ocstrlen;
694 syscontact_wr =
NULL;
695 syscontact_wr_len =
NULL;
696 syscontact_bufsize = 0;
714 void snmp_mib2_set_sysname(
u8_t *ocstr,
u16_t *ocstrlen,
u16_t bufsize)
719 sysname_len = ocstrlen;
720 sysname_wr_len = ocstrlen;
721 sysname_bufsize = bufsize;
725 void snmp_mib2_set_sysname_readonly(
const u8_t *ocstr,
const u16_t *ocstrlen)
729 sysname_len = ocstrlen;
731 sysname_wr_len =
NULL;
749 void snmp_mib2_set_syslocation(
u8_t *ocstr,
u16_t *ocstrlen,
u16_t bufsize)
753 syslocation_wr = ocstr;
754 syslocation_len = ocstrlen;
755 syslocation_wr_len = ocstrlen;
756 syslocation_bufsize = bufsize;
760 void snmp_mib2_set_syslocation_readonly(
const u8_t *ocstr,
const u16_t *ocstrlen)
764 syslocation_len = ocstrlen;
765 syslocation_wr =
NULL;
766 syslocation_wr_len =
NULL;
767 syslocation_bufsize = 0;
775 system_get_value(
const struct snmp_scalar_array_node_def *node,
void *value)
778 const u16_t* var_len;
784 var_len = sysdescr_len;
788 const struct snmp_obj_id* dev_enterprise_oid = snmp_get_device_enterprise_oid();
789 MEMCPY(value, dev_enterprise_oid->id, dev_enterprise_oid->len *
sizeof(
u32_t));
790 return dev_enterprise_oid->len *
sizeof(
u32_t);
794 return sizeof(
u32_t);
797 var_len = syscontact_len;
801 var_len = sysname_len;
805 var_len = syslocation_len;
808 *(
s32_t*)value = SNMP_SYSSERVICES;
809 return sizeof(
s32_t);
817 if (var_len ==
NULL) {
818 result = (
u16_t)strlen((
const char*)var);
822 MEMCPY(value, var, result);
827 system_set_test(
const struct snmp_scalar_array_node_def *node,
u16_t len,
void *value)
829 snmp_err_t ret = SNMP_ERR_WRONGVALUE;
831 const u16_t* var_wr_len;
837 var_bufsize = &syscontact_bufsize;
838 var_wr_len = syscontact_wr_len;
841 var_bufsize = &sysname_bufsize;
842 var_wr_len = sysname_wr_len;
845 var_bufsize = &syslocation_bufsize;
846 var_wr_len = syslocation_wr_len;
854 if (*var_bufsize > 0) {
855 if (var_wr_len ==
NULL) {
857 if (len < *var_bufsize) {
858 ret = SNMP_ERR_NOERROR;
861 if (len <= *var_bufsize) {
862 ret = SNMP_ERR_NOERROR;
866 ret = SNMP_ERR_NOTWRITABLE;
873 system_set_value(
const struct snmp_scalar_array_node_def *node,
u16_t len,
void *value)
880 var_wr = syscontact_wr;
881 var_wr_len = syscontact_wr_len;
885 var_wr_len = sysname_wr_len;
888 var_wr = syslocation_wr;
889 var_wr_len = syslocation_wr_len;
893 return SNMP_ERR_GENERROR;
898 MEMCPY(var_wr, value, len);
900 if (var_wr_len ==
NULL) {
907 return SNMP_ERR_NOERROR;
913 interfaces_get_value(
struct snmp_node_instance* instance,
void* value)
915 if (instance->node->oid == 1) {
917 s32_t num_netifs = 0;
920 while (netif !=
NULL) {
925 *sint_ptr = num_netifs;
926 return sizeof(*sint_ptr);
933 static const struct snmp_oid_range interfaces_Table_oid_ranges[] = {
937 static const u8_t iftable_ifOutQLen = 0;
939 static const u8_t iftable_ifOperStatus_up = 1;
940 static const u8_t iftable_ifOperStatus_down = 2;
942 static const u8_t iftable_ifAdminStatus_up = 1;
943 static const u8_t iftable_ifAdminStatus_lowerLayerDown = 7;
944 static const u8_t iftable_ifAdminStatus_down = 2;
946 static snmp_err_t interfaces_Table_get_cell_instance(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
struct snmp_node_instance* cell_instance)
954 if(!snmp_oid_in_range(row_oid, row_oid_len, interfaces_Table_oid_ranges,
LWIP_ARRAYSIZE(interfaces_Table_oid_ranges))) {
955 return SNMP_ERR_NOSUCHINSTANCE;
959 ifIndex = row_oid[0];
963 while (netif !=
NULL) {
964 if(netif_to_num(netif) == ifIndex) {
966 cell_instance->reference.ptr = netif;
967 return SNMP_ERR_NOERROR;
973 return SNMP_ERR_NOSUCHINSTANCE;
976 static snmp_err_t interfaces_Table_get_next_cell_instance(
const u32_t* column,
struct snmp_obj_id* row_oid,
struct snmp_node_instance* cell_instance)
979 struct snmp_next_oid_state state;
985 snmp_next_oid_init(&state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(interfaces_Table_oid_ranges));
989 while (netif !=
NULL) {
991 test_oid[0] = netif_to_num(netif);
994 snmp_next_oid_check(&state, test_oid,
LWIP_ARRAYSIZE(interfaces_Table_oid_ranges), netif);
1000 if(state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
1001 snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
1003 cell_instance->reference.ptr = state.reference;
1004 return SNMP_ERR_NOERROR;
1008 return SNMP_ERR_NOSUCHINSTANCE;
1011 static u16_t interfaces_Table_get_value(
struct snmp_node_instance* instance,
void* value)
1013 struct netif *netif = (
struct netif*)instance->reference.ptr;
1018 switch (SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id))
1021 *value_s32 = netif_to_num(netif);
1022 value_len =
sizeof(*value_s32);
1025 value_len =
sizeof(netif->
name);
1029 *value_s32 = netif->link_type;
1030 value_len =
sizeof(*value_s32);
1033 *value_s32 = netif->
mtu;
1034 value_len =
sizeof(*value_s32);
1037 *value_u32 = netif->link_speed;
1038 value_len =
sizeof(*value_u32);
1041 value_len =
sizeof(netif->
hwaddr);
1046 *value_s32 = iftable_ifOperStatus_up;
1048 *value_s32 = iftable_ifOperStatus_down;
1050 value_len =
sizeof(*value_s32);
1055 *value_s32 = iftable_ifAdminStatus_up;
1057 *value_s32 = iftable_ifAdminStatus_lowerLayerDown;
1060 *value_s32 = iftable_ifAdminStatus_down;
1062 value_len =
sizeof(*value_s32);
1065 *value_u32 = netif->ts;
1066 value_len =
sizeof(*value_u32);
1069 *value_u32 = netif->mib2_counters.ifinoctets;
1070 value_len =
sizeof(*value_u32);
1073 *value_u32 = netif->mib2_counters.ifinucastpkts;
1074 value_len =
sizeof(*value_u32);
1077 *value_u32 = netif->mib2_counters.ifinnucastpkts;
1078 value_len =
sizeof(*value_u32);
1081 *value_u32 = netif->mib2_counters.ifindiscards;
1082 value_len =
sizeof(*value_u32);
1085 *value_u32 = netif->mib2_counters.ifinerrors;
1086 value_len =
sizeof(*value_u32);
1089 *value_u32 = netif->mib2_counters.ifinunknownprotos;
1090 value_len =
sizeof(*value_u32);
1093 *value_u32 = netif->mib2_counters.ifoutoctets;
1094 value_len =
sizeof(*value_u32);
1097 *value_u32 = netif->mib2_counters.ifoutucastpkts;
1098 value_len =
sizeof(*value_u32);
1101 *value_u32 = netif->mib2_counters.ifoutnucastpkts;
1102 value_len =
sizeof(*value_u32);
1105 *value_u32 = netif->mib2_counters.ifoutdiscards;
1106 value_len =
sizeof(*value_u32);
1109 *value_u32 = netif->mib2_counters.ifouterrors;
1110 value_len =
sizeof(*value_u32);
1113 *value_u32 = iftable_ifOutQLen;
1114 value_len =
sizeof(*value_u32);
1118 value_len = snmp_zero_dot_zero.len *
sizeof(
u32_t);
1119 MEMCPY(value, snmp_zero_dot_zero.id, value_len);
1128 #if !SNMP_SAFE_REQUESTS 1130 static snmp_err_t interfaces_Table_set_test(
struct snmp_node_instance* instance,
u16_t len,
void *value)
1136 LWIP_ASSERT(
"Invalid column", (SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id) == 7));
1139 if (*sint_ptr == 1 || *sint_ptr == 2)
1141 return SNMP_ERR_NOERROR;
1144 return SNMP_ERR_WRONGVALUE;
1147 static snmp_err_t interfaces_Table_set_value(
struct snmp_node_instance* instance,
u16_t len,
void *value)
1149 struct netif *netif = (
struct netif*)instance->reference.ptr;
1154 LWIP_ASSERT(
"Invalid column", (SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id) == 7));
1157 if (*sint_ptr == 1) {
1159 }
else if (*sint_ptr == 2) {
1163 return SNMP_ERR_NOERROR;
1172 ip_get_value(
struct snmp_node_instance* instance,
void* value)
1177 switch (instance->node->oid) {
1186 return sizeof(*sint_ptr);
1189 return sizeof(*sint_ptr);
1191 *uint_ptr = STATS_GET(mib2.ipinreceives);
1192 return sizeof(*uint_ptr);
1194 *uint_ptr = STATS_GET(mib2.ipinhdrerrors);
1195 return sizeof(*uint_ptr);
1197 *uint_ptr = STATS_GET(mib2.ipinaddrerrors);
1198 return sizeof(*uint_ptr);
1200 *uint_ptr = STATS_GET(mib2.ipforwdatagrams);
1201 return sizeof(*uint_ptr);
1203 *uint_ptr = STATS_GET(mib2.ipinunknownprotos);
1204 return sizeof(*uint_ptr);
1206 *uint_ptr = STATS_GET(mib2.ipindiscards);
1207 return sizeof(*uint_ptr);
1209 *uint_ptr = STATS_GET(mib2.ipindelivers);
1210 return sizeof(*uint_ptr);
1212 *uint_ptr = STATS_GET(mib2.ipoutrequests);
1213 return sizeof(*uint_ptr);
1215 *uint_ptr = STATS_GET(mib2.ipoutdiscards);
1216 return sizeof(*uint_ptr);
1218 *uint_ptr = STATS_GET(mib2.ipoutnoroutes);
1219 return sizeof(*uint_ptr);
1226 return sizeof(*sint_ptr);
1228 *uint_ptr = STATS_GET(mib2.ipreasmreqds);
1229 return sizeof(*uint_ptr);
1231 *uint_ptr = STATS_GET(mib2.ipreasmoks);
1232 return sizeof(*uint_ptr);
1234 *uint_ptr = STATS_GET(mib2.ipreasmfails);
1235 return sizeof(*uint_ptr);
1237 *uint_ptr = STATS_GET(mib2.ipfragoks);
1238 return sizeof(*uint_ptr);
1240 *uint_ptr = STATS_GET(mib2.ipfragfails);
1241 return sizeof(*uint_ptr);
1243 *uint_ptr = STATS_GET(mib2.ipfragcreates);
1244 return sizeof(*uint_ptr);
1247 return sizeof(*uint_ptr);
1267 ip_set_test(
struct snmp_node_instance* instance,
u16_t len,
void *value)
1269 snmp_err_t ret = SNMP_ERR_WRONGVALUE;
1273 switch (instance->node->oid) {
1283 ret = SNMP_ERR_NOERROR;
1288 ret = SNMP_ERR_NOERROR;
1300 ip_set_value(
struct snmp_node_instance* instance,
u16_t len,
void *value)
1306 return SNMP_ERR_NOERROR;
1312 static const struct snmp_oid_range ip_AddrTable_oid_ranges[] = {
1320 ip_AddrTable_get_cell_value_core(
struct netif *netif,
const u32_t* column,
union snmp_variant_value* value,
u32_t* value_len)
1326 value->u32 = netif_ip4_addr(netif)->addr;
1329 value->u32 = netif_to_num(netif);
1332 value->u32 = netif_ip4_netmask(netif)->addr;
1337 value->u32 = IPADDR_BROADCAST & 1;
1354 return SNMP_ERR_NOSUCHINSTANCE;
1357 return SNMP_ERR_NOERROR;
1361 ip_AddrTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len)
1364 struct netif *netif;
1367 if(!snmp_oid_in_range(row_oid, row_oid_len, ip_AddrTable_oid_ranges,
LWIP_ARRAYSIZE(ip_AddrTable_oid_ranges))) {
1368 return SNMP_ERR_NOSUCHINSTANCE;
1372 snmp_oid_to_ip4(&row_oid[0], &ip);
1376 while (netif !=
NULL) {
1377 if(ip4_addr_cmp(&ip, netif_ip4_addr(netif))) {
1379 return ip_AddrTable_get_cell_value_core(netif, column, value, value_len);
1382 netif = netif->
next;
1386 return SNMP_ERR_NOSUCHINSTANCE;
1390 ip_AddrTable_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)
1392 struct netif *netif;
1393 struct snmp_next_oid_state state;
1397 snmp_next_oid_init(&state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(ip_AddrTable_oid_ranges));
1401 while (netif !=
NULL) {
1403 snmp_ip4_to_oid(netif_ip4_addr(netif), &test_oid[0]);
1406 snmp_next_oid_check(&state, test_oid,
LWIP_ARRAYSIZE(ip_AddrTable_oid_ranges), netif);
1408 netif = netif->
next;
1412 if(state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
1413 snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
1415 return ip_AddrTable_get_cell_value_core((
struct netif*)state.reference, column, value, value_len);
1419 return SNMP_ERR_NOSUCHINSTANCE;
1425 static const struct snmp_oid_range ip_RouteTable_oid_ranges[] = {
1433 ip_RouteTable_get_cell_value_core(
struct netif *netif,
u8_t default_route,
const u32_t* column,
union snmp_variant_value* value,
u32_t* value_len)
1437 if (default_route) {
1439 value->u32 = IP4_ADDR_ANY->addr;
1443 ip4_addr_get_network(&tmp, netif_ip4_addr(netif), netif_ip4_netmask(netif));
1444 value->u32 = tmp.addr;
1448 value->u32 = netif_to_num(netif);
1451 if (default_route) {
1463 if (default_route) {
1465 value->u32 = netif_ip4_gw(netif)->addr;
1468 value->u32 = netif_ip4_addr(netif)->addr;
1472 if (default_route) {
1489 if (default_route) {
1491 value->u32 = IP4_ADDR_ANY->addr;
1494 value->u32 = netif_ip4_netmask(netif)->addr;
1501 value->const_ptr = snmp_zero_dot_zero.id;
1502 *value_len = snmp_zero_dot_zero.len *
sizeof(
u32_t);
1505 return SNMP_ERR_NOSUCHINSTANCE;
1508 return SNMP_ERR_NOERROR;
1512 ip_RouteTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len)
1515 struct netif *netif;
1518 if(!snmp_oid_in_range(row_oid, row_oid_len, ip_RouteTable_oid_ranges,
LWIP_ARRAYSIZE(ip_RouteTable_oid_ranges))) {
1519 return SNMP_ERR_NOSUCHINSTANCE;
1523 snmp_oid_to_ip4(&row_oid[0], &test_ip);
1528 return ip_RouteTable_get_cell_value_core(
netif_default, 1, column, value, value_len);
1533 while (netif !=
NULL) {
1535 ip4_addr_get_network(&dst, netif_ip4_addr(netif), netif_ip4_netmask(netif));
1537 if(ip4_addr_cmp(&dst, &test_ip)) {
1539 return ip_RouteTable_get_cell_value_core(netif, 0, column, value, value_len);
1542 netif = netif->
next;
1546 return SNMP_ERR_NOSUCHINSTANCE;
1550 ip_RouteTable_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)
1552 struct netif *netif;
1553 struct snmp_next_oid_state state;
1558 snmp_next_oid_init(&state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(ip_RouteTable_oid_ranges));
1562 snmp_ip4_to_oid(IP4_ADDR_ANY, &test_oid[0]);
1568 while (netif !=
NULL) {
1570 ip4_addr_get_network(&dst, netif_ip4_addr(netif), netif_ip4_netmask(netif));
1573 if (!ip4_addr_isany_val(dst)) {
1574 snmp_ip4_to_oid(&dst, &test_oid[0]);
1575 snmp_next_oid_check(&state, test_oid,
LWIP_ARRAYSIZE(ip_RouteTable_oid_ranges), netif);
1578 netif = netif->
next;
1582 if(state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
1584 snmp_oid_to_ip4(&result_temp[0], &dst);
1585 snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
1587 return ip_RouteTable_get_cell_value_core((
struct netif*)state.reference, ip4_addr_isany_val(dst), column, value, value_len);
1590 return SNMP_ERR_NOSUCHINSTANCE;
1597 static const struct snmp_oid_range ip_NetToMediaTable_oid_ranges[] = {
1606 ip_NetToMediaTable_get_cell_value_core(
u8_t arp_table_index,
const u32_t* column,
union snmp_variant_value* value,
u32_t* value_len)
1609 struct netif *netif;
1610 struct eth_addr *ethaddr;
1612 etharp_get_entry(arp_table_index, &ip, &netif, ðaddr);
1617 value->u32 = netif_to_num(netif);
1620 value->ptr = ethaddr;
1621 *value_len =
sizeof(*ethaddr);
1624 value->u32 = ip->addr;
1630 return SNMP_ERR_NOSUCHINSTANCE;
1633 return SNMP_ERR_NOERROR;
1637 ip_NetToMediaTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len)
1644 if(!snmp_oid_in_range(row_oid, row_oid_len, ip_NetToMediaTable_oid_ranges,
LWIP_ARRAYSIZE(ip_NetToMediaTable_oid_ranges))) {
1645 return SNMP_ERR_NOSUCHINSTANCE;
1649 netif_index = (
u8_t)row_oid[0];
1650 snmp_oid_to_ip4(&row_oid[1], &ip_in);
1655 struct netif *netif;
1656 struct eth_addr *ethaddr;
1658 if(etharp_get_entry(i, &ip, &netif, ðaddr)) {
1659 if((netif_index == netif_to_num(netif)) && ip4_addr_cmp(&ip_in, ip)) {
1661 return ip_NetToMediaTable_get_cell_value_core(i, column, value, value_len);
1667 return SNMP_ERR_NOSUCHINSTANCE;
1671 ip_NetToMediaTable_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)
1674 struct snmp_next_oid_state state;
1678 snmp_next_oid_init(&state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(ip_NetToMediaTable_oid_ranges));
1683 struct netif *netif;
1684 struct eth_addr *ethaddr;
1686 if(etharp_get_entry(i, &ip, &netif, ðaddr)) {
1689 test_oid[0] = netif_to_num(netif);
1690 snmp_ip4_to_oid(ip, &test_oid[1]);
1693 snmp_next_oid_check(&state, test_oid,
LWIP_ARRAYSIZE(ip_NetToMediaTable_oid_ranges), (
void*)(
size_t)i);
1698 if(state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
1699 snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
1701 return ip_NetToMediaTable_get_cell_value_core((
u8_t)(
size_t)state.reference, column, value, value_len);
1705 return SNMP_ERR_NOSUCHINSTANCE;
1714 icmp_get_value(
const struct snmp_scalar_array_node_def *node,
void *value)
1718 switch (node->oid) {
1720 *uint_ptr = STATS_GET(mib2.icmpinmsgs);
1721 return sizeof(*uint_ptr);
1723 *uint_ptr = STATS_GET(mib2.icmpinerrors);
1724 return sizeof(*uint_ptr);
1726 *uint_ptr = STATS_GET(mib2.icmpindestunreachs);
1727 return sizeof(*uint_ptr);
1729 *uint_ptr = STATS_GET(mib2.icmpintimeexcds);
1730 return sizeof(*uint_ptr);
1732 *uint_ptr = STATS_GET(mib2.icmpinparmprobs);
1733 return sizeof(*uint_ptr);
1735 *uint_ptr = STATS_GET(mib2.icmpinsrcquenchs);
1736 return sizeof(*uint_ptr);
1738 *uint_ptr = STATS_GET(mib2.icmpinredirects);
1739 return sizeof(*uint_ptr);
1741 *uint_ptr = STATS_GET(mib2.icmpinechos);
1742 return sizeof(*uint_ptr);
1744 *uint_ptr = STATS_GET(mib2.icmpinechoreps);
1745 return sizeof(*uint_ptr);
1747 *uint_ptr = STATS_GET(mib2.icmpintimestamps);
1748 return sizeof(*uint_ptr);
1750 *uint_ptr = STATS_GET(mib2.icmpintimestampreps);
1751 return sizeof(*uint_ptr);
1753 *uint_ptr = STATS_GET(mib2.icmpinaddrmasks);
1754 return sizeof(*uint_ptr);
1756 *uint_ptr = STATS_GET(mib2.icmpinaddrmaskreps);
1757 return sizeof(*uint_ptr);
1759 *uint_ptr = STATS_GET(mib2.icmpoutmsgs);
1760 return sizeof(*uint_ptr);
1762 *uint_ptr = STATS_GET(mib2.icmpouterrors);
1763 return sizeof(*uint_ptr);
1765 *uint_ptr = STATS_GET(mib2.icmpoutdestunreachs);
1766 return sizeof(*uint_ptr);
1768 *uint_ptr = STATS_GET(mib2.icmpouttimeexcds);
1769 return sizeof(*uint_ptr);
1772 return sizeof(*uint_ptr);
1775 return sizeof(*uint_ptr);
1778 return sizeof(*uint_ptr);
1780 *uint_ptr = STATS_GET(mib2.icmpoutechos);
1781 return sizeof(*uint_ptr);
1783 *uint_ptr = STATS_GET(mib2.icmpoutechoreps);
1784 return sizeof(*uint_ptr);
1787 return sizeof(*uint_ptr);
1790 return sizeof(*uint_ptr);
1793 return sizeof(*uint_ptr);
1796 return sizeof(*uint_ptr);
1812 tcp_get_value(
struct snmp_node_instance* instance,
void* value)
1817 switch (instance->node->oid) {
1820 return sizeof(*sint_ptr);
1825 return sizeof(*sint_ptr);
1830 return sizeof(*sint_ptr);
1833 return sizeof(*sint_ptr);
1835 *uint_ptr = STATS_GET(mib2.tcpactiveopens);
1836 return sizeof(*uint_ptr);
1838 *uint_ptr = STATS_GET(mib2.tcppassiveopens);
1839 return sizeof(*uint_ptr);
1841 *uint_ptr = STATS_GET(mib2.tcpattemptfails);
1842 return sizeof(*uint_ptr);
1844 *uint_ptr = STATS_GET(mib2.tcpestabresets);
1845 return sizeof(*uint_ptr);
1848 u16_t tcpcurrestab = 0;
1849 struct tcp_pcb *pcb = tcp_active_pcbs;
1850 while (pcb !=
NULL) {
1851 if ((pcb->state == ESTABLISHED) ||
1852 (pcb->state == CLOSE_WAIT)) {
1857 *uint_ptr = tcpcurrestab;
1859 return sizeof(*uint_ptr);
1861 *uint_ptr = STATS_GET(mib2.tcpinsegs);
1862 return sizeof(*uint_ptr);
1864 *uint_ptr = STATS_GET(mib2.tcpoutsegs);
1865 return sizeof(*uint_ptr);
1867 *uint_ptr = STATS_GET(mib2.tcpretranssegs);
1868 return sizeof(*uint_ptr);
1870 *uint_ptr = STATS_GET(mib2.tcpinerrs);
1871 return sizeof(*uint_ptr);
1873 *uint_ptr = STATS_GET(mib2.tcpoutrsts);
1874 return sizeof(*uint_ptr);
1876 memset(value, 0, 2*
sizeof(
u32_t));
1877 return 2*
sizeof(
u32_t);
1879 memset(value, 0, 2*
sizeof(
u32_t));
1880 return 2*
sizeof(
u32_t);
1894 static const struct snmp_oid_range tcp_ConnTable_oid_ranges[] = {
1908 tcp_ConnTable_get_cell_value_core(
struct tcp_pcb *pcb,
const u32_t* column,
union snmp_variant_value* value,
u32_t* value_len)
1915 value->u32 = pcb->state + 1;
1918 value->u32 = ip_2_ip4(&pcb->local_ip)->addr;
1921 value->u32 = pcb->local_port;
1924 if(pcb->state == LISTEN) {
1925 value->u32 = IP4_ADDR_ANY->addr;
1927 value->u32 = ip_2_ip4(&pcb->remote_ip)->addr;
1931 if(pcb->state == LISTEN) {
1934 value->u32 = pcb->remote_port;
1939 return SNMP_ERR_NOSUCHINSTANCE;
1942 return SNMP_ERR_NOERROR;
1946 tcp_ConnTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len)
1949 ip4_addr_t local_ip;
1950 ip4_addr_t remote_ip;
1953 struct tcp_pcb *pcb;
1956 if(!snmp_oid_in_range(row_oid, row_oid_len, tcp_ConnTable_oid_ranges,
LWIP_ARRAYSIZE(tcp_ConnTable_oid_ranges))) {
1957 return SNMP_ERR_NOSUCHINSTANCE;
1961 snmp_oid_to_ip4(&row_oid[0], &local_ip);
1962 local_port = (
u16_t)row_oid[4];
1963 snmp_oid_to_ip4(&row_oid[5], &remote_ip);
1964 remote_port = (
u16_t)row_oid[9];
1968 pcb = *tcp_pcb_lists[i];
1970 while (pcb !=
NULL) {
1973 ip4_addr_cmp(&local_ip, ip_2_ip4(&pcb->local_ip)) && (local_port == pcb->local_port)) {
1976 if(pcb->state == LISTEN) {
1977 if(ip4_addr_cmp(&remote_ip, IP4_ADDR_ANY) && (remote_port == 0)) {
1979 return tcp_ConnTable_get_cell_value_core(pcb, column, value, value_len);
1983 ip4_addr_cmp(&remote_ip, ip_2_ip4(&pcb->remote_ip)) && (remote_port == pcb->remote_port)) {
1985 return tcp_ConnTable_get_cell_value_core(pcb, column, value, value_len);
1995 return SNMP_ERR_NOSUCHINSTANCE;
1999 tcp_ConnTable_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)
2002 struct tcp_pcb *pcb;
2003 struct snmp_next_oid_state state;
2007 snmp_next_oid_init(&state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(tcp_ConnTable_oid_ranges));
2011 pcb = *tcp_pcb_lists[i];
2012 while (pcb !=
NULL) {
2016 snmp_ip4_to_oid(ip_2_ip4(&pcb->local_ip), &test_oid[0]);
2017 test_oid[4] = pcb->local_port;
2020 if(pcb->state == LISTEN) {
2021 snmp_ip4_to_oid(IP4_ADDR_ANY, &test_oid[5]);
2027 snmp_ip4_to_oid(ip_2_ip4(&pcb->remote_ip), &test_oid[5]);
2028 test_oid[9] = pcb->remote_port;
2032 snmp_next_oid_check(&state, test_oid,
LWIP_ARRAYSIZE(tcp_ConnTable_oid_ranges), pcb);
2040 if(state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
2041 snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
2043 return tcp_ConnTable_get_cell_value_core((
struct tcp_pcb*)state.reference, column, value, value_len);
2047 return SNMP_ERR_NOSUCHINSTANCE;
2055 tcp_ConnectionTable_get_cell_value_core(
const u32_t* column,
struct tcp_pcb *pcb,
union snmp_variant_value* value)
2060 value->u32 = pcb->state + 1;
2066 return SNMP_ERR_NOSUCHINSTANCE;
2069 return SNMP_ERR_NOERROR;
2073 tcp_ConnectionTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len)
2076 u16_t local_port, remote_port;
2077 struct tcp_pcb *pcb;
2080 struct tcp_pcb **
const tcp_pcb_nonlisten_lists[] = {&tcp_bound_pcbs, &tcp_active_pcbs, &tcp_tw_pcbs};
2085 idx += snmp_oid_to_ip_port(&row_oid[idx], row_oid_len-idx, &local_ip, &local_port);
2087 return SNMP_ERR_NOSUCHINSTANCE;
2091 idx += snmp_oid_to_ip_port(&row_oid[idx], row_oid_len-idx, &remote_ip, &remote_port);
2093 return SNMP_ERR_NOSUCHINSTANCE;
2098 pcb = *tcp_pcb_nonlisten_lists[i];
2100 while (pcb !=
NULL) {
2102 (local_port == pcb->local_port) &&
2104 (remote_port == pcb->remote_port)) {
2106 return tcp_ConnectionTable_get_cell_value_core(column, pcb, value);
2113 return SNMP_ERR_NOSUCHINSTANCE;
2117 tcp_ConnectionTable_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)
2119 struct tcp_pcb *pcb;
2120 struct snmp_next_oid_state state;
2123 u32_t result_temp[36];
2125 struct tcp_pcb **
const tcp_pcb_nonlisten_lists[] = {&tcp_bound_pcbs, &tcp_active_pcbs, &tcp_tw_pcbs};
2130 snmp_next_oid_init(&state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(result_temp));
2134 pcb = *tcp_pcb_nonlisten_lists[i];
2136 while (pcb !=
NULL) {
2141 idx += snmp_ip_port_to_oid(&pcb->local_ip, pcb->local_port, &test_oid[idx]);
2144 idx += snmp_ip_port_to_oid(&pcb->remote_ip, pcb->remote_port, &test_oid[idx]);
2147 snmp_next_oid_check(&state, test_oid, idx, pcb);
2154 if(state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
2155 snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
2157 return tcp_ConnectionTable_get_cell_value_core(column, (
struct tcp_pcb*)state.reference, value);
2160 return SNMP_ERR_NOSUCHINSTANCE;
2167 tcp_ListenerTable_get_cell_value_core(
const u32_t* column,
union snmp_variant_value* value)
2175 return SNMP_ERR_NOSUCHINSTANCE;
2178 return SNMP_ERR_NOERROR;
2182 tcp_ListenerTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len)
2186 struct tcp_pcb_listen *pcb;
2192 idx += snmp_oid_to_ip_port(&row_oid[idx], row_oid_len-idx, &local_ip, &local_port);
2194 return SNMP_ERR_NOSUCHINSTANCE;
2198 pcb = tcp_listen_pcbs.listen_pcbs;
2199 while (pcb !=
NULL) {
2201 (local_port == pcb->local_port)) {
2203 return tcp_ListenerTable_get_cell_value_core(column, value);
2209 return SNMP_ERR_NOSUCHINSTANCE;
2213 tcp_ListenerTable_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)
2215 struct tcp_pcb_listen *pcb;
2216 struct snmp_next_oid_state state;
2218 u32_t result_temp[18];
2223 snmp_next_oid_init(&state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(result_temp));
2226 pcb = tcp_listen_pcbs.listen_pcbs;
2227 while (pcb !=
NULL) {
2232 idx += snmp_ip_port_to_oid(&pcb->local_ip, pcb->local_port, &test_oid[idx]);
2235 snmp_next_oid_check(&state, test_oid, idx,
NULL);
2241 if(state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
2242 snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
2244 return tcp_ListenerTable_get_cell_value_core(column, value);
2247 return SNMP_ERR_NOSUCHINSTANCE;
2258 udp_get_value(
struct snmp_node_instance* instance,
void* value)
2262 switch (instance->node->oid) {
2264 *uint_ptr = STATS_GET(mib2.udpindatagrams);
2265 return sizeof(*uint_ptr);
2267 *uint_ptr = STATS_GET(mib2.udpnoports);
2268 return sizeof(*uint_ptr);
2270 *uint_ptr = STATS_GET(mib2.udpinerrors);
2271 return sizeof(*uint_ptr);
2273 *uint_ptr = STATS_GET(mib2.udpoutdatagrams);
2274 return sizeof(*uint_ptr);
2276 memset(value, 0, 2*
sizeof(
u32_t));
2277 return 2*
sizeof(
u32_t);
2279 memset(value, 0, 2*
sizeof(
u32_t));
2280 return 2*
sizeof(
u32_t);
2292 udp_endpointTable_get_cell_value_core(
const u32_t* column,
union snmp_variant_value* value)
2300 return SNMP_ERR_NOSUCHINSTANCE;
2303 return SNMP_ERR_NOERROR;
2307 udp_endpointTable_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len)
2310 u16_t local_port, remote_port;
2311 struct udp_pcb *pcb;
2317 idx += snmp_oid_to_ip_port(&row_oid[idx], row_oid_len-idx, &local_ip, &local_port);
2319 return SNMP_ERR_NOSUCHINSTANCE;
2323 idx += snmp_oid_to_ip_port(&row_oid[idx], row_oid_len-idx, &remote_ip, &remote_port);
2325 return SNMP_ERR_NOSUCHINSTANCE;
2329 if(row_oid_len < (idx+1)) {
2330 return SNMP_ERR_NOSUCHINSTANCE;
2332 if(row_oid[idx] != 0) {
2333 return SNMP_ERR_NOSUCHINSTANCE;
2338 while (pcb !=
NULL) {
2340 (local_port == pcb->local_port) &&
2342 (remote_port == pcb->remote_port)) {
2344 return udp_endpointTable_get_cell_value_core(column, value);
2350 return SNMP_ERR_NOSUCHINSTANCE;
2354 udp_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)
2356 struct udp_pcb *pcb;
2357 struct snmp_next_oid_state state;
2362 u32_t result_temp[37];
2367 snmp_next_oid_init(&state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(result_temp));
2371 while (pcb !=
NULL) {
2376 idx += snmp_ip_port_to_oid(&pcb->local_ip, pcb->local_port, &test_oid[idx]);
2379 idx += snmp_ip_port_to_oid(&pcb->remote_ip, pcb->remote_port, &test_oid[idx]);
2385 snmp_next_oid_check(&state, test_oid, idx,
NULL);
2391 if(state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
2392 snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
2394 return udp_endpointTable_get_cell_value_core(column, value);
2397 return SNMP_ERR_NOSUCHINSTANCE;
2405 #if LWIP_UDP && LWIP_IPV4 2408 static const struct snmp_oid_range udp_Table_oid_ranges[] = {
2417 udp_Table_get_cell_value_core(
struct udp_pcb *pcb,
const u32_t* column,
union snmp_variant_value* value,
u32_t* value_len)
2424 value->u32 = ip_2_ip4(&pcb->local_ip)->addr;
2428 value->u32 = pcb->local_port;
2431 return SNMP_ERR_NOSUCHINSTANCE;
2434 return SNMP_ERR_NOERROR;
2438 udp_Table_get_cell_value(
const u32_t* column,
const u32_t* row_oid,
u8_t row_oid_len,
union snmp_variant_value* value,
u32_t* value_len)
2442 struct udp_pcb *pcb;
2445 if(!snmp_oid_in_range(row_oid, row_oid_len, udp_Table_oid_ranges,
LWIP_ARRAYSIZE(udp_Table_oid_ranges))) {
2446 return SNMP_ERR_NOSUCHINSTANCE;
2450 snmp_oid_to_ip4(&row_oid[0], &ip);
2451 port = (
u16_t)row_oid[4];
2455 while (pcb !=
NULL) {
2457 if(ip4_addr_cmp(&ip, ip_2_ip4(&pcb->local_ip)) && (port == pcb->local_port)) {
2459 return udp_Table_get_cell_value_core(pcb, column, value, value_len);
2466 return SNMP_ERR_NOSUCHINSTANCE;
2470 udp_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)
2472 struct udp_pcb *pcb;
2473 struct snmp_next_oid_state state;
2477 snmp_next_oid_init(&state, row_oid->id, row_oid->len, result_temp,
LWIP_ARRAYSIZE(udp_Table_oid_ranges));
2481 while (pcb !=
NULL) {
2485 snmp_ip4_to_oid(ip_2_ip4(&pcb->local_ip), &test_oid[0]);
2486 test_oid[4] = pcb->local_port;
2489 snmp_next_oid_check(&state, test_oid,
LWIP_ARRAYSIZE(udp_Table_oid_ranges), pcb);
2496 if(state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {
2497 snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
2499 return udp_Table_get_cell_value_core((
struct udp_pcb*)state.reference, column, value, value_len);
2502 return SNMP_ERR_NOSUCHINSTANCE;
2511 snmp_get_value(
const struct snmp_scalar_array_node_def *node,
void *value)
2514 switch (node->oid) {
2516 *uint_ptr = snmp_stats.inpkts;
2519 *uint_ptr = snmp_stats.outpkts;
2522 *uint_ptr = snmp_stats.inbadversions;
2525 *uint_ptr = snmp_stats.inbadcommunitynames;
2528 *uint_ptr = snmp_stats.inbadcommunityuses;
2531 *uint_ptr = snmp_stats.inasnparseerrs;
2534 *uint_ptr = snmp_stats.intoobigs;
2537 *uint_ptr = snmp_stats.innosuchnames;
2540 *uint_ptr = snmp_stats.inbadvalues;
2543 *uint_ptr = snmp_stats.inreadonlys;
2546 *uint_ptr = snmp_stats.ingenerrs;
2549 *uint_ptr = snmp_stats.intotalreqvars;
2552 *uint_ptr = snmp_stats.intotalsetvars;
2555 *uint_ptr = snmp_stats.ingetrequests;
2558 *uint_ptr = snmp_stats.ingetnexts;
2561 *uint_ptr = snmp_stats.insetrequests;
2564 *uint_ptr = snmp_stats.ingetresponses;
2567 *uint_ptr = snmp_stats.intraps;
2570 *uint_ptr = snmp_stats.outtoobigs;
2573 *uint_ptr = snmp_stats.outnosuchnames;
2576 *uint_ptr = snmp_stats.outbadvalues;
2579 *uint_ptr = snmp_stats.outgenerrs;
2582 *uint_ptr = snmp_stats.outgetrequests;
2585 *uint_ptr = snmp_stats.outgetnexts;
2588 *uint_ptr = snmp_stats.outsetrequests;
2591 *uint_ptr = snmp_stats.outgetresponses;
2594 *uint_ptr = snmp_stats.outtraps;
2597 if (snmp_get_auth_traps_enabled() == SNMP_AUTH_TRAPS_DISABLED) {
2598 *uint_ptr = MIB2_AUTH_TRAPS_DISABLED;
2600 *uint_ptr = MIB2_AUTH_TRAPS_ENABLED;
2614 return sizeof(*uint_ptr);
2618 snmp_set_test(
const struct snmp_scalar_array_node_def *node,
u16_t len,
void *value)
2620 snmp_err_t ret = SNMP_ERR_WRONGVALUE;
2623 if (node->oid == 30) {
2628 if ((*sint_ptr == MIB2_AUTH_TRAPS_DISABLED) || (*sint_ptr == MIB2_AUTH_TRAPS_ENABLED)) {
2629 ret = SNMP_ERR_NOERROR;
2636 snmp_set_value(
const struct snmp_scalar_array_node_def *node,
u16_t len,
void *value)
2640 if (node->oid == 30) {
2643 if (*sint_ptr == MIB2_AUTH_TRAPS_DISABLED) {
2644 snmp_set_auth_traps_enabled(SNMP_AUTH_TRAPS_DISABLED);
2646 snmp_set_auth_traps_enabled(SNMP_AUTH_TRAPS_ENABLED);
2650 return SNMP_ERR_NOERROR;
struct netif * netif_list
struct netif * netif_default
u8_t hwaddr[NETIF_MAX_HWADDR_LEN]
err_t tcpip_callback_with_block(tcpip_callback_fn function, void *ctx, u8_t block)
#define netif_is_link_up(netif)
#define MEMCPY(dst, src, len)
#define PBUF_POOL_BUFSIZE
void netif_set_up(struct netif *netif)
#define IP_REASS_MAX_PBUFS
#define SNMP_LWIP_MIB2_SYSNAME
#define SNMP_LWIP_MIB2_SYSLOCATION
#define MIB2_COPY_SYSUPTIME_TO(ptrToVal)
#define PBUF_LINK_ENCAPSULATION_HLEN
#define IP_IS_V6_VAL(ipaddr)
#define ip_addr_cmp(addr1, addr2)
#define LWIP_ASSERT(message, assertion)
#define LWIP_ARRAYSIZE(x)
#define SNMP_LWIP_MIB2_SYSDESC
void netif_set_down(struct netif *netif)
#define SNMP_LWIP_MIB2_SYSCONTACT
#define netif_is_up(netif)
#define LWIP_DEBUGF(debug, message)
#define LWIP_UNUSED_ARG(x)