我正在查看ethtool
的来源,特别是在可以启用/禁用自动协商,rx/tx暂停的功能do_spause()
。我注意到起初它会为ETHTOOL_GPAUSEPARAM
命令发出ioctl()
,即它获取当前设置,并且它们是相同的,它不会更改任何内容,否则它将发出ioctl()
ETHTOOL_SPAUSEPARAM
命令并设置新参数。
这是什么原因呢?这是优化,还是避免链路中断的方法?
ethtool_ops针对每种设备类型单独实现。 在设置已经设置的值时,假设所有 ioctl 都是良性的是鲁莽的。 内核中的实现在这里:
https://elixir.bootlin.com/linux/v3.10.108/source/net/core/ethtool.c#L1003