lwIP源码解析—httpd(一)
目录
一、lwIP版本
二、网卡netif初始化
三、httpd初始化流程
3.1 初始化入口
四、处理客户端连接
学习参考:[野火]《LwIP应用开发实战指南》、lwIP官方说明手册:http://www.nongnu.org/lwip/2_1_x/index.html
一、lwIP版本
此处使用lwip 2.1.2版本以及contrib 2.1.0版本(其中contrib源代码example中httpd展示了如何完整移植http的框架,需要移植一并使用才能构成完整的http应用)。
二、网卡netif初始化
lwIP使用netif作为抽象出的网卡结构体,用于联系底层硬件驱动和lwIP软件的桥梁,是一个重要的结构,定义在lwip-2.1.2\lwip-2.1.2\src\core\netif.c。
该网卡结构体中有IP地址,掩码,网关,MAC地址等网卡具备的信息,以及初始化,输入输出等回调函数。
初始化接口:
struct netif *
netif_add(struct netif *netif,
#if LWIP_IPV4
const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw,
#endif /* LWIP_IPV4 */
void *state, netif_init_fn init, netif_input_fn input)
调用此函数之后,便用lwIP协议栈创建出了一个网卡。其中按照contrib开发框架,init默认注册ethernetif_init, input默认注册ethernetif_input。作为网卡层的函数。这两个以太网层的接口,需要移植者根据不同网卡的方式进行实现。output函数则默认使用下列三个函数:
#if LWIP_IPV4
netif