lwip

lwip简介

lwip是一个小型的开源的TCP/IP协议栈,它提供了TCP/IP协议栈的核心功能,如网络接口、ARP/IP地址解析、ICMP/IGMP/UDP/TCP协议、DHCP/DNS服务等等。lwIP还支持多线程、多任务、内存管理、网络接口管理等高级特性。

lwIP的特点:轻量、高效性、可移植性。

lwip源码分析

pbuf

包缓冲区,用于存储网络数据包。

类型说明适用场景
PBUF_RAM动态分配内存,payload指向分配的连续数据内存数据被存储在连续的ram缓存区,需要动态分配的数据包,如发送数据包
PBUF_ROM无需分配内存,paylaod指向rom数据数据只读
PBUF_REF无需分配内存,payload指向其他pbuf数据引用其他pbuf数据,如链路层协议处理
PBUF_POOL内存池,用于分配和释放pbuf网络设备驱动层:高效内存管理,减小内存分配的开销,提高效率。但需预先分配内存池。如接收
常用接口说明
pbuf_alloc分配pbuf
pbuf_realloc重新分配pbuf大小
pbuf_free释放pbuf,先减小引用计数,后回收
pbuf_ref引用pbuf,增加引用计数
pbuf_header调整payload指针长度和大小,以便为pbuf数据预置包头
pbuf_chain连接pbuf链表
pbuf_dechain拆分pbuf链表

netif

网络接口,用于管理网络设备。

类型说明
ipaddr网络接口ip地址
netmask网络掩码
gw网关地址
state网络接口状态
input接收数据包回调函数,需实现low_level_input
output发送数据包回调函数,由IP层调用。以太网的话可配置成etharp_output
linkoutput发送数据包回调函数,由ARP调用,需要自己实现low_level_output