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 |