00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "lwip/opt.h"
00040
00041 #if LWIP_STATS
00042
00043 #include "lwip/def.h"
00044 #include "lwip/stats.h"
00045 #include "lwip/mem.h"
00046
00047 #include <string.h>
00048
00049 struct stats_ lwip_stats;
00050
00051 void stats_init(void)
00052 {
00053 #ifdef LWIP_DEBUG
00054 #if MEMP_STATS
00055 const char * memp_names[] = {
00056 #define LWIP_MEMPOOL(name,num,size,desc) desc,
00057 #include "lwip/memp_std.h"
00058 };
00059 int i;
00060 for (i = 0; i < MEMP_MAX; i++) {
00061 lwip_stats.memp[i].name = memp_names[i];
00062 }
00063 #endif
00064 #if MEM_STATS
00065 lwip_stats.mem.name = "MEM";
00066 #endif
00067 #endif
00068 }
00069
00070 #if LWIP_STATS_DISPLAY
00071 void
00072 stats_display_proto(struct stats_proto *proto, const char *name)
00073 {
00074 LWIP_PLATFORM_DIAG(("\n%s\n\t", name));
00075 LWIP_PLATFORM_DIAG(("xmit: %"STAT_COUNTER_F"\n\t", proto->xmit));
00076 LWIP_PLATFORM_DIAG(("recv: %"STAT_COUNTER_F"\n\t", proto->recv));
00077 LWIP_PLATFORM_DIAG(("fw: %"STAT_COUNTER_F"\n\t", proto->fw));
00078 LWIP_PLATFORM_DIAG(("drop: %"STAT_COUNTER_F"\n\t", proto->drop));
00079 LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", proto->chkerr));
00080 LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", proto->lenerr));
00081 LWIP_PLATFORM_DIAG(("memerr: %"STAT_COUNTER_F"\n\t", proto->memerr));
00082 LWIP_PLATFORM_DIAG(("rterr: %"STAT_COUNTER_F"\n\t", proto->rterr));
00083 LWIP_PLATFORM_DIAG(("proterr: %"STAT_COUNTER_F"\n\t", proto->proterr));
00084 LWIP_PLATFORM_DIAG(("opterr: %"STAT_COUNTER_F"\n\t", proto->opterr));
00085 LWIP_PLATFORM_DIAG(("err: %"STAT_COUNTER_F"\n\t", proto->err));
00086 LWIP_PLATFORM_DIAG(("cachehit: %"STAT_COUNTER_F"\n", proto->cachehit));
00087 }
00088
00089 #if IGMP_STATS
00090 void
00091 stats_display_igmp(struct stats_igmp *igmp)
00092 {
00093 LWIP_PLATFORM_DIAG(("\nIGMP\n\t"));
00094 LWIP_PLATFORM_DIAG(("xmit: %"STAT_COUNTER_F"\n\t", igmp->xmit));
00095 LWIP_PLATFORM_DIAG(("recv: %"STAT_COUNTER_F"\n\t", igmp->recv));
00096 LWIP_PLATFORM_DIAG(("drop: %"STAT_COUNTER_F"\n\t", igmp->drop));
00097 LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", igmp->chkerr));
00098 LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", igmp->lenerr));
00099 LWIP_PLATFORM_DIAG(("memerr: %"STAT_COUNTER_F"\n\t", igmp->memerr));
00100 LWIP_PLATFORM_DIAG(("proterr: %"STAT_COUNTER_F"\n\t", igmp->proterr));
00101 LWIP_PLATFORM_DIAG(("rx_v1: %"STAT_COUNTER_F"\n\t", igmp->rx_v1));
00102 LWIP_PLATFORM_DIAG(("rx_group: %"STAT_COUNTER_F"\n", igmp->rx_group));
00103 LWIP_PLATFORM_DIAG(("rx_general: %"STAT_COUNTER_F"\n", igmp->rx_general));
00104 LWIP_PLATFORM_DIAG(("rx_report: %"STAT_COUNTER_F"\n\t", igmp->rx_report));
00105 LWIP_PLATFORM_DIAG(("tx_join: %"STAT_COUNTER_F"\n\t", igmp->tx_join));
00106 LWIP_PLATFORM_DIAG(("tx_leave: %"STAT_COUNTER_F"\n\t", igmp->tx_leave));
00107 LWIP_PLATFORM_DIAG(("tx_report: %"STAT_COUNTER_F"\n\t", igmp->tx_report));
00108 }
00109 #endif
00110
00111 #if MEM_STATS || MEMP_STATS
00112 void
00113 stats_display_mem(struct stats_mem *mem, const char *name)
00114 {
00115 LWIP_PLATFORM_DIAG(("\nMEM %s\n\t", name));
00116 LWIP_PLATFORM_DIAG(("avail: %"U32_F"\n\t", (u32_t)mem->avail));
00117 LWIP_PLATFORM_DIAG(("used: %"U32_F"\n\t", (u32_t)mem->used));
00118 LWIP_PLATFORM_DIAG(("max: %"U32_F"\n\t", (u32_t)mem->max));
00119 LWIP_PLATFORM_DIAG(("err: %"U32_F"\n", (u32_t)mem->err));
00120 }
00121
00122 #if MEMP_STATS
00123 void
00124 stats_display_memp(struct stats_mem *mem, int index)
00125 {
00126 char * memp_names[] = {
00127 #define LWIP_MEMPOOL(name,num,size,desc) desc,
00128 #include "lwip/memp_std.h"
00129 };
00130 if(index < MEMP_MAX) {
00131 stats_display_mem(mem, memp_names[index]);
00132 }
00133 }
00134 #endif
00135 #endif
00136
00137 #if SYS_STATS
00138 void
00139 stats_display_sys(struct stats_sys *sys)
00140 {
00141 LWIP_PLATFORM_DIAG(("\nSYS\n\t"));
00142 LWIP_PLATFORM_DIAG(("sem.used: %"U32_F"\n\t", (u32_t)sys->sem.used));
00143 LWIP_PLATFORM_DIAG(("sem.max: %"U32_F"\n\t", (u32_t)sys->sem.max));
00144 LWIP_PLATFORM_DIAG(("sem.err: %"U32_F"\n\t", (u32_t)sys->sem.err));
00145 LWIP_PLATFORM_DIAG(("mutex.used: %"U32_F"\n\t", (u32_t)sys->mutex.used));
00146 LWIP_PLATFORM_DIAG(("mutex.max: %"U32_F"\n\t", (u32_t)sys->mutex.max));
00147 LWIP_PLATFORM_DIAG(("mutex.err: %"U32_F"\n\t", (u32_t)sys->mutex.err));
00148 LWIP_PLATFORM_DIAG(("mbox.used: %"U32_F"\n\t", (u32_t)sys->mbox.used));
00149 LWIP_PLATFORM_DIAG(("mbox.max: %"U32_F"\n\t", (u32_t)sys->mbox.max));
00150 LWIP_PLATFORM_DIAG(("mbox.err: %"U32_F"\n\t", (u32_t)sys->mbox.err));
00151 }
00152 #endif
00153
00154 void
00155 stats_display(void)
00156 {
00157 s16_t i;
00158
00159 LINK_STATS_DISPLAY();
00160 ETHARP_STATS_DISPLAY();
00161 IPFRAG_STATS_DISPLAY();
00162 IP_STATS_DISPLAY();
00163 IGMP_STATS_DISPLAY();
00164 ICMP_STATS_DISPLAY();
00165 UDP_STATS_DISPLAY();
00166 TCP_STATS_DISPLAY();
00167 MEM_STATS_DISPLAY();
00168 for (i = 0; i < MEMP_MAX; i++) {
00169 MEMP_STATS_DISPLAY(i);
00170 }
00171 SYS_STATS_DISPLAY();
00172 }
00173 #endif
00174
00175 #endif
00176