一篇带给你Lwip网口接口netif
01网络接口简介
TCP/IP参考模型中网络分为4层:应用层、传输层、网络层和网络接口层。网络接口层就对应着我们实际的网卡,LWIP支持多网口设计,LWIP中使用netif来描述每种网络接口的特性,如接口的IP地址、接口状态等等。那么如果有多个网卡的话LWIP是如何来组织这些网卡呢?在LWIP中用链表netif_list来管理众多的网卡,当上层有数据要发送的时候LWIP会从netif_list链表中选择一个合适的网卡来将数据发送出去。
02netif结构
netif结构体在文件netif.h中有定义,netif结构体中每个成员变量的含义如下:
next:该字段指向下一个neitif类型的结构体,因为LWIP可以支持多个网络接口,当设备有多个网络接口的话LWIP就会把所有的netif结构体组成链表来管理这些网络接口。
ipaddr,netmask和gw:分别为网络接口的IP地址、子网掩码和默认网关。
input:此字段为一个函数,这个函数将网卡接收到的数据交给IP层。
output:此字段为一个函数,当IP层向接口发送一个数据包时调用此函数。这个函数通常首先解析硬件地址,然后发送数据包。此字段我们一般使用etharp.c中的etharp_output()函数。
linkoutput:此字段为一个函数,该函数被ARP模块调用,完成网络数据的发送。上面说的etharp_output函数将IP数据包封装成以太网数据帧以后就会调用linkoutput函数将数据发送出去。
state:用来定义一些关于接口的信息,用户可以自行设置。
mtu:网络接口所能传输的最大数据长度,一般设置为1500。
hwaddr_len:网卡MAC地址长度,6个字节。
hwaddr:MAC地址。
flags:网络的接口状态,属性信息字段。
name:网卡的名字。
num:此字段为协议栈为每个网络接口设置的一个编号,编号从0开始。
flags的取值:
其中
在网络初始化中,在ethernetif.c中
他们对应的都是一个函数
etharp_output:ip层发送数据包函数
low_level_output :ARP模块发送函数,更底层的函数,其实etharp_output还是调用此函数
03相关函数
3.1、netif_add
- netif_add(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask, ip_addr_t
- *gw, void *state, netif_init_fn init, netif_input_fn input)
就是把netif网络接口添加到网络list队列中,向网卡列表中添加一个网卡
3.2、netif_set_default
- netif_set_default(struct netif *netif)
将这个网卡设置为默认网卡
3.3、netif_set_up
- netif_set_up(struct netif *netif)
打开网卡
相关文章
- 洛谷P1028.数的计算(动态规划)
- MySQL中的函数使用
- 研究发现许多iOS加密措施实际上未被使用
- css box-sizing属性是什么
- 2020年UI发展趋势:以声明式UI统治一切
- 怕泄露隐私?用这个方法 你的旧手机可以放心送去回收
- css中padding如何计算
- 从安卓设备转移数据到iOS的几种方法,掌握一种你就可以换机无忧
- 一看就懂!15个交互与UI必懂的技术用语
- 全国通用!工信部:“通信大数据行程卡”小程序微信上线
- 搜狗地图上线手机AR实景高精导航:实时车距计算、碰撞预警
- 谁来保护人脸识别的安全?
- 支付宝历年双十一背后的技术揭秘
- 关于MVC/MVP/MVVM的一些错误认识
- Android 10 Go版将推出,针对内存不足1.5GB手机
- 全球首款碳纳米管通用计算芯片问世!Nature连发三文推荐
- 小米OV成立互传联盟,手机文件数据可跨品牌传输
- 谷歌设计团队发布了一款动效神器,让 UI 和动效无缝打通
- iOS开发一定要尝试的 Texture(ASDK)
- css权重的计算规则