mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-01-07 12:55:57 +00:00
lwIP mirror from http://git.savannah.gnu.org/cgit/lwip.git
7fe7e1e984
Based from pppd 2.4.5, released 2009-11-17, with huge changes to match code size and memory requirements for embedded devices, including: - Gluing together the previous low-level PPP code in lwIP to pppd 2.4.5, which is more or less what pppd sys-* files are, so that we get something working using the unix port. - Merged some patchs from lwIP Git repository which add interesting features or fix bugs. - Merged some patchs from Debian pppd package which add interesting features or fix bugs. - Ported PPP timeout handling to the lwIP timers system - Disabled all the PPP code using filesystem access, replaced in necessary cases to configuration variables. - Disabled all the PPP code forking processes. - Removed IPX support, lwIP does not support IPX. - Ported and improved random module from the previous PPP port. - Removed samba TDB (file-driven database) usage, because it needs a filesystem. - MS-CHAP required a DES implementation, we added the latest PolarSSL DES implementation which is under a BSD-ish license. - Also switched to PolarSSL MD4,MD5,SHA1 implementations, which are meant to be used in embedded devices with reduced memory footprint. - Removed PPP configuration file parsing support. - Added macro definition EAP_SUPPORT to make EAP support optional. - Added macro definition CHAP_SUPPORT to make CHAP support optional. - Added macro definition MSCHAP_SUPPORT to make MSCHAP support optional. - Added macro definition PAP_SUPPORT to make PAP support optional. - Cleared all Linux syscall calls. - Disabled demand support using a macro, so that it can be ported later. - Disabled ECP support using a macro, so that it can be ported later. - Disabled CCP support using a macro, so that it can be ported later. - Disabled CBCP support using a macro, so that it can be ported later. - Disabled LQR support using a macro, so that it can be ported later. - Print packet debug feature optional, through PRINTPKT_SUPPORT - Removed POSIX signal usage. - Fully ported PPPoS code from the previous port. - Fully ported PPPoE code from the previous port. - Fully ported VJ compression protocol code from the previous port. - Removed all malloc()/free() use from PPP, replaced by stack usage or PBUF. - Disabled PPP server support using a macro, so that it can be ported later. - Switched all PPP debug to lwIP debug system. - Created PPP Control Block (PPP PCB), removed PPP unit integer everywhere, removed all global variables everywhere, did everything necessary for the PPP stack to support more than one PPP session (pppd only support one session per process). - Removed the statically allocated output buffer, now using PBUF. - Improved structure size of all PPP modules, deep analyze of code to reduce variables size to the bare minimum. Switched all boolean type (char type in most architecture) to compiler generated bitfields. - Added PPP IPv6 support, glued lwIP IPv6 support to PPP. - Now using a persistent netif interface which can then be used in lwIP functions requiring a netif. - Now initializing PPP in lwip_init() function. - Reworked completely the PPP state machine, so that we don't end up in anymore in inconsistent state, especially with PPPoE. - Improved the way we handle PPP reconnection after disconnect, cleaning everything required so that we start the PPP connection again from a clean state. - Added PPP holdoff support, allow the lwIP user to wait a little bit before reconnecting, prevents connection flood, especially when using PPPoL2TP. - Added PPPoL2TP LAC support (a.k.a. UDP tunnels), adding a VPN client feature to lwIP, L2TP being a widely used tunnel protocol. - Switched all used PPP types to lwIP types (u8t, u16t, u32t, ...) - Added PPP API "sequential" thread-safe API, based from NETIFAPI. |
||
---|---|---|
doc | ||
src | ||
test/unit | ||
.gitattributes | ||
CHANGELOG | ||
COPYING | ||
FILES | ||
README | ||
UPGRADING |
INTRODUCTION 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. FEATURES * IP (Internet Protocol) including packet forwarding over multiple network interfaces * ICMP (Internet Control Message Protocol) for network maintenance and debugging * IGMP (Internet Group Management Protocol) for multicast traffic management * UDP (User Datagram Protocol) including experimental UDP-lite extensions * TCP (Transmission Control Protocol) with congestion control, RTT estimation and fast recovery/fast retransmit * Specialized raw/native API for enhanced performance * Optional Berkeley-like socket API * DNS (Domain names resolver) * SNMP (Simple Network Management Protocol) * DHCP (Dynamic Host Configuration Protocol) * AUTOIP (for IPv4, conform with RFC 3927) * PPP (Point-to-Point Protocol) * ARP (Address Resolution Protocol) for Ethernet LICENSE lwIP is freely available under a BSD license. DEVELOPMENT lwIP has grown into an excellent TCP/IP stack for embedded devices, and developers using the stack often submit bug fixes, improvements, and additions to the stack to further increase its usefulness. Development of lwIP is hosted on Savannah, a central point for software development, maintenance and distribution. Everyone can help improve lwIP by use of Savannah's interface, CVS and the mailing list. A core team of developers will commit changes to the CVS source tree. The lwIP TCP/IP stack is maintained in the 'lwip' CVS module and contributions (such as platform ports) are in the 'contrib' module. See doc/savannah.txt for details on CVS server access for users and developers. Last night's CVS tar ball can be downloaded from: http://savannah.gnu.org/cvs.backups/lwip.tar.gz [CHANGED - NEEDS FIXING] The current CVS trees are web-browsable: http://savannah.nongnu.org/cgi-bin/viewcvs/lwip/lwip/ http://savannah.nongnu.org/cgi-bin/viewcvs/lwip/contrib/ Submit patches and bugs via the lwIP project page: http://savannah.nongnu.org/projects/lwip/ DOCUMENTATION The original out-dated homepage of lwIP and Adam Dunkels' papers on lwIP are at the official lwIP home page: http://www.sics.se/~adam/lwip/ Self documentation of the source code is regularly extracted from the current CVS sources and is available from this web page: http://www.nongnu.org/lwip/ There is now a constantly growin wiki about lwIP at http://lwip.wikia.com/wiki/LwIP_Wiki Also, there are mailing lists you can subscribe at http://savannah.nongnu.org/mail/?group=lwip plus searchable archives: http://lists.nongnu.org/archive/html/lwip-users/ http://lists.nongnu.org/archive/html/lwip-devel/ Reading Adam's papers, the files in docs/, browsing the source code documentation and browsing the mailing list archives is a good way to become familiar with the design of lwIP. Adam Dunkels <adam@sics.se> Leon Woestenberg <leon.woestenberg@gmx.net>