LwIP with PPP & Ethernet integration

Dependents:   NetworkingCoreLib

This is the mbed port of the LwIP stack: http://savannah.nongnu.org/projects/lwip/

It includes contributed content from NXP's port for LPCxxxx devices: http://www.lpcware.com/content/project/lightweight-ip-lwip-networking-stack

Licence

LwIP is licenced under the BSD licence:

Copyright (c) 2001-2004 Swedish Institute of Computer Science. 
All rights reserved. 
Redistribution and use in source and binary forms, with or without modification, 
are permitted provided that the following conditions are met: 
1. Redistributions of source code must retain the above copyright notice, 
this list of conditions and the following disclaimer. 
2. Redistributions in binary form must reproduce the above copyright notice, 
this list of conditions and the following disclaimer in the documentation 
and/or other materials provided with the distribution. 
3. The name of the author may not be used to endorse or promote products 
derived from this software without specific prior written permission. 
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
OF SUCH DAMAGE.
Committer:
donatien
Date:
Thu May 24 15:53:48 2012 +0000
Revision:
0:8e01dca41002
Merge with Emilio's LwIp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:8e01dca41002 1 /*
donatien 0:8e01dca41002 2 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
donatien 0:8e01dca41002 3 * All rights reserved.
donatien 0:8e01dca41002 4 *
donatien 0:8e01dca41002 5 * Redistribution and use in source and binary forms, with or without modification,
donatien 0:8e01dca41002 6 * are permitted provided that the following conditions are met:
donatien 0:8e01dca41002 7 *
donatien 0:8e01dca41002 8 * 1. Redistributions of source code must retain the above copyright notice,
donatien 0:8e01dca41002 9 * this list of conditions and the following disclaimer.
donatien 0:8e01dca41002 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
donatien 0:8e01dca41002 11 * this list of conditions and the following disclaimer in the documentation
donatien 0:8e01dca41002 12 * and/or other materials provided with the distribution.
donatien 0:8e01dca41002 13 * 3. The name of the author may not be used to endorse or promote products
donatien 0:8e01dca41002 14 * derived from this software without specific prior written permission.
donatien 0:8e01dca41002 15 *
donatien 0:8e01dca41002 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
donatien 0:8e01dca41002 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
donatien 0:8e01dca41002 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
donatien 0:8e01dca41002 19 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
donatien 0:8e01dca41002 20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
donatien 0:8e01dca41002 21 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
donatien 0:8e01dca41002 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
donatien 0:8e01dca41002 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
donatien 0:8e01dca41002 24 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
donatien 0:8e01dca41002 25 * OF SUCH DAMAGE.
donatien 0:8e01dca41002 26 *
donatien 0:8e01dca41002 27 * This file is part of the lwIP TCP/IP stack.
donatien 0:8e01dca41002 28 *
donatien 0:8e01dca41002 29 * Author: Adam Dunkels <adam@sics.se>
donatien 0:8e01dca41002 30 *
donatien 0:8e01dca41002 31 */
donatien 0:8e01dca41002 32
donatien 0:8e01dca41002 33 #ifndef __LWIP_PBUF_H__
donatien 0:8e01dca41002 34 #define __LWIP_PBUF_H__
donatien 0:8e01dca41002 35
donatien 0:8e01dca41002 36 #include "lwip/opt.h"
donatien 0:8e01dca41002 37 #include "lwip/err.h"
donatien 0:8e01dca41002 38
donatien 0:8e01dca41002 39 #ifdef __cplusplus
donatien 0:8e01dca41002 40 extern "C" {
donatien 0:8e01dca41002 41 #endif
donatien 0:8e01dca41002 42
donatien 0:8e01dca41002 43 /** Currently, the pbuf_custom code is only needed for one specific configuration
donatien 0:8e01dca41002 44 * of IP_FRAG */
donatien 0:8e01dca41002 45 #define LWIP_SUPPORT_CUSTOM_PBUF (IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF)
donatien 0:8e01dca41002 46
donatien 0:8e01dca41002 47 #define PBUF_TRANSPORT_HLEN 20
donatien 0:8e01dca41002 48 #define PBUF_IP_HLEN 20
donatien 0:8e01dca41002 49
donatien 0:8e01dca41002 50 typedef enum {
donatien 0:8e01dca41002 51 PBUF_TRANSPORT,
donatien 0:8e01dca41002 52 PBUF_IP,
donatien 0:8e01dca41002 53 PBUF_LINK,
donatien 0:8e01dca41002 54 PBUF_RAW
donatien 0:8e01dca41002 55 } pbuf_layer;
donatien 0:8e01dca41002 56
donatien 0:8e01dca41002 57 typedef enum {
donatien 0:8e01dca41002 58 PBUF_RAM, /* pbuf data is stored in RAM */
donatien 0:8e01dca41002 59 PBUF_ROM, /* pbuf data is stored in ROM */
donatien 0:8e01dca41002 60 PBUF_REF, /* pbuf comes from the pbuf pool */
donatien 0:8e01dca41002 61 PBUF_POOL /* pbuf payload refers to RAM */
donatien 0:8e01dca41002 62 } pbuf_type;
donatien 0:8e01dca41002 63
donatien 0:8e01dca41002 64
donatien 0:8e01dca41002 65 /** indicates this packet's data should be immediately passed to the application */
donatien 0:8e01dca41002 66 #define PBUF_FLAG_PUSH 0x01U
donatien 0:8e01dca41002 67 /** indicates this is a custom pbuf: pbuf_free and pbuf_header handle such a
donatien 0:8e01dca41002 68 a pbuf differently */
donatien 0:8e01dca41002 69 #define PBUF_FLAG_IS_CUSTOM 0x02U
donatien 0:8e01dca41002 70 /** indicates this pbuf is UDP multicast to be looped back */
donatien 0:8e01dca41002 71 #define PBUF_FLAG_MCASTLOOP 0x04U
donatien 0:8e01dca41002 72
donatien 0:8e01dca41002 73 struct pbuf {
donatien 0:8e01dca41002 74 /** next pbuf in singly linked pbuf chain */
donatien 0:8e01dca41002 75 struct pbuf *next;
donatien 0:8e01dca41002 76
donatien 0:8e01dca41002 77 /** pointer to the actual data in the buffer */
donatien 0:8e01dca41002 78 void *payload;
donatien 0:8e01dca41002 79
donatien 0:8e01dca41002 80 /**
donatien 0:8e01dca41002 81 * total length of this buffer and all next buffers in chain
donatien 0:8e01dca41002 82 * belonging to the same packet.
donatien 0:8e01dca41002 83 *
donatien 0:8e01dca41002 84 * For non-queue packet chains this is the invariant:
donatien 0:8e01dca41002 85 * p->tot_len == p->len + (p->next? p->next->tot_len: 0)
donatien 0:8e01dca41002 86 */
donatien 0:8e01dca41002 87 u16_t tot_len;
donatien 0:8e01dca41002 88
donatien 0:8e01dca41002 89 /** length of this buffer */
donatien 0:8e01dca41002 90 u16_t len;
donatien 0:8e01dca41002 91
donatien 0:8e01dca41002 92 /** pbuf_type as u8_t instead of enum to save space */
donatien 0:8e01dca41002 93 u8_t /*pbuf_type*/ type;
donatien 0:8e01dca41002 94
donatien 0:8e01dca41002 95 /** misc flags */
donatien 0:8e01dca41002 96 u8_t flags;
donatien 0:8e01dca41002 97
donatien 0:8e01dca41002 98 /**
donatien 0:8e01dca41002 99 * the reference count always equals the number of pointers
donatien 0:8e01dca41002 100 * that refer to this pbuf. This can be pointers from an application,
donatien 0:8e01dca41002 101 * the stack itself, or pbuf->next pointers from a chain.
donatien 0:8e01dca41002 102 */
donatien 0:8e01dca41002 103 u16_t ref;
donatien 0:8e01dca41002 104 };
donatien 0:8e01dca41002 105
donatien 0:8e01dca41002 106 #if LWIP_SUPPORT_CUSTOM_PBUF
donatien 0:8e01dca41002 107 /** Prototype for a function to free a custom pbuf */
donatien 0:8e01dca41002 108 typedef void (*pbuf_free_custom_fn)(struct pbuf *p);
donatien 0:8e01dca41002 109
donatien 0:8e01dca41002 110 /** A custom pbuf: like a pbuf, but following a function pointer to free it. */
donatien 0:8e01dca41002 111 struct pbuf_custom {
donatien 0:8e01dca41002 112 /** The actual pbuf */
donatien 0:8e01dca41002 113 struct pbuf pbuf;
donatien 0:8e01dca41002 114 /** This function is called when pbuf_free deallocates this pbuf(_custom) */
donatien 0:8e01dca41002 115 pbuf_free_custom_fn custom_free_function;
donatien 0:8e01dca41002 116 };
donatien 0:8e01dca41002 117 #endif /* LWIP_SUPPORT_CUSTOM_PBUF */
donatien 0:8e01dca41002 118
donatien 0:8e01dca41002 119 /* Initializes the pbuf module. This call is empty for now, but may not be in future. */
donatien 0:8e01dca41002 120 #define pbuf_init()
donatien 0:8e01dca41002 121
donatien 0:8e01dca41002 122 struct pbuf *pbuf_alloc(pbuf_layer l, u16_t length, pbuf_type type);
donatien 0:8e01dca41002 123 #if LWIP_SUPPORT_CUSTOM_PBUF
donatien 0:8e01dca41002 124 struct pbuf *pbuf_alloced_custom(pbuf_layer l, u16_t length, pbuf_type type,
donatien 0:8e01dca41002 125 struct pbuf_custom *p, void *payload_mem,
donatien 0:8e01dca41002 126 u16_t payload_mem_len);
donatien 0:8e01dca41002 127 #endif /* LWIP_SUPPORT_CUSTOM_PBUF */
donatien 0:8e01dca41002 128 void pbuf_realloc(struct pbuf *p, u16_t size);
donatien 0:8e01dca41002 129 u8_t pbuf_header(struct pbuf *p, s16_t header_size);
donatien 0:8e01dca41002 130 void pbuf_ref(struct pbuf *p);
donatien 0:8e01dca41002 131 u8_t pbuf_free(struct pbuf *p);
donatien 0:8e01dca41002 132 u8_t pbuf_clen(struct pbuf *p);
donatien 0:8e01dca41002 133 void pbuf_cat(struct pbuf *head, struct pbuf *tail);
donatien 0:8e01dca41002 134 void pbuf_chain(struct pbuf *head, struct pbuf *tail);
donatien 0:8e01dca41002 135 struct pbuf *pbuf_dechain(struct pbuf *p);
donatien 0:8e01dca41002 136 err_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from);
donatien 0:8e01dca41002 137 u16_t pbuf_copy_partial(struct pbuf *p, void *dataptr, u16_t len, u16_t offset);
donatien 0:8e01dca41002 138 err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len);
donatien 0:8e01dca41002 139 struct pbuf *pbuf_coalesce(struct pbuf *p, pbuf_layer layer);
donatien 0:8e01dca41002 140 #if LWIP_CHECKSUM_ON_COPY
donatien 0:8e01dca41002 141 err_t pbuf_fill_chksum(struct pbuf *p, u16_t start_offset, const void *dataptr,
donatien 0:8e01dca41002 142 u16_t len, u16_t *chksum);
donatien 0:8e01dca41002 143 #endif /* LWIP_CHECKSUM_ON_COPY */
donatien 0:8e01dca41002 144
donatien 0:8e01dca41002 145 u8_t pbuf_get_at(struct pbuf* p, u16_t offset);
donatien 0:8e01dca41002 146 u16_t pbuf_memcmp(struct pbuf* p, u16_t offset, const void* s2, u16_t n);
donatien 0:8e01dca41002 147 u16_t pbuf_memfind(struct pbuf* p, const void* mem, u16_t mem_len, u16_t start_offset);
donatien 0:8e01dca41002 148 u16_t pbuf_strstr(struct pbuf* p, const char* substr);
donatien 0:8e01dca41002 149
donatien 0:8e01dca41002 150 #ifdef __cplusplus
donatien 0:8e01dca41002 151 }
donatien 0:8e01dca41002 152 #endif
donatien 0:8e01dca41002 153
donatien 0:8e01dca41002 154 #endif /* __LWIP_PBUF_H__ */