lwip统计量分两种,一种是lwip自己的,一种是snmp的。
直接用snmp的
1 /* 2 ----------------------------------- 3 ---------- Statistics options ---------- 4 ----------------------------------- 5 */ 6 #define LWIP_STATS 1 7 #define MIB2_STATS 1
打开以上两个开关的同时,需要将stats.c加到工程中。
UDP的MIB2统计量有:
1 /* UDP */ 2 u32_t udpindatagrams; 3 u32_t udpnoports; 4 u32_t udpinerrors; 5 u32_t udpoutdatagrams;
在其他地方可以用以下方式获取这些统计量
STATS_GET(mib2.udpoutdatagrams)
对于netif的MIB2统计量,在netif结构体中已经有定义:
1 #if MIB2_STATS 2 /** link type (from "snmp_ifType" enum from snmp_mib2.h) */ 3 u8_t link_type; 4 /** (estimate) link speed */ 5 u32_t link_speed; 6 /** timestamp at last change made (up/down) */ 7 u32_t ts; 8 /** counters */ 9 struct stats_mib2_netif_ctrs mib2_counters; 10 #endif /* MIB2_STATS */
其中,结构体stats_mib2_netif_ctrs在stats.h中定义。
对于UDP,IP的MIB统计量的操作在stats.h中定义,而对于netif的MIB统计量的操作则在snmp.h中,为什么呢?(对于netif统计量,只需要包含snmp.h即可,不需要包含其他snmp.c文件,只是用了一些宏操作)
对于netif的MIB统计量,在netif中的netif_poll和netif_loop_output中进行了操作:
1 MIB2_STATS_NETIF_INC(stats_if, ifoutdiscards);
但这两个函数基本都没有用到,因此,netif的统计量应该在ethernetif和slipif中进行操作
在ethernetif.c的low_level_output函数中,进行如下操作即可。
1 MIB2_STATS_NETIF_INC(s_pxNetIf, ifoutucastpkts);
对于每个netif中都有mib2_counters,因此,每个netif都可以进行该操作。
总结:
对于IP、UDP等的MIB统计量定义在stats.c中的lwip_stats变量中,对于netif的MIB统计量则定义在各netif结构体中。