正点原子lwIP学习笔记——lwIP网络接口管理

1.lwIP网络接口简介

lwIP协议栈支持多种不同的网络接口(网卡),由于网卡是直接和硬件平台打交道,硬件不同则处理也是不同的,所以由用户提供最底层的接口函数lwIP提供统一的接口,但是底层的实现需要用户自己去完成(ethernetif.c)

一个系统中可能有多个网络接口,有可能是以太网,有可能是WIFI,也有可能是其他的网络接口,在lwIP中每一个网卡都由一个netif结构体来表示,这些结构体描述了各个网卡的底层实现函数及状态,并以链表形式链接起来

网络接口配置
netif屏蔽了硬件接口的差异,完成了对不同网络接口的抽象!

lwIP网络接口的结构示意图

2.lwIP的netif结构

netif.h中的结构体
input根据需求,可以选择为ethernet_input,也可以选择为ip4_input;output就是low_level_output;linkoutput是回调函数,就是检查一下网线有没有插好这一类的;mtu,最大就是1500,网络层的数据包超过了就要切片。

这些成员变量都是根据相关网卡的特性,来填写的;网卡不同就会不同。

3.lwIP的netif相关函数

netif重要函数
可以在netif.c/.h文件中进行查看。

lwIP网络接口的全局变量

网卡的全局变量
全局变量struct netif* netif_list就会指向链表的表头
全局变量struct netif *netif_default指向的netif结构所表示的网卡为缺省网卡;在发送消息的时候,会首先会通过这个网卡,若是没有回应,再使用其他网卡。

netif_add()

netif添加示意图
该函数首先会添加网卡的IP地址、子网掩码以及网关地址,并声明网卡状态,初始化以及输入;如果Ip地址、子网掩码、网关是空,那就是用默认的参数,并将这些参数清零;然后将output设置为netif_null_output_ip4,这个函数由用户定义,其实output是在ethernetif.c中定义,会把etharp_output赋值非netif->output,在经过网络层的时候会对数据包分析,判断是否包含MAC地址,如果没有就会暂存然后广播ARP;

然后设置mtu和flags等于0;然后设置input函数为ethernet_input(FreeRTOS版本就是tcpip_input);然后设置IP地址、子网掩码和网关;

定义一个netif2,然后就是单链表的添加操作,注意添加第一个链表以及最后一个链表的操作和判断(最多255个)。

netif_remove()

这个函数就是一个单链表的移除操作,操作一下next指针就可以了。

netif_set_default()

设置默认网卡
就是把netif_default的指针指向要设置的netif就可以了。

总结

这一小节挺轻松的,搞清楚硬件对应的IP地址、子网掩码、网关,然后设置一下各种结构体的状态就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值