驱动程序测试:环回¶
测试原理¶
lotest 命令可以在高数据包负载下独立验证接收和发送数据路径的正确性,且不依赖外部服务器或网络组件。此外,它是少数能够检测接收数据路径是否正确剥离 CRC 的测试之一。
背景¶
lotest 使用同一台机器上的两个网络接口运行,两个接口都由 iPXE 控制。两个接口之间应使用一根网线直接连接,中间不经过交换机。
理想情况下,其中一个网络接口应属于一块已知良好的网卡,且不受你正在开发的驱动程序控制,因为这样可以把问题隔离到发送或接收数据路径之一。如果你测试的是双端口网卡,那么可以使用这两个端口作为两个接口,但要注意的是,这样将无法轻易区分发送和接收数据路径中的问题。

测试步骤¶
- 开始之前,确保你的网络接口与同一台机器上的第二个网络接口直接相连。
- 引导进入启用了 LOTEST_CMD 且支持这两个网络接口的 iPXE 版本。
- 使用
ifstat确定你的网络接口名称(下文假定为net0)和第二个网络接口的名称(下文假定为net1)。 - 使用
lotest net0 net1开始测试发送数据路径。 - 验证
lotest显示的数据包计数器稳定而快速地增长。 - 使用
Ctrl-C中止测试。 - 使用
lotest net1 net0开始测试接收数据路径。 - 验证
lotest显示的数据包计数器稳定而快速地增长。 - 使用
Ctrl-C中止测试。
故障排除¶
长度不匹配¶
在测试接收数据路径时,如果你的驱动程序没有正确地从接收数据包中剥离以太网 CRC,你会观察到 Length mismatch 错误。理想情况下,你应将网卡配置为在硬件中剥离 CRC。如果网卡不支持,那么你可以在把接收数据包传递给 netdev_rx() 之前,将其长度减去 4 字节,以软件方式剥离 CRC:
iob_put ( iobuf, ( len - 4 /* strip CRC */ ) );
netdev_rx ( netdev, iobuf );