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.