Port of LwIP performed by Ralf in 2010. Not recommended for use with recent mbed libraries, but good demos of raw LwIP possible

Dependents:   LwIP_raw_API_serverExample tiny-dtls

Committer:
RodColeman
Date:
Tue Sep 18 14:41:24 2012 +0000
Revision:
0:0791c1fece8e
[mbed] converted /Eth_TCP_Wei_Server/lwip

Who changed what in which revision?

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