Skip to content

Commit a9f907c

Browse files
authored
Merge pull request #1 from fprwi6labs/LwIP_src
LwIP source files
2 parents 214a0e0 + e48fc2c commit a9f907c

File tree

223 files changed

+92858
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

223 files changed

+92858
-0
lines changed

CHANGELOG

+4,130
Large diffs are not rendered by default.

COPYING

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright (c) 2001, 2002 Swedish Institute of Computer Science.
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without modification,
6+
* are permitted provided that the following conditions are met:
7+
*
8+
* 1. Redistributions of source code must retain the above copyright notice,
9+
* this list of conditions and the following disclaimer.
10+
* 2. Redistributions in binary form must reproduce the above copyright notice,
11+
* this list of conditions and the following disclaimer in the documentation
12+
* and/or other materials provided with the distribution.
13+
* 3. The name of the author may not be used to endorse or promote products
14+
* derived from this software without specific prior written permission.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17+
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18+
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
19+
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20+
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
21+
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24+
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
25+
* OF SUCH DAMAGE.
26+
*
27+
* This file is part of the lwIP TCP/IP stack.
28+
*
29+
* Author: Adam Dunkels <[email protected]>
30+
*
31+
*/
32+
33+

FILES

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
src/ - The source code for the lwIP TCP/IP stack.
2+
doc/ - The documentation for lwIP.
3+
test/ - Some code to test whether the sources do what they should.
4+
5+
See also the FILES file in each subdirectory.

README

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
INTRODUCTION
2+
3+
lwIP is a small independent implementation of the TCP/IP protocol
4+
suite that has been developed by Adam Dunkels at the Computer and
5+
Networks Architectures (CNA) lab at the Swedish Institute of Computer
6+
Science (SICS).
7+
8+
The focus of the lwIP TCP/IP implementation is to reduce the RAM usage
9+
while still having a full scale TCP. This making lwIP suitable for use
10+
in embedded systems with tens of kilobytes of free RAM and room for
11+
around 40 kilobytes of code ROM.
12+
13+
14+
FEATURES
15+
16+
* IP (Internet Protocol, IPv4 and IPv6) including packet forwarding over
17+
multiple network interfaces
18+
* ICMP (Internet Control Message Protocol) for network maintenance and debugging
19+
* IGMP (Internet Group Management Protocol) for multicast traffic management
20+
* MLD (Multicast listener discovery for IPv6). Aims to be compliant with
21+
RFC 2710. No support for MLDv2
22+
* ND (Neighbor discovery and stateless address autoconfiguration for IPv6).
23+
Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862
24+
(Address autoconfiguration)
25+
* UDP (User Datagram Protocol) including experimental UDP-lite extensions
26+
* TCP (Transmission Control Protocol) with congestion control, RTT estimation
27+
and fast recovery/fast retransmit
28+
* raw/native API for enhanced performance
29+
* Optional Berkeley-like socket API
30+
* DNS (Domain names resolver)
31+
32+
33+
APPLICATIONS
34+
35+
* HTTP server with SSI and CGI
36+
* SNMPv2c agent with MIB compiler (Simple Network Management Protocol)
37+
* SNTP (Simple network time protocol)
38+
* NetBIOS name service responder
39+
* MDNS (Multicast DNS) responder
40+
* iPerf server implementation
41+
42+
43+
LICENSE
44+
45+
lwIP is freely available under a BSD license.
46+
47+
48+
DEVELOPMENT
49+
50+
lwIP has grown into an excellent TCP/IP stack for embedded devices,
51+
and developers using the stack often submit bug fixes, improvements,
52+
and additions to the stack to further increase its usefulness.
53+
54+
Development of lwIP is hosted on Savannah, a central point for
55+
software development, maintenance and distribution. Everyone can
56+
help improve lwIP by use of Savannah's interface, Git and the
57+
mailing list. A core team of developers will commit changes to the
58+
Git source tree.
59+
60+
The lwIP TCP/IP stack is maintained in the 'lwip' Git module and
61+
contributions (such as platform ports) are in the 'contrib' Git module.
62+
63+
See doc/savannah.txt for details on Git server access for users and
64+
developers.
65+
66+
The current Git trees are web-browsable:
67+
http://git.savannah.gnu.org/cgit/lwip.git
68+
http://git.savannah.gnu.org/cgit/lwip/lwip-contrib.git
69+
70+
Submit patches and bugs via the lwIP project page:
71+
http://savannah.nongnu.org/projects/lwip/
72+
73+
Continuous integration builds (GCC, clang):
74+
https://travis-ci.org/yarrick/lwip-merged
75+
76+
77+
DOCUMENTATION
78+
79+
Self documentation of the source code is regularly extracted from the current
80+
Git sources and is available from this web page:
81+
http://www.nongnu.org/lwip/
82+
83+
There is now a constantly growing wiki about lwIP at
84+
http://lwip.wikia.com/wiki/LwIP_Wiki
85+
86+
Also, there are mailing lists you can subscribe at
87+
http://savannah.nongnu.org/mail/?group=lwip
88+
plus searchable archives:
89+
http://lists.nongnu.org/archive/html/lwip-users/
90+
http://lists.nongnu.org/archive/html/lwip-devel/
91+
92+
lwIP was originally written by Adam Dunkels:
93+
http://dunkels.com/adam/
94+
95+
Reading Adam's papers, the files in docs/, browsing the source code
96+
documentation and browsing the mailing list archives is a good way to
97+
become familiar with the design of lwIP.
98+
99+
Adam Dunkels <[email protected]>
100+
Leon Woestenberg <[email protected]>

UPGRADING

+228
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
This file lists major changes between release versions that require
2+
ports or applications to be changed. Use it to update a port or an
3+
application written for an older version of lwIP to correctly work
4+
with newer versions.
5+
6+
7+
(git master)
8+
9+
* [Enter new changes just after this line - do not remove this line]
10+
11+
* TODO
12+
13+
(2.0.0)
14+
15+
++ Application changes:
16+
17+
* Changed netif "up" flag handling to be an administrative flag (as opposed to the previous meaning of
18+
"ip4-address-valid", a netif will now not be used for transmission if not up) -> even a DHCP netif
19+
has to be set "up" before starting the DHCP client
20+
* Added IPv6 support (dual-stack or IPv4/IPv6 only)
21+
* Changed ip_addr_t to be a union in dual-stack mode (use ip4_addr_t where referring to IPv4 only).
22+
* Major rewrite of SNMP (added MIB parser that creates code stubs for custom MIBs);
23+
supports SNMPv2c (experimental v3 support)
24+
* Moved some core applications from contrib repository to src/apps (and include/lwip/apps)
25+
26+
+++ Raw API:
27+
* Changed TCP listen backlog: removed tcp_accepted(), added the function pair tcp_backlog_delayed()/
28+
tcp_backlog_accepted() to explicitly delay backlog handling on a connection pcb
29+
30+
+++ Socket API:
31+
* Added an implementation for posix sendmsg()
32+
* Added LWIP_FIONREAD_LINUXMODE that makes ioctl/FIONREAD return the size of the next pending datagram
33+
34+
++ Port changes
35+
36+
+++ new files:
37+
* MANY new and moved files!
38+
* Added src/Filelists.mk for use in Makefile projects
39+
* Continued moving stack-internal parts from abc.h to abc_priv.h in sub-folder "priv"
40+
to let abc.h only contain the actual application programmer's API
41+
42+
+++ sys layer:
43+
* Made LWIP_TCPIP_CORE_LOCKING==1 the default as it usually performs better than
44+
the traditional message passing (although with LWIP_COMPAT_MUTEX you are still
45+
open to priority inversion, so this is not recommended any more)
46+
* Added LWIP_NETCONN_SEM_PER_THREAD to use one "op_completed" semaphore per thread
47+
instead of using one per netconn (these semaphores are used even with core locking
48+
enabled as some longer lasting functions like big writes still need to delay)
49+
* Added generalized abstraction for itoa(), strnicmp(), stricmp() and strnstr()
50+
in def.h (to be overridden in cc.h) instead of config
51+
options for netbiosns, httpd, dns, etc. ...
52+
* New abstraction for hton* and ntoh* functions in def.h.
53+
To override them, use the following in cc.h:
54+
#define lwip_htons(x) <your_htons>
55+
#define lwip_htonl(x) <your_htonl>
56+
57+
+++ new options:
58+
* TODO
59+
60+
+++ new pools:
61+
* Added LWIP_MEMPOOL_* (declare/init/alloc/free) to declare private memp pools
62+
that share memp.c code but do not have to be made global via lwippools.h
63+
* Added pools for IPv6, MPU_COMPATIBLE, dns-api, netif-api, etc.
64+
* added hook LWIP_HOOK_MEMP_AVAILABLE() to get informed when a memp pool was empty and an item
65+
is now available
66+
67+
* Signature of LWIP_HOOK_VLAN_SET macro was changed
68+
69+
* LWIP_DECLARE_MEMORY_ALIGNED() may be used to declare aligned memory buffers (mem/memp)
70+
or to move buffers to dedicated memory using compiler attributes
71+
72+
* Standard C headers are used to define sized types and printf formatters
73+
(disable by setting LWIP_NO_STDINT_H=1 or LWIP_NO_INTTYPES_H=1 if your compiler
74+
does not support these)
75+
76+
77+
++ Major bugfixes/improvements
78+
79+
* Added IPv6 support (dual-stack or IPv4/IPv6 only)
80+
* Major rewrite of PPP (incl. keep-up with apache pppd)
81+
see doc/ppp.txt for an upgrading how-to
82+
* Major rewrite of SNMP (incl. MIB parser)
83+
* Fixed timing issues that might have lead to losing a DHCP lease
84+
* Made rx processing path more robust against crafted errors
85+
* TCP window scaling support
86+
* modification of api modules to support FreeRTOS-MPU (don't pass stack-pointers to other threads)
87+
* made DNS client more robust
88+
* support PBUF_REF for RX packets
89+
* LWIP_NETCONN_FULLDUPLEX allows netconn/sockets to be used for reading/writing from separate
90+
threads each (needs LWIP_NETCONN_SEM_PER_THREAD)
91+
* Moved and reordered stats (mainly memp/mib2)
92+
93+
(1.4.0)
94+
95+
++ Application changes:
96+
97+
* Replaced struct ip_addr by typedef ip_addr_t (struct ip_addr is kept for
98+
compatibility to old applications, but will be removed in the future).
99+
100+
* Renamed mem_realloc() to mem_trim() to prevent confusion with realloc()
101+
102+
+++ Raw API:
103+
* Changed the semantics of tcp_close() (since it was rather a
104+
shutdown before): Now the application does *NOT* get any calls to the recv
105+
callback (aside from NULL/closed) after calling tcp_close()
106+
107+
* When calling tcp_abort() from a raw API TCP callback function,
108+
make sure you return ERR_ABRT to prevent accessing unallocated memory.
109+
(ERR_ABRT now means the applicaiton has called tcp_abort!)
110+
111+
+++ Netconn API:
112+
* Changed netconn_receive() and netconn_accept() to return
113+
err_t, not a pointer to new data/netconn.
114+
115+
+++ Socket API:
116+
* LWIP_SO_RCVTIMEO: when accept() or recv() time out, they
117+
now set errno to EWOULDBLOCK/EAGAIN, not ETIMEDOUT.
118+
119+
* Added a minimal version of posix fctl() to have a
120+
standardised way to set O_NONBLOCK for nonblocking sockets.
121+
122+
+++ all APIs:
123+
* correctly implemented SO(F)_REUSEADDR
124+
125+
++ Port changes
126+
127+
+++ new files:
128+
129+
* Added 4 new files: def.c, timers.c, timers.h, tcp_impl.h:
130+
131+
* Moved stack-internal parts of tcp.h to tcp_impl.h, tcp.h now only contains
132+
the actual application programmer's API
133+
134+
* Separated timer implementation from sys.h/.c, moved to timers.h/.c;
135+
Added timer implementation for NO_SYS==1, set NO_SYS_NO_TIMERS==1 if you
136+
still want to use your own timer implementation for NO_SYS==0 (as before).
137+
138+
+++ sys layer:
139+
140+
* Converted mbox- and semaphore-functions to take pointers to sys_mbox_t/
141+
sys_sem_t;
142+
143+
* Converted sys_mbox_new/sys_sem_new to take pointers and return err_t;
144+
145+
* Added Mutex concept in sys_arch (define LWIP_COMPAT_MUTEX to let sys.h use
146+
binary semaphores instead of mutexes - as before)
147+
148+
+++ new options:
149+
150+
* Don't waste memory when chaining segments, added option TCP_OVERSIZE to
151+
prevent creating many small pbufs when calling tcp_write with many small
152+
blocks of data. Instead, pbufs are allocated larger than needed and the
153+
space is used for later calls to tcp_write.
154+
155+
* Added LWIP_NETIF_TX_SINGLE_PBUF to always copy to try to create single pbufs
156+
in tcp_write/udp_send.
157+
158+
* Added an additional option LWIP_ETHERNET to support ethernet without ARP
159+
(necessary for pure PPPoE)
160+
161+
* Add MEMP_SEPARATE_POOLS to place memory pools in separate arrays. This may
162+
be used to place these pools into user-defined memory by using external
163+
declaration.
164+
165+
* Added TCP_SNDQUEUELOWAT corresponding to TCP_SNDLOWAT
166+
167+
+++ new pools:
168+
169+
* Netdb uses a memp pool for allocating memory when getaddrinfo() is called,
170+
so MEMP_NUM_NETDB has to be set accordingly.
171+
172+
* DNS_LOCAL_HOSTLIST_IS_DYNAMIC uses a memp pool instead of the heap, so
173+
MEMP_NUM_LOCALHOSTLIST has to be set accordingly.
174+
175+
* Snmp-agent uses a memp pools instead of the heap, so MEMP_NUM_SNMP_* have
176+
to be set accordingly.
177+
178+
* PPPoE uses a MEMP pool instead of the heap, so MEMP_NUM_PPPOE_INTERFACES
179+
has to be set accordingly
180+
181+
* Integrated loopif into netif.c - loopif does not have to be created by the
182+
port any more, just define LWIP_HAVE_LOOPIF to 1.
183+
184+
* Added define LWIP_RAND() for lwip-wide randomization (needs to be defined
185+
in cc.h, e.g. used by igmp)
186+
187+
* Added printf-formatter X8_F to printf u8_t as hex
188+
189+
* The heap now may be moved to user-defined memory by defining
190+
LWIP_RAM_HEAP_POINTER as a void pointer to that memory's address
191+
192+
* added autoip_set_struct() and dhcp_set_struct() to let autoip and dhcp work
193+
with user-allocated structs instead of calling mem_malloc
194+
195+
* Added const char* name to mem- and memp-stats for easier debugging.
196+
197+
* Calculate the TCP/UDP checksum while copying to only fetch data once:
198+
Define LWIP_CHKSUM_COPY to a memcpy-like function that returns the checksum
199+
200+
* Added SO_REUSE_RXTOALL to pass received UDP broadcast/multicast packets to
201+
more than one pcb.
202+
203+
* Changed the semantics of ARP_QUEUEING==0: ARP_QUEUEING now cannot be turned
204+
off any more, if this is set to 0, only one packet (the most recent one) is
205+
queued (like demanded by RFC 1122).
206+
207+
208+
++ Major bugfixes/improvements
209+
210+
* Implemented tcp_shutdown() to only shut down one end of a connection
211+
* Implemented shutdown() at socket- and netconn-level
212+
* Added errorset support to select() + improved select speed overhead
213+
* Merged pppd to v2.3.11 (including some backported bugfixes from 2.4.x)
214+
* Added timer implementation for NO_SYS==1 (may be disabled with NO_SYS_NO_TIMERS==1
215+
* Use macros defined in ip_addr.h to work with IP addresses
216+
* Implemented many nonblocking socket/netconn functions
217+
* Fixed ARP input processing: only add a new entry if a request was directed as us
218+
* mem_realloc() to mem_trim() to prevent confusion with realloc()
219+
* Some improvements for AutoIP (don't route/forward link-local addresses, don't break
220+
existing connections when assigning a routable address)
221+
* Correctly handle remote side overrunning our rcv_wnd in ooseq case
222+
* Removed packing from ip_addr_t, the packed version is now only used in protocol headers
223+
* Corrected PBUF_POOL_BUFSIZE for ports where ETH_PAD_SIZE > 0
224+
* Added support for static ARP table entries
225+
226+
(STABLE-1.3.2)
227+
228+
* initial version of this file

library.properties

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
name=LwIP
2+
version=2.0.0
3+
author=Adam Dunkels <[email protected]>
4+
maintainer=See url
5+
sentence=A Lightweight TCP/IP stack
6+
paragraph=lwIP is a small independent implementation of the TCP/IP protocol suite that has been developed by Adam Dunkels at the Computer and Networks Architectures (CNA) lab at the Swedish Institute of Computer Science (SICS). The focus of the lwIP TCP/IP implementation is to reduce the RAM usage while still having a full scale TCP. This making lwIP suitable for use in embedded systems with tens of kilobytes of free RAM and room for around 40 kilobytes of code ROM.
7+
category=Communication
8+
url=http://git.savannah.gnu.org/cgit/lwip.git
9+
architectures=stm32

src/FILES

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
api/ - The code for the high-level wrapper API. Not needed if
2+
you use the lowel-level call-back/raw API.
3+
4+
apps/ - Higher layer applications that are specifically programmed
5+
with the lwIP low-level raw API.
6+
7+
core/ - The core of the TPC/IP stack; protocol implementations,
8+
memory and buffer management, and the low-level raw API.
9+
10+
include/ - lwIP include files.
11+
12+
netif/ - Generic network interface device drivers are kept here.
13+
14+
For more information on the various subdirectories, check the FILES
15+
file in each directory.

0 commit comments

Comments
 (0)