一、参考资料
1:OA_Automotive_Ethernet_ECU_TestSpecification_Layer_3-7_v3.0.pdf
page 71
二、问题描述
1、TC8 UT测试中ARP_33测试用例Fail
2、ARP_33测试用例说明:
简单来说是为了测试协议栈是否能更新ARP缓存表
但是测试的方法比较特殊,用到了一种开发过程中比较少见的免费ARP报文(gratuitous arp),这种ARP报文的特点是“自问自答”,如下图所示。
由同一个设备(10.0.0.50)发出ARP请求,(10.0.0.50)自身响应ARP请求,类型是广播。
然后通过UT指令,让DUT发送一条UDP单播到10.0.0.50。
期望DUT直接发送UDP报文,不再发出ARP请求MAC地址
https://blog.csdn.net/wjz110201/article/details/115114238
按照默认配置的Linux TCP/IP协议栈测试Fail,发送UDP单播前仍让发出ARP请求
因为正常的ARP请求,DUT都能正确缓存在ARP表中,所以猜测是协议栈不支持免费ARP报文
查阅网上资料,Linux TCP/IP协议栈默认只缓存自身请求的MAC地址,要支持未经请求的ARP,通过配置/proc/sys/net/ipv4/conf/eth0/arp_accept为1来实现
https://qa.1r1g.com/sf/ask/235171191/
修改后复测,通过UT指令,让DUT发送一条UDP单播到10.0.0.50,不再发出ARP请求MAC地址,直接发出,测试用例通过
三、修改方法:
1:临时配置
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_accept
2:永久配置
修改/etc/sysctl.conf
增加一行:net.ipv4.conf.eth0.arp_accept = 1