Remover ALGUNS modos de link anunciados com ethtool

3

Estou numa situação em que tenho um PHY com capacidade para 10/100/1000 apenas para suportar 10/100.

O comportamento padrão é usar a autonegociação para encontrar o melhor modo. No outro extremo, o uso de um roteador capaz de gigabit termina em uma interface que não funciona. Eu acho que a autonegociação nunca converge. Eu ouvi algumas pessoas tentarem com um comutador de 100Mbps e funciona bem.

Consigo fazê-lo funcionar usando ethtool , mas isso é bastante frustrante:

ethtool -s eth1 duplex full speed 100 autoneg off

O que eu gostaria de fazer é manter a autonegociação, mas retirar 1000baseT / Full das escolhas, para que ela acabe funcionando sem problemas em 100Mbps. Qualquer maneira de conseguir isso usando ethtool ou opções de kernel? (não encontrei nada no meu kernel 2.6.32 ...)

(Digamos que um cara estranho venha a mim com um switch de 10Mbps, eu preciso dessa eth para trabalhar com essa mudança de outro século)

    
por SOKS 01.12.2017 / 17:14

1 resposta

3

A coisa com autonegociação é que se você desligá-lo de uma extremidade, o outro lado pode detectar a velocidade, mas não o modo duplex, que é a metade. Então você começa uma incompatibilidade duplex, que é quase o mesmo que o link não está funcionando. Então, se você desabilitar a negociação automática em uma extremidade, você praticamente terá que desabilitá-la na outra ponta também.

(Então há a questão de que a negociação automática realmente não testa o cabo, apenas o que os endpoints podem fazer. Isso pode resultar em um link gigabit sobre um cabo que tem apenas dois pares e não pode suportar 1000Base-T.) / p>

Mas o ethtool parece capaz de dizer ao motorista que modos de velocidade / duplex anunciar. ethtool -s eth1 advertise 0x0f permitiria todos os modos 10/100, mas não 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
    
por 01.12.2017 / 17:53