lwIP入门 - 初始化与启动流程
lwIP入门 - 初始化与启动流程
1. 初始化

系统初始化
c// 初始化内存池和堆内存 lwip_init(); // → mem_init() // 内存堆初始化 // → memp_init() // 内存池初始化 // → pbuf_init() // → netif_init() // 网络接口初始化 // → ip_init() // IP协议初始化 // → etharp_init() // ARP协议初始化 // → udp_init() // UDP初始化 // → tcp_init() // TCP初始化 // → 其他协议初始化网络接口的添加与配置
c// 配置ip地址, 使用静态地址或者DHCP #if USE_DHCP ip_addr_set_zero(&ipaddr); ip_addr_set_zero(&netmask); ip_addr_set_zero(&gw); #else IP4_ADDR(&ipaddr, 192, 168, 1, 100); IP4_ADDR(&netmask, 255, 255, 255, 0); IP4_ADDR(&gw, 192, 168, 1, 1); #endif // @brief 添加网络接口 // @param netif: 网络接口 // @param ip_addr: IP地址 // @param netmask: 子网掩码 // @param gateway: 网关 // @param ethernetif_init 硬件初始化 // @param ethernet_input 网络输入 netif_add(netif, ip_addr, netmask, gateway, NULL, ðernetif_init, ðernet_input); // 设置默认网络接口 netif_set_default(netif); // 设置网络接口为UP状态 netif_set_up(netif); // 启动DHCP或者其他的一些服务 #if USE_DHCP dhcp_start(netif); #endif回调函数注册
c// 注册回调函数 netif_set_link_callback(netif, callback); netif_set_status_callback(netif, callback);
2. 网络接口结构netif
每一个netif结构体是对一个网卡进行抽象,包含了该网卡的收发函数、状态等信息。
c
struct netif {
struct netif *next; // 指向下一个netif结构的指针
ip_addr_t ip_addr; // IP地址
ip_addr_t netmask; // 子网掩码
ip_addr_t gw; // 网关地址
netif_input_fn input; // 向IP层输入数据包
netif_output_fn output; // 发送IP包
netif_linkoutput_fn linkoutput; // 实现底层数据包发送
void *state; // 用户可以自由设置,例如用于指向一些底层设备相关的信息
void* client_data[LWIP_NETIF_CLIENT_DATA_INDEX_MAX +
LWIP_NUM_NETIF_CLIENT_DATA]; // 客户端数据
u16_t mtu; // 该接口允许的最大数据包长度
u8_t hwaddr_len; // 该接口物理地址长度
u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; // 该接口的物理地址
u8_t flags; // 该接口的状态、属性字段
char name[2]; // 该接口的名字
u8_t num; // 接口的编号
u8_t rs_count; // 需要发送的路由器请求消息的数量
};lwIP入门 - 初始化与启动流程
https://simonkimi.githubio.io/2025/12/22/lwIP入门-初始化与启动流程/