驱动程序测试:链路检测¶
测试原理¶
用户期望链路状态错误被如实报告,而不是只能从 DHCP 超时等现象推断。因此,驱动程序应当响应外部链路接通和断开事件(例如拔掉或插回网线)更新链路状态。
背景¶
驱动程序应使用 netdev_link_up()、netdev_link_down() 和/或 netdev_link_err() 更新链路状态。用户可以在命令行中使用 ifstat 观察链路状态。

测试步骤¶
- 开始之前,确保系统电源已关闭,并且网线已连接。
- 开机并引导到 iPXE 命令行。
- 使用
ifstat确定你的网络接口名称(下文假定为net0)。 - 使用
ifopen net0打开接口。 - 使用
ifstat验证链路状态报告为Up。某些网络(例如 Infiniband)需要很长时间才能达到链路接通状态;你可能需要等待几秒钟。 - 拔掉网线。
- 使用
ifstat验证链路状态报告为Down(或更具体的链路错误,如果驱动程序使用了netdev_link_err())。 - 重新插上网线。
- 使用
ifstat验证链路状态再次报告为Up。
故障排除¶
链路状态仅在刚打开时有效¶
你可能会发现,你的驱动程序能够在接口打开时(使用 ifopen)检测到链路状态,但对后续的链路状态变化(例如拔掉网线)没有响应。
大多数网卡支持链路状态变化中断,通常通过与报告 TX 和 RX 完成事件相同的机制来报告。你的 poll() 例程应检查报告的链路状态变化并做出适当反应。