目录
- 一、lwIP网络接口简介
- 二、lwIP的netif结构
- 三、lwIP的netif相关函数
- 1. lwIP网络接口的全局变量
- 2. netif_add()函数
- 3. netif_remove()函数
- 4. netif_set_default()函数
一、lwIP网络接口简介
lwIP协议栈支持多种不同的网络接口(网卡),由于网卡是直接和硬件平台打交道,硬件不同则处理也是不同的,所以由用户提供最底层的接口函数,lwIP提供统一的接口,但是底层的实现需要用户自己去完成(ethernetif.c)
一个系统中可能有多个网络接口,有可能是以太网,有可能是WIFI,也有可能是其他的网络接口,在lwIP中每一个网卡都由一个netif结构体来表示,这些结构体描述了各个网卡的底层实现函数及状态,并以链表形式链接起来。
二、lwIP的netif结构
/* netif.h */
struct netif {
struct netif *next; /* 指向下一个节点的指针 */
ip_addr_t ip_addr; /* 设置网卡的IP地址、子网页码及网关地址 */
ip_addr_t netmask;
ip_addr_t gw;
netif_input_fn input; /* 指向数据包输入函数 */
netif_output_fn output; /* 指向数据包待发送函数 ----检测目标IP地址的MAC地址等操作 */
netif_linkoutput_fn linkoutput; /* 指向数据包输出函数 */
netif_status_callback_fn link_callback; /* 链接状态回调函数 */
void *state; /* 虚拟网卡状态 */
u16_t mtu; /* 最大传输单元 */
u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; /* 网卡的MAC地址 */
u8_t hwaddr_len; /* MAC地址长度 */
u8_t flags; /* 虚拟网卡的标志符 */
char name[2]; /* 网卡的名称 */
/*................*/
};
三、lwIP的netif相关函数
1. lwIP网络接口的全局变量
全局变量struct netif *netif_list指向该链表表头