lwip stats

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结构体中。

原文地址:https://www.cnblogs.com/yanhc/p/8849568.html