freertos 学习5--链路状态设置
以下三个函数都是针对网卡netif的操作。
1 netif_set_up函数(netif_set_down)
特点
直接操作网络接口,不通过 netifapi 机制。
适用于单线程环境,或者在多线程环境中需要额外加锁。
1.1 netif_set_up
对比windows下面,相当于是在资源管理器中“禁用设备”/“启用设备”
netif_set_up()函数一般是在初始化时调用,在netif_add()之后,使能网卡。(打开网卡北向接口的开关阀,让网卡和协议栈的数据能够流通)
/* 标记使能协议栈 */
netif_set_flags()
/* 网卡状态静态回调 */
netif_set_status_callback()
/* 发送ARP/IGMP/MLD/RS事件,例如:linup / netifup或addr-change */
/* 协议栈和数据链路都使能了才生效 */
netif_issue_reports()
---etharp_gratuitous()
---igmp_report_groups()
1.2 netif_set_down
相当于是在资源管理器中“禁用设备””
netif_clear_flags()
/*删除所有ARP表,就是arp -d */
etharp_cleanup_netif()
netif_status_callback()
2 netif_set_link_up函数
通常由网卡驱动程序在特定条件下调用;
直接操作网络接口,不通过 netifapi 机制。
适用于单线程环境,或者在多线程环境中需要额外加锁。
2.1 netif_set_link_up
网线没插好,那么这个Link Status就是down。与真实物理状态有关
2.2 netif_set_link_down
3 netifapi_netif_set_link_up函数
将指定网络接口的链路状态(link state)设置为“启动”(link up)。
链路状态“启动”表示网络接口已连接到物理网络(例如,网线已插入或无线网络已连接),可以开始发送和接收数据。
特点
通过 LwIP 的 netifapi 机制调用,是线程安全的。
适用于多线程环境,因为操作会被放入 LwIP 的任务队列中执行。
4 免费 ARP 包(Gratuitous ARP)
4.1 作用
免费 ARP 数据包有以下 3 个作用。
该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的 IP 地址和 MAC 地址。
可用于检测 IP 地址冲突。当一台主机发送了免费 ARP 请求报文后,如果收到了 ARP 响应报文,则说明网络内已经存在使用该 IP 地址的主机。
可用于更新其他主机的 ARP 缓存表。如果该主机更换了网卡,而其他主机的 ARP 缓存表仍然保留着原来的 MAC 地址。这时,可以发送免费的 ARP 数据包。其他主机收到该数据包后,将更新 ARP 缓存表,将原来的 MAC 地址替换为新的 MAC 地址