hattori&ide

Dependencies:   mbed

Committer:
hattori_atsushi
Date:
Sun Dec 18 08:16:01 2022 +0000
Revision:
0:f77369cabd75
hattori

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hattori_atsushi 0:f77369cabd75 1 /*
hattori_atsushi 0:f77369cabd75 2 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
hattori_atsushi 0:f77369cabd75 3 * All rights reserved.
hattori_atsushi 0:f77369cabd75 4 *
hattori_atsushi 0:f77369cabd75 5 * Redistribution and use in source and binary forms, with or without modification,
hattori_atsushi 0:f77369cabd75 6 * are permitted provided that the following conditions are met:
hattori_atsushi 0:f77369cabd75 7 *
hattori_atsushi 0:f77369cabd75 8 * 1. Redistributions of source code must retain the above copyright notice,
hattori_atsushi 0:f77369cabd75 9 * this list of conditions and the following disclaimer.
hattori_atsushi 0:f77369cabd75 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
hattori_atsushi 0:f77369cabd75 11 * this list of conditions and the following disclaimer in the documentation
hattori_atsushi 0:f77369cabd75 12 * and/or other materials provided with the distribution.
hattori_atsushi 0:f77369cabd75 13 * 3. The name of the author may not be used to endorse or promote products
hattori_atsushi 0:f77369cabd75 14 * derived from this software without specific prior written permission.
hattori_atsushi 0:f77369cabd75 15 *
hattori_atsushi 0:f77369cabd75 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
hattori_atsushi 0:f77369cabd75 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
hattori_atsushi 0:f77369cabd75 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
hattori_atsushi 0:f77369cabd75 19 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
hattori_atsushi 0:f77369cabd75 20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
hattori_atsushi 0:f77369cabd75 21 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
hattori_atsushi 0:f77369cabd75 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
hattori_atsushi 0:f77369cabd75 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
hattori_atsushi 0:f77369cabd75 24 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
hattori_atsushi 0:f77369cabd75 25 * OF SUCH DAMAGE.
hattori_atsushi 0:f77369cabd75 26 *
hattori_atsushi 0:f77369cabd75 27 * This file is part of the lwIP TCP/IP stack.
hattori_atsushi 0:f77369cabd75 28 *
hattori_atsushi 0:f77369cabd75 29 * Author: Adam Dunkels <adam@sics.se>
hattori_atsushi 0:f77369cabd75 30 *
hattori_atsushi 0:f77369cabd75 31 */
hattori_atsushi 0:f77369cabd75 32 #ifndef __LWIP_STATS_H__
hattori_atsushi 0:f77369cabd75 33 #define __LWIP_STATS_H__
hattori_atsushi 0:f77369cabd75 34
hattori_atsushi 0:f77369cabd75 35 #include "lwip/opt.h"
hattori_atsushi 0:f77369cabd75 36
hattori_atsushi 0:f77369cabd75 37 #include "lwip/mem.h"
hattori_atsushi 0:f77369cabd75 38 #include "lwip/memp.h"
hattori_atsushi 0:f77369cabd75 39
hattori_atsushi 0:f77369cabd75 40 #ifdef __cplusplus
hattori_atsushi 0:f77369cabd75 41 extern "C" {
hattori_atsushi 0:f77369cabd75 42 #endif
hattori_atsushi 0:f77369cabd75 43
hattori_atsushi 0:f77369cabd75 44 #if LWIP_STATS
hattori_atsushi 0:f77369cabd75 45
hattori_atsushi 0:f77369cabd75 46 #ifndef LWIP_STATS_LARGE
hattori_atsushi 0:f77369cabd75 47 #define LWIP_STATS_LARGE 0
hattori_atsushi 0:f77369cabd75 48 #endif
hattori_atsushi 0:f77369cabd75 49
hattori_atsushi 0:f77369cabd75 50 #if LWIP_STATS_LARGE
hattori_atsushi 0:f77369cabd75 51 #define STAT_COUNTER u32_t
hattori_atsushi 0:f77369cabd75 52 #define STAT_COUNTER_F U32_F
hattori_atsushi 0:f77369cabd75 53 #else
hattori_atsushi 0:f77369cabd75 54 #define STAT_COUNTER u16_t
hattori_atsushi 0:f77369cabd75 55 #define STAT_COUNTER_F U16_F
hattori_atsushi 0:f77369cabd75 56 #endif
hattori_atsushi 0:f77369cabd75 57
hattori_atsushi 0:f77369cabd75 58 struct stats_proto {
hattori_atsushi 0:f77369cabd75 59 STAT_COUNTER xmit; /* Transmitted packets. */
hattori_atsushi 0:f77369cabd75 60 STAT_COUNTER recv; /* Received packets. */
hattori_atsushi 0:f77369cabd75 61 STAT_COUNTER fw; /* Forwarded packets. */
hattori_atsushi 0:f77369cabd75 62 STAT_COUNTER drop; /* Dropped packets. */
hattori_atsushi 0:f77369cabd75 63 STAT_COUNTER chkerr; /* Checksum error. */
hattori_atsushi 0:f77369cabd75 64 STAT_COUNTER lenerr; /* Invalid length error. */
hattori_atsushi 0:f77369cabd75 65 STAT_COUNTER memerr; /* Out of memory error. */
hattori_atsushi 0:f77369cabd75 66 STAT_COUNTER rterr; /* Routing error. */
hattori_atsushi 0:f77369cabd75 67 STAT_COUNTER proterr; /* Protocol error. */
hattori_atsushi 0:f77369cabd75 68 STAT_COUNTER opterr; /* Error in options. */
hattori_atsushi 0:f77369cabd75 69 STAT_COUNTER err; /* Misc error. */
hattori_atsushi 0:f77369cabd75 70 STAT_COUNTER cachehit;
hattori_atsushi 0:f77369cabd75 71 };
hattori_atsushi 0:f77369cabd75 72
hattori_atsushi 0:f77369cabd75 73 struct stats_igmp {
hattori_atsushi 0:f77369cabd75 74 STAT_COUNTER xmit; /* Transmitted packets. */
hattori_atsushi 0:f77369cabd75 75 STAT_COUNTER recv; /* Received packets. */
hattori_atsushi 0:f77369cabd75 76 STAT_COUNTER drop; /* Dropped packets. */
hattori_atsushi 0:f77369cabd75 77 STAT_COUNTER chkerr; /* Checksum error. */
hattori_atsushi 0:f77369cabd75 78 STAT_COUNTER lenerr; /* Invalid length error. */
hattori_atsushi 0:f77369cabd75 79 STAT_COUNTER memerr; /* Out of memory error. */
hattori_atsushi 0:f77369cabd75 80 STAT_COUNTER proterr; /* Protocol error. */
hattori_atsushi 0:f77369cabd75 81 STAT_COUNTER rx_v1; /* Received v1 frames. */
hattori_atsushi 0:f77369cabd75 82 STAT_COUNTER rx_group; /* Received group-specific queries. */
hattori_atsushi 0:f77369cabd75 83 STAT_COUNTER rx_general; /* Received general queries. */
hattori_atsushi 0:f77369cabd75 84 STAT_COUNTER rx_report; /* Received reports. */
hattori_atsushi 0:f77369cabd75 85 STAT_COUNTER tx_join; /* Sent joins. */
hattori_atsushi 0:f77369cabd75 86 STAT_COUNTER tx_leave; /* Sent leaves. */
hattori_atsushi 0:f77369cabd75 87 STAT_COUNTER tx_report; /* Sent reports. */
hattori_atsushi 0:f77369cabd75 88 };
hattori_atsushi 0:f77369cabd75 89
hattori_atsushi 0:f77369cabd75 90 struct stats_mem {
hattori_atsushi 0:f77369cabd75 91 #ifdef LWIP_DEBUG
hattori_atsushi 0:f77369cabd75 92 const char *name;
hattori_atsushi 0:f77369cabd75 93 #endif /* LWIP_DEBUG */
hattori_atsushi 0:f77369cabd75 94 mem_size_t avail;
hattori_atsushi 0:f77369cabd75 95 mem_size_t used;
hattori_atsushi 0:f77369cabd75 96 mem_size_t max;
hattori_atsushi 0:f77369cabd75 97 STAT_COUNTER err;
hattori_atsushi 0:f77369cabd75 98 STAT_COUNTER illegal;
hattori_atsushi 0:f77369cabd75 99 };
hattori_atsushi 0:f77369cabd75 100
hattori_atsushi 0:f77369cabd75 101 struct stats_syselem {
hattori_atsushi 0:f77369cabd75 102 STAT_COUNTER used;
hattori_atsushi 0:f77369cabd75 103 STAT_COUNTER max;
hattori_atsushi 0:f77369cabd75 104 STAT_COUNTER err;
hattori_atsushi 0:f77369cabd75 105 };
hattori_atsushi 0:f77369cabd75 106
hattori_atsushi 0:f77369cabd75 107 struct stats_sys {
hattori_atsushi 0:f77369cabd75 108 struct stats_syselem sem;
hattori_atsushi 0:f77369cabd75 109 struct stats_syselem mutex;
hattori_atsushi 0:f77369cabd75 110 struct stats_syselem mbox;
hattori_atsushi 0:f77369cabd75 111 };
hattori_atsushi 0:f77369cabd75 112
hattori_atsushi 0:f77369cabd75 113 struct stats_ {
hattori_atsushi 0:f77369cabd75 114 #if LINK_STATS
hattori_atsushi 0:f77369cabd75 115 struct stats_proto link;
hattori_atsushi 0:f77369cabd75 116 #endif
hattori_atsushi 0:f77369cabd75 117 #if ETHARP_STATS
hattori_atsushi 0:f77369cabd75 118 struct stats_proto etharp;
hattori_atsushi 0:f77369cabd75 119 #endif
hattori_atsushi 0:f77369cabd75 120 #if IPFRAG_STATS
hattori_atsushi 0:f77369cabd75 121 struct stats_proto ip_frag;
hattori_atsushi 0:f77369cabd75 122 #endif
hattori_atsushi 0:f77369cabd75 123 #if IP_STATS
hattori_atsushi 0:f77369cabd75 124 struct stats_proto ip;
hattori_atsushi 0:f77369cabd75 125 #endif
hattori_atsushi 0:f77369cabd75 126 #if ICMP_STATS
hattori_atsushi 0:f77369cabd75 127 struct stats_proto icmp;
hattori_atsushi 0:f77369cabd75 128 #endif
hattori_atsushi 0:f77369cabd75 129 #if IGMP_STATS
hattori_atsushi 0:f77369cabd75 130 struct stats_igmp igmp;
hattori_atsushi 0:f77369cabd75 131 #endif
hattori_atsushi 0:f77369cabd75 132 #if UDP_STATS
hattori_atsushi 0:f77369cabd75 133 struct stats_proto udp;
hattori_atsushi 0:f77369cabd75 134 #endif
hattori_atsushi 0:f77369cabd75 135 #if TCP_STATS
hattori_atsushi 0:f77369cabd75 136 struct stats_proto tcp;
hattori_atsushi 0:f77369cabd75 137 #endif
hattori_atsushi 0:f77369cabd75 138 #if MEM_STATS
hattori_atsushi 0:f77369cabd75 139 struct stats_mem mem;
hattori_atsushi 0:f77369cabd75 140 #endif
hattori_atsushi 0:f77369cabd75 141 #if MEMP_STATS
hattori_atsushi 0:f77369cabd75 142 struct stats_mem memp[MEMP_MAX];
hattori_atsushi 0:f77369cabd75 143 #endif
hattori_atsushi 0:f77369cabd75 144 #if SYS_STATS
hattori_atsushi 0:f77369cabd75 145 struct stats_sys sys;
hattori_atsushi 0:f77369cabd75 146 #endif
hattori_atsushi 0:f77369cabd75 147 };
hattori_atsushi 0:f77369cabd75 148
hattori_atsushi 0:f77369cabd75 149 extern struct stats_ lwip_stats;
hattori_atsushi 0:f77369cabd75 150
hattori_atsushi 0:f77369cabd75 151 void stats_init(void);
hattori_atsushi 0:f77369cabd75 152
hattori_atsushi 0:f77369cabd75 153 #define STATS_INC(x) ++lwip_stats.x
hattori_atsushi 0:f77369cabd75 154 #define STATS_DEC(x) --lwip_stats.x
hattori_atsushi 0:f77369cabd75 155 #define STATS_INC_USED(x, y) do { lwip_stats.x.used += y; \
hattori_atsushi 0:f77369cabd75 156 if (lwip_stats.x.max < lwip_stats.x.used) { \
hattori_atsushi 0:f77369cabd75 157 lwip_stats.x.max = lwip_stats.x.used; \
hattori_atsushi 0:f77369cabd75 158 } \
hattori_atsushi 0:f77369cabd75 159 } while(0)
hattori_atsushi 0:f77369cabd75 160 #else /* LWIP_STATS */
hattori_atsushi 0:f77369cabd75 161 #define stats_init()
hattori_atsushi 0:f77369cabd75 162 #define STATS_INC(x)
hattori_atsushi 0:f77369cabd75 163 #define STATS_DEC(x)
hattori_atsushi 0:f77369cabd75 164 #define STATS_INC_USED(x)
hattori_atsushi 0:f77369cabd75 165 #endif /* LWIP_STATS */
hattori_atsushi 0:f77369cabd75 166
hattori_atsushi 0:f77369cabd75 167 #if TCP_STATS
hattori_atsushi 0:f77369cabd75 168 #define TCP_STATS_INC(x) STATS_INC(x)
hattori_atsushi 0:f77369cabd75 169 #define TCP_STATS_DISPLAY() stats_display_proto(&lwip_stats.tcp, "TCP")
hattori_atsushi 0:f77369cabd75 170 #else
hattori_atsushi 0:f77369cabd75 171 #define TCP_STATS_INC(x)
hattori_atsushi 0:f77369cabd75 172 #define TCP_STATS_DISPLAY()
hattori_atsushi 0:f77369cabd75 173 #endif
hattori_atsushi 0:f77369cabd75 174
hattori_atsushi 0:f77369cabd75 175 #if UDP_STATS
hattori_atsushi 0:f77369cabd75 176 #define UDP_STATS_INC(x) STATS_INC(x)
hattori_atsushi 0:f77369cabd75 177 #define UDP_STATS_DISPLAY() stats_display_proto(&lwip_stats.udp, "UDP")
hattori_atsushi 0:f77369cabd75 178 #else
hattori_atsushi 0:f77369cabd75 179 #define UDP_STATS_INC(x)
hattori_atsushi 0:f77369cabd75 180 #define UDP_STATS_DISPLAY()
hattori_atsushi 0:f77369cabd75 181 #endif
hattori_atsushi 0:f77369cabd75 182
hattori_atsushi 0:f77369cabd75 183 #if ICMP_STATS
hattori_atsushi 0:f77369cabd75 184 #define ICMP_STATS_INC(x) STATS_INC(x)
hattori_atsushi 0:f77369cabd75 185 #define ICMP_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp, "ICMP")
hattori_atsushi 0:f77369cabd75 186 #else
hattori_atsushi 0:f77369cabd75 187 #define ICMP_STATS_INC(x)
hattori_atsushi 0:f77369cabd75 188 #define ICMP_STATS_DISPLAY()
hattori_atsushi 0:f77369cabd75 189 #endif
hattori_atsushi 0:f77369cabd75 190
hattori_atsushi 0:f77369cabd75 191 #if IGMP_STATS
hattori_atsushi 0:f77369cabd75 192 #define IGMP_STATS_INC(x) STATS_INC(x)
hattori_atsushi 0:f77369cabd75 193 #define IGMP_STATS_DISPLAY() stats_display_igmp(&lwip_stats.igmp)
hattori_atsushi 0:f77369cabd75 194 #else
hattori_atsushi 0:f77369cabd75 195 #define IGMP_STATS_INC(x)
hattori_atsushi 0:f77369cabd75 196 #define IGMP_STATS_DISPLAY()
hattori_atsushi 0:f77369cabd75 197 #endif
hattori_atsushi 0:f77369cabd75 198
hattori_atsushi 0:f77369cabd75 199 #if IP_STATS
hattori_atsushi 0:f77369cabd75 200 #define IP_STATS_INC(x) STATS_INC(x)
hattori_atsushi 0:f77369cabd75 201 #define IP_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip, "IP")
hattori_atsushi 0:f77369cabd75 202 #else
hattori_atsushi 0:f77369cabd75 203 #define IP_STATS_INC(x)
hattori_atsushi 0:f77369cabd75 204 #define IP_STATS_DISPLAY()
hattori_atsushi 0:f77369cabd75 205 #endif
hattori_atsushi 0:f77369cabd75 206
hattori_atsushi 0:f77369cabd75 207 #if IPFRAG_STATS
hattori_atsushi 0:f77369cabd75 208 #define IPFRAG_STATS_INC(x) STATS_INC(x)
hattori_atsushi 0:f77369cabd75 209 #define IPFRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip_frag, "IP_FRAG")
hattori_atsushi 0:f77369cabd75 210 #else
hattori_atsushi 0:f77369cabd75 211 #define IPFRAG_STATS_INC(x)
hattori_atsushi 0:f77369cabd75 212 #define IPFRAG_STATS_DISPLAY()
hattori_atsushi 0:f77369cabd75 213 #endif
hattori_atsushi 0:f77369cabd75 214
hattori_atsushi 0:f77369cabd75 215 #if ETHARP_STATS
hattori_atsushi 0:f77369cabd75 216 #define ETHARP_STATS_INC(x) STATS_INC(x)
hattori_atsushi 0:f77369cabd75 217 #define ETHARP_STATS_DISPLAY() stats_display_proto(&lwip_stats.etharp, "ETHARP")
hattori_atsushi 0:f77369cabd75 218 #else
hattori_atsushi 0:f77369cabd75 219 #define ETHARP_STATS_INC(x)
hattori_atsushi 0:f77369cabd75 220 #define ETHARP_STATS_DISPLAY()
hattori_atsushi 0:f77369cabd75 221 #endif
hattori_atsushi 0:f77369cabd75 222
hattori_atsushi 0:f77369cabd75 223 #if LINK_STATS
hattori_atsushi 0:f77369cabd75 224 #define LINK_STATS_INC(x) STATS_INC(x)
hattori_atsushi 0:f77369cabd75 225 #define LINK_STATS_DISPLAY() stats_display_proto(&lwip_stats.link, "LINK")
hattori_atsushi 0:f77369cabd75 226 #else
hattori_atsushi 0:f77369cabd75 227 #define LINK_STATS_INC(x)
hattori_atsushi 0:f77369cabd75 228 #define LINK_STATS_DISPLAY()
hattori_atsushi 0:f77369cabd75 229 #endif
hattori_atsushi 0:f77369cabd75 230
hattori_atsushi 0:f77369cabd75 231 #if MEM_STATS
hattori_atsushi 0:f77369cabd75 232 #define MEM_STATS_AVAIL(x, y) lwip_stats.mem.x = y
hattori_atsushi 0:f77369cabd75 233 #define MEM_STATS_INC(x) STATS_INC(mem.x)
hattori_atsushi 0:f77369cabd75 234 #define MEM_STATS_INC_USED(x, y) STATS_INC_USED(mem, y)
hattori_atsushi 0:f77369cabd75 235 #define MEM_STATS_DEC_USED(x, y) lwip_stats.mem.x -= y
hattori_atsushi 0:f77369cabd75 236 #define MEM_STATS_DISPLAY() stats_display_mem(&lwip_stats.mem, "HEAP")
hattori_atsushi 0:f77369cabd75 237 #else
hattori_atsushi 0:f77369cabd75 238 #define MEM_STATS_AVAIL(x, y)
hattori_atsushi 0:f77369cabd75 239 #define MEM_STATS_INC(x)
hattori_atsushi 0:f77369cabd75 240 #define MEM_STATS_INC_USED(x, y)
hattori_atsushi 0:f77369cabd75 241 #define MEM_STATS_DEC_USED(x, y)
hattori_atsushi 0:f77369cabd75 242 #define MEM_STATS_DISPLAY()
hattori_atsushi 0:f77369cabd75 243 #endif
hattori_atsushi 0:f77369cabd75 244
hattori_atsushi 0:f77369cabd75 245 #if MEMP_STATS
hattori_atsushi 0:f77369cabd75 246 #define MEMP_STATS_AVAIL(x, i, y) lwip_stats.memp[i].x = y
hattori_atsushi 0:f77369cabd75 247 #define MEMP_STATS_INC(x, i) STATS_INC(memp[i].x)
hattori_atsushi 0:f77369cabd75 248 #define MEMP_STATS_DEC(x, i) STATS_DEC(memp[i].x)
hattori_atsushi 0:f77369cabd75 249 #define MEMP_STATS_INC_USED(x, i) STATS_INC_USED(memp[i], 1)
hattori_atsushi 0:f77369cabd75 250 #define MEMP_STATS_DISPLAY(i) stats_display_memp(&lwip_stats.memp[i], i)
hattori_atsushi 0:f77369cabd75 251 #else
hattori_atsushi 0:f77369cabd75 252 #define MEMP_STATS_AVAIL(x, i, y)
hattori_atsushi 0:f77369cabd75 253 #define MEMP_STATS_INC(x, i)
hattori_atsushi 0:f77369cabd75 254 #define MEMP_STATS_DEC(x, i)
hattori_atsushi 0:f77369cabd75 255 #define MEMP_STATS_INC_USED(x, i)
hattori_atsushi 0:f77369cabd75 256 #define MEMP_STATS_DISPLAY(i)
hattori_atsushi 0:f77369cabd75 257 #endif
hattori_atsushi 0:f77369cabd75 258
hattori_atsushi 0:f77369cabd75 259 #if SYS_STATS
hattori_atsushi 0:f77369cabd75 260 #define SYS_STATS_INC(x) STATS_INC(sys.x)
hattori_atsushi 0:f77369cabd75 261 #define SYS_STATS_DEC(x) STATS_DEC(sys.x)
hattori_atsushi 0:f77369cabd75 262 #define SYS_STATS_INC_USED(x) STATS_INC_USED(sys.x, 1)
hattori_atsushi 0:f77369cabd75 263 #define SYS_STATS_DISPLAY() stats_display_sys(&lwip_stats.sys)
hattori_atsushi 0:f77369cabd75 264 #else
hattori_atsushi 0:f77369cabd75 265 #define SYS_STATS_INC(x)
hattori_atsushi 0:f77369cabd75 266 #define SYS_STATS_DEC(x)
hattori_atsushi 0:f77369cabd75 267 #define SYS_STATS_INC_USED(x)
hattori_atsushi 0:f77369cabd75 268 #define SYS_STATS_DISPLAY()
hattori_atsushi 0:f77369cabd75 269 #endif
hattori_atsushi 0:f77369cabd75 270
hattori_atsushi 0:f77369cabd75 271 /* Display of statistics */
hattori_atsushi 0:f77369cabd75 272 #if LWIP_STATS_DISPLAY
hattori_atsushi 0:f77369cabd75 273 void stats_display(void);
hattori_atsushi 0:f77369cabd75 274 void stats_display_proto(struct stats_proto *proto, char *name);
hattori_atsushi 0:f77369cabd75 275 void stats_display_igmp(struct stats_igmp *igmp);
hattori_atsushi 0:f77369cabd75 276 void stats_display_mem(struct stats_mem *mem, char *name);
hattori_atsushi 0:f77369cabd75 277 void stats_display_memp(struct stats_mem *mem, int index);
hattori_atsushi 0:f77369cabd75 278 void stats_display_sys(struct stats_sys *sys);
hattori_atsushi 0:f77369cabd75 279 #else /* LWIP_STATS_DISPLAY */
hattori_atsushi 0:f77369cabd75 280 #define stats_display()
hattori_atsushi 0:f77369cabd75 281 #define stats_display_proto(proto, name)
hattori_atsushi 0:f77369cabd75 282 #define stats_display_igmp(igmp)
hattori_atsushi 0:f77369cabd75 283 #define stats_display_mem(mem, name)
hattori_atsushi 0:f77369cabd75 284 #define stats_display_memp(mem, index)
hattori_atsushi 0:f77369cabd75 285 #define stats_display_sys(sys)
hattori_atsushi 0:f77369cabd75 286 #endif /* LWIP_STATS_DISPLAY */
hattori_atsushi 0:f77369cabd75 287
hattori_atsushi 0:f77369cabd75 288 #ifdef __cplusplus
hattori_atsushi 0:f77369cabd75 289 }
hattori_atsushi 0:f77369cabd75 290 #endif
hattori_atsushi 0:f77369cabd75 291
hattori_atsushi 0:f77369cabd75 292 #endif /* __LWIP_STATS_H__ */