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 个相关的错误:
我正在尝试将嵌入式设备的以太网接口设置为 运行,例如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 个相关的错误: