lwIP - lightweight TCP/IP
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 resource 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.
- 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
Getting started
If you are new to lwIP, we recommend that you read one of the following manuals:
- Application Developers Manual, if you are new to lwIP or are trying to build an application on top of an already installed lwIP installation
- Platform Developers Manual, if you are trying to make lwIP work on your platform, with your OS, and your device driver
- lwIP Developers Manual, if you would like to delve into the innards of lwIP
The following links may also be useful:
- The lwIP Savannah site, and the following subpages:
- Adam Dunkel's site about lwIP
- "Design and Implementation of the lwIP TCP/IP Stack" (obsolete, but good start point)
Further reading
- Frequently Asked Questions
- Application notes - a miscellaneous collection of notes, thoughts, and questions deemed valuable
- Release notes - upgrade notes, feature changes or removals, etc.
- Project roadmap - ideas for the future of lwIP
- Projects that use lwIP - applications and projects that use lwIP
lwIP Application Developers Manual
- Audience
- Introduction to lwIP
- Protocols
- Application API layers
- lwIP with or without an operating system
- lwIP and multithreading
- lwIP IPv4/IPv6 stacks
- Initializing lwIP
- Configuring lwIP
- Reporting bugs
- Further lwIP support
lwIP Platform Developers Manual
- Audience
- Getting the code
- Creating a platform
- Porting for an OS (sys_arch.c/h, cc.h)
- Writing a device driver (netif,ethernetif...)
- Debugging lwIP
lwIP Developers Manual
- Audience
- Contributing to lwIP
- lwIP modules (files, directories...)
- lwIP functions documentation (PDF file)
- lwIP functions documentation (HTML)
- Architectural flow charts
- Architectural Rx flow (PDF file)
- Debugging lwIP