跳转至

驱动程序测试:链路检测

测试原理

用户期望链路状态错误被如实报告,而不是只能从 DHCP 超时等现象推断。因此,驱动程序应当响应外部链路接通和断开事件(例如拔掉或插回网线)更新链路状态。

背景

驱动程序应使用 netdev_link_up()netdev_link_down() 和/或 netdev_link_err() 更新链路状态。用户可以在命令行中使用 ifstat 观察链路状态。

A network card

测试步骤

  1. 开始之前,确保系统电源已关闭,并且网线已连接。
  2. 开机并引导到 iPXE 命令行。
  3. 使用 ifstat 确定你的网络接口名称(下文假定为 net0)。
  4. 使用 ifopen net0 打开接口。
  5. 使用 ifstat 验证链路状态报告为 Up。某些网络(例如 Infiniband)需要很长时间才能达到链路接通状态;你可能需要等待几秒钟。
  6. 拔掉网线。
  7. 使用 ifstat 验证链路状态报告为 Down(或更具体的链路错误,如果驱动程序使用了 netdev_link_err())。
  8. 重新插上网线。
  9. 使用 ifstat 验证链路状态再次报告为 Up

故障排除

链路状态仅在刚打开时有效

你可能会发现,你的驱动程序能够在接口打开时(使用 ifopen)检测到链路状态,但对后续的链路状态变化(例如拔掉网线)没有响应。

大多数网卡支持链路状态变化中断,通常通过与报告 TX 和 RX 完成事件相同的机制来报告。你的 poll() 例程应检查报告的链路状态变化并做出适当反应。