Como forçar o Network Manager a definir a negociação automática como false / off para uma determinada NIC (eth0) na inicialização?

2

Acontece que eu tenho uma NIC que só é capaz de estabelecer uma conexão com a rede atual quando a negociação automática está definida como false. No Windows, isso pode ser conseguido com bastante facilidade, alterando as propriedades da NIC através do Gerenciador de dispositivos. Atualmente, só posso fazê-lo no Ubuntu (10.04 se isso for importante) através do seguinte após login:

sudo ethtool -s eth0 autoneg off velocidade 100 duplex completo

reinício do gerenciador de rede do serviço sudo

PS: Eu li relatórios de fóruns do Ubuntu que pode ser necessário remover o network-manager e usar apenas / etc / network / interfaces para configuração, mas pretendo fazê-lo apenas como último recurso. Também agradeceria se alguém pudesse adicionar auto-negotiation ethtool à lista de tags.

    
por prusswan 03.02.2012 / 04:04

3 respostas

3

Parece não haver maneira de fazer isso no Network Manager. Editar /etc/network/interfaces , por outro lado, é desajeitado e causa atrasos em edições posteriores do Ubuntu, como 12.04 (veja este e este ). No final, a solução oferecida aqui acaba sendo a melhor (por enquanto), adicionando o comando ethtool para rc.local :

sudo -H gedit /etc/rc.local

ethtool -s eth0 autoneg off speed 100 duplex full    # put this above 'exit 0'
    
por prusswan 06.02.2012 / 07:21
2

Tive melhores resultados ao colocar scripts ethtool em /etc/network/if-up.d . De acordo com a documentação do Network Manager, os scripts em /etc/NetworkManager/dispatcher.d serão executados após o NM 'violar as interfaces'. No meu sistema 12.04, o único script é 01ifupdown, que então executará scripts em /etc/network/if-up.d (também /etc/network/if-post-down.d ).

Esta sequência de eventos parece acontecer bem depois que a tela de login aparece no meu sistema.

Encontrei muitas ocorrências da seguinte linha no log do sistema, o que pode explicar o que está causando o atraso:

NetworkManager[871]: <info> (eth0): carrier now OFF (device state 100, deferring action  for 4 seconds).

Não se esqueça de colocar a descrição do intérprete ( #!/bin/sh ) como a primeira linha do seu script. Caso contrário, não funcionará, pois o NetworkManager usa o utilitário run-parts para executá-los. Eles também precisam ser de propriedade do root e ter permissão de gravação apenas para seu proprietário.

    
por Jeff M. 16.12.2012 / 02:53
1

Como Jeff M sugeriu, você pode fazer isso com o NetworkManager e tive muita sorte em fazer isso dessa maneira.

Crie um arquivo em /etc/NetworkManager/dispatcher.d/ chamado 50-ethtool-autoneg-off e coloque o seguinte conteúdo nele. Note que você pode mudar eth0 para eth* se você quiser desabilitar qualquer dispositivo eth, você também pode adicionar eth*|en* se você tiver um sistema usando os "nomes de kernel previsíveis" mais novos.

#!/bin/sh
myname=${0##*/}
log() { logger -p user.info -t "${myname}[$$]" "$*"; }
IFACE=
ACTION=

case ${IFACE} in
    eth0)
        case ${ACTION} in
            up)
                log "Disabling auto-negotation on $IFACE"
                ethtool -s $IFACE autoneg off speed 100 duplex full
                ;;
        esac
        ;;
esac

Você precisa de um shebang #!/bin/sh ou #!/bin/bash dos exemplos que eu vi, e as permissões que ele mencionou são definitivamente importantes. Ele deve ser pelo menos de leitura / execução para raiz, e gravável torna mais fácil a atualização sem ter que alterar as permissões ou forçar seu editor a salvar.

sudo chmod 0744 /etc/NetworkManager/dispatcher.d/50-ethtool-autoneg-off

Se você tiver algum problema com isso, avise-me e eu farei algumas experiências, mas atualmente estou usando um método semelhante para alterar uma interface de speed 1000 para speed 100 devido à instabilidade na velocidade padrão.

    
por dragon788 28.09.2017 / 16:09