You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Systemd-networkd无法配置以太网接口速率与双工模式求助

解决systemd-networkd/udev无法强制以太网接口10M半双工的问题

你遇到的核心问题是自动协商(AutoNegotiation)默认处于开启状态,导致你通过.link文件或udev规则设置的速率/双工被设备与链路伙伴的协商结果覆盖,再加上xilinx_axienet驱动在链路up时会重新触发协商,进一步覆盖了你的配置。下面是具体的解决方案:

一、修改systemd .link文件(推荐方案)

systemd-networkd的.link文件支持直接禁用自动协商,这是强制固定速率和双工的必要前提。修改你的/lib/systemd/network/20-eth0.link,添加AutoNegotiation=no配置:

[Match]
Name=eth0
[Link]
MTUBytes=1450
BitsPerSecond=10M
Duplex=half
AutoNegotiation=no

注意事项:

  • 如果/etc/systemd/network目录下存在同名或更高优先级的.link文件(比如数字编号更小的文件名),会覆盖/lib下的配置,请检查并确保没有冲突。
  • 应用配置的步骤:
    # 重新加载systemd-networkd
    systemctl reload systemd-networkd
    # 重启网卡接口
    ip link set eth0 down && ip link set eth0 up
    # 验证配置结果
    ethtool eth0
    

二、修复udev规则(备选方案)

udev规则中,必须先禁用自动协商,再设置speed和duplex参数,否则驱动会忽略你的手动设置。修改/lib/udev/rules.d/10-persistent-network.rules为:

ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth0", ATTR{autoneg}="0", ATTR{speed}="10", ATTR{duplex}="half", ATTR{mtu}="1450"

然后触发udev规则生效:

udevadm trigger /sys/class/net/eth0
ip link set eth0 down && ip link set eth0 up

三、为什么之前的配置不生效?

你看到的dmesg日志xilinx_axienet xilinx_axienet eth0: Link is Up - 100Mbps/Full正是自动协商的结果:

  1. 你的.link/udev规则仅设置了速率和双工,但没有关闭自动协商;
  2. 网卡与链路伙伴(比如交换机)协商后,选择了双方都支持的最高速率(100M全双工);
  3. 驱动在链路up时完成协商流程,直接覆盖了你之前的配置。

而手动执行ethtool -s eth0 speed 10 duplex half之所以生效,是因为这条命令自动帮你关闭了自动协商(你可以执行后用ethtool eth0查看,Auto-negotiation会变成off)。

内容的提问来源于stack exchange,提问作者Odysseus

火山引擎 最新活动