Systemd - 无法设置 speed/duplex 以太网接口

Systemd - unable to setup speed/duplex of ethernet interface

我正在尝试将嵌入式设备的以太网接口设置为 运行,例如10 MBit/s / 半双工。

由于系统使用systemd(systemd-networkd)配置网络设备,通常的方法可能是定义一个合适的.link文件,我试过:

/lib/systemd/network/20-eth0.link:
[Match]
Name=eth0

[Link]
MTUBytes=1450
BitsPerSecond=10M
Duplex=half

调用 udevadm info /sys/class/net/eth0 告诉我 link 文件已加载,甚至正确采用了 MTU 值。 但是速度和双工模式都没有改变 - ethtool eth0 输出:

Supported link modes:   10baseT/Half 10baseT/Full
                        100baseT/Half 100baseT/Full
                        1000baseT/Half 1000baseT/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Advertised link modes:  10baseT/Half 10baseT/Full
                        100baseT/Half 100baseT/Full
                        1000baseT/Half 1000baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                     100baseT/Half 100baseT/Full
Link partner advertised pause frame use: Symmetric
Link partner advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Link detected: yes

我也尝试过立即在 udev 规则中设置值:

/lib/udev/rules.d/10-persistent-network.rules:
ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*", ATTR{speed}="10", ATTR{duplex}="half", ATTR{mtu}="1400"

这让我得到了相同的结果:采用了 MTU 值,但既不是速度模式也不是双工模式

另一方面,使用ethtool -s eth0 speed 10 duplex half

手动设置这些属性也没有问题

我的建议是,自启动后 dmesg 的最后一条消息说:

之后,驱动程序会以某种方式加载默认值

xilinx_axienet xilinx_axienet eth0: Link is Up - 100Mbps/Full - flow control rx/tx

但我不确定这是否真的覆盖了我的设置,或者这些设置根本没有被采用(因为它们设置在其他地方具有更高的优先级,例如)

感谢任何建议

我终于弄明白了 - systemctl status systemd-udevd 给了我第一个需要的提示。

首先,Name 不是 .link 的有效 Match 选项值,但它适用于 .network - 它仍然为以太网设备加载。

更有趣的信息是 udevd 抱怨设置 speed/duplex 的参数无效,这将我引导到 this related question,其中 systemd 中的错误阻止了 speed/duplex 模式通过 .link file.This 版本 v237

修复了错误

现在有趣的是,它甚至在 运行 v237 时也不起作用,因为 v237 有另一个错误阻止了这种方法。所以我建议至少更新到 v239 以修复这两个错误。

如果其他人也需要修补旧版本的 systemd,这里有 2 个相关的错误: