lwip
lwip协议栈内存管理
pbuf 结构体:
1 | struct pbuf { |
- next:链表
- payload: 存放网络数据包的
- len:可变空间大小
- tot_len:整个链表下一个节点之后的总长度大小
- type:4种pbuf类型
- ref:引用标志
pbuf_ram:
- payload:指向一片可变空间
pbuf_rom/ref:
- payload :指向非易失的内存空间
pbuf_poll
- 指向ram中长度固定的内存
pbuf层:
- transport:传输层 tcp
- ip:网络层
- link:数据链路层
- raw_tx:发送层
网卡设计与实现
netif:
flag :
- NETIF_FLAGH_UP:LWIP可以正常使用
- NETIF_FLAG_BROADCAST:广播通信标志
- NETIF_FLAG_LINK_IP:MAC和PHY可以正常使用
- NETIF_FLAG_ETHARP:ARP标志
- NETIF_FLAG_ETHERNET:tcp/ip协议正常
netif结构体:
- next:链表
- netif_input_fn:网卡输入数据包接口函数
- netif_output_fn:数据包输出接口函数
- netif_linkoutput_fn:链路层输出接口
- states:当前netif状态,也就是falg
- mtu:数据链路层最大传输单元
- hwaddr_len:mac地址长度
- flag:上面的flag
- name:网卡驱动名称
- num:硬件编号
api:
1 | struct netif *netif_add(struct netif *netif, |
底层相关接口:
ethernetif_init:初始化网卡驱动(调用底层驱动)
ethernetif_input:(网卡数据输入)
low_level_init:网卡底层驱动,主要针对硬件
low_level_input:接收到网卡数据后会通过此函数封装为pbuf提供上层使用
low_level_output:
1 | ~~~ |
lwip tcp/ip设计原理
sys_timeo结构体:
1 | /** Function prototype for a timeout callback function. Register such a function |
超时处理
1 | /** |
tcpip_msg:消息类型:
1 | enum tcpip_msg_type { |
msg结构体:
1 | struct tcpip_msg { |
tcipip_thread
1 | static void |
tcpip_input
1 | /** |