1 Lwip以太网卡接口netif模块介绍
Lwip使用netif结构体实现物理网卡与软件协议栈之间的软件接口,Lwip中一个netif实例对应一个IP地址。
下图是netif结构体部分成员变量,其中next用于实现多个netif链,ip_addr、netmask、gw实现IP地址绑定。
2 Lwip实现多IP地址方法模块
本模块介绍如何在一个物理网卡上实现多个IP地址功能。
(1)物理网卡结构体添加netif[NUM]数组,其中NUM表示要绑定的IP地址个数。
(2)在lwip_stack_init协议栈初始化函数中,依据想要添加的个数,依次调用函数netif_add、netif_set_up、netif_set_link_up函数将多个netif绑定到对应的物理网卡上,并且将同一个物理网卡上的多个netif形成netif链。最后调用函数netif_set_default设置当前物理网卡的默认netif接口,此接口用于找不到路由时默认调用。
(3)修改low_level_init函数,保证每个物理网卡仅被初始化一次
(4)
lwipopt.h中使能LWIP_ARP_FILTER_NETIF及LWIP_ARP_FILTER_NETIF_FN函数,并实现函数lwip_arp_filter_netif用于网卡接收过滤查找到对应IP地址的netif接口
(5)修改ethernet_input底层网卡接收函数,添加红框圈中代码,防止网络中arp报文找不到对应的netif接口,返回NULL导致网卡接收失败