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

SOK*_*OKS 5 linux kernel embedded ethernet network-interface

我的情况是,我有一个支持 10/100/1000 的 PHY,仅用于支持 10/100。

默认行为是使用自动协商找到最佳模式。在另一端,使用具有千兆功能的路由器以非工作接口结束。我猜自动协商永远不会收敛。我听说有些人尝试过使用 100Mbps 交换机,并且效果很好。

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

ethtool -s eth1 duplex full speed 100 autoneg off

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

(让我们说一些奇怪的家伙带着 10Mbps 交换机来找我,我需要这个 eth 来使用另一个世纪的这个交换机)

ilk*_*chu 8

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

(然后,自动协商实际上并没有测试电缆,而只是测试端点可以做什么。这可能会导致在只有两对的电缆上产生千兆链路,并且不能支持 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
Run Code Online (Sandbox Code Playgroud)