使用 ethtool 删除一些广告链接模式

使用 ethtool 删除一些广告链接模式

我的情况是,我的 PHY 具有 10/100/1000 功能,但仅支持 10/100。

默认行为是使用自动协商来查找最佳模式。在另一端,使用具有千兆位能力的路由器会导致一个非工作接口。我猜自动协商永远不会收敛。我听说有人尝试过 100Mbps 交换机,效果很好。

我可以使用它,ethtool但这非常令人沮丧:

ethtool -s eth1 duplex full speed 100 autoneg off

我想做的是保留自动协商,但从选择中撤回 1000baseT/Full,以便它最终以 100Mbps 无缝运行。有什么方法可以使用ethtool或内核选项来实现这一点吗? (在我的 2.6.32 内核上没有找到任何东西......)

(假设某个奇怪的家伙拿着一个 10Mbps 交换机来找我,我需要这个 eth 来与这个来自另一个世纪的交换机一起工作)

答案1

自动协商的问题是,如果您从一端将其关闭,另一端可以检测速度,但不能检测双工模式,默认为一半。然后你会得到双工不匹配,这几乎与链路不工作相同。因此,如果您在一端禁用自动协商,则实际上也必须在另一端禁用​​它。

(还有一个问题是,自动协商实际上并不测试电缆,而只是测试端点可以执行的操作。这可能会导致电缆上只有两对的千兆位链路,并且无法支持 1000Base-T。)

但 ethtool 似乎能够告诉驱动程序要宣传什么速度/双工模式。ethtool -s eth1 advertise 0x0f将允许所有 10/100 模式,但不允许 1G。

advertise N
    Sets the speed and duplex advertised by autonegotiation.  The 
    argument is a hexadecimal value using one or a combination of
    the following values:
      0x001       10baseT Half
      0x002       10baseT Full
      0x004       100baseT Half
      0x008       100baseT Full
      0x010       1000baseT Half       (not supported by IEEE standards)
      0x020       1000baseT Full

答案2

我遇到了类似的问题,您的回答帮助我设置了正确的自动调整。问题是现在我想返回到以前的配置,我有更多的选择:

  • 1000baseT/完整
  • 10000baseT/完整
  • 1000baseX/完整
  • 10000baseSR/完整
  • 10000baseLR/完整

现在我可以设置:

ethtool -s eth0 advertise 0x1000

但这只给了我10G。我可以设置

ethtool -s eth0 advertise 0x020

但同样,这将导致只有 1000baseT。

ethtool 手册页指出我们可以将它们结合起来,但我不知道如何结合。我尝试了多种组合,但我无法破译这个组合。


所以就在这篇文章之后我顿悟了。很简单,您需要对这些值进行求和。将 Bath 转换为十进制添加它们并将结果转换回十六进制。或者如果您知道如何的话,可以直接使用十六进制进行操作。程序员计算器可以帮助...

对我来说结果是:

ethtool -s eth0 advertise 0x1020

这会导致恢复原始情况:

Supported link modes:   1000baseT/Full
                            10000baseT/Full
                            1000baseX/Full
                            10000baseSR/Full
                            10000baseLR/Full
    Supported pause frame use: Symmetric
    Supports auto-negotiation: Yes
    Supported FEC modes: Not reported
    Advertised link modes:  1000baseT/Full
                            10000baseT/Full
                            1000baseX/Full
                            10000baseSR/Full
                            10000baseLR/Full

我希望这对某人有用。

相关内容