Linux内核是否支持ARP卸载?如何启用DW XGMAC的ARP卸载功能
DW XGMAC ARP卸载特性的内核支持与启用方法
内核支持现状
Linux主线内核中stmmac系列驱动(对应DW XGMAC 2代万兆MAC控制器)已经实现了ARP卸载的硬件寄存器操作逻辑,即你找到的dwxgmac2_set_arp_offload函数,但主线版本目前没有将该特性对接到内核通用网络配置通路,默认不会自动启用,也没有对接原生ethtool配置接口。
你找不到该函数调用点的原因很简单:当前主线代码中这个函数属于已实现、但未接入上层调用流程的预留功能,没有绑定到网卡初始化、特性配置、事件回调等通用流程中。
特性启用逻辑
ARP卸载的工作逻辑不复杂:
- 驱动提前将本机的IPv4地址写入XGMAC控制器的对应匹配寄存器,同时打开硬件ARP应答开关
- 网卡收到ARP请求报文时,硬件直接比对请求的目标IP,如果和预存的本机IP匹配,直接由硬件构造ARP应答报文返回,不需要将该报文上送内核协议栈处理,降低CPU开销
部分厂商针对自有硬件定制的内核版本中,已经把这个功能接入了网卡事件流程:当网卡up、配置IPv4地址时,自动读取网卡上的IPv4地址传入dwxgmac2_set_arp_offload开启功能;当网卡down、IP地址删除时,关闭该功能避免错误应答。
主线内核手动启用方案
如果要在主线内核上启用该特性,只需要给驱动补少量对接代码即可,不需要修改核心网络栈:
- 在stmmac驱动的网络设备事件回调中增加处理逻辑:监听
NETDEV_UP、IPv4地址变更事件,当网卡配置了合法的IPv4单播地址时,将地址传入dwxgmac2_set_arp_offload开启功能;当网卡down、IP地址清空时,传入空地址关闭功能。 - 如果需要用户态动态开关、配置的能力,可以通过ethtool私有ioctl的方式增加自定义配置命令,直接对接该函数的调用,不需要修改内核通用ethtool框架。
注意:启用前请确认你使用的XGMAC硬件版本确实集成了ARP卸载逻辑,部分早期批次的DW XGMAC v2控制器虽然预留了寄存器定义,但实际没有实现硬件ARP应答功能,强制开启会导致ARP应答异常、网络不通。
内容的提问来源于stack exchange,提问作者Thomas07
相关产品推荐
相关产品推荐

