Как вынудить Администратора сети установить автоматическое согласование на ложь/от для конкретного NIC (eth0) на запуске?

Это так происходит, что у меня есть NIC, который только может установить соединение с текущей сетью, когда автоматическое согласование имеет значение false. В окнах это может быть достигнуто скорее легко путем изменения свойств NIC через Диспетчер устройств. В настоящее время я только могу сделать так в Ubuntu (10.04, если это имеет значение) через следующее после входа в систему:

sudo ethtool-s eth0 autoneg от скорости 100 полных дуплексов

сервисный перезапуск администратора сети sudo

PS: Я прочитал отчеты из форумов человечности, что может быть необходимо удалить администратора сети и только использовать/etc/network/interfaces для конфигурации, но я намереваюсь сделать так только как последнее прибежище. Я также ценил бы его, если кто-то может добавить auto-negotiation ethtool к списку тегов.

4
задан 6 February 2012 в 10:23

4 ответа

Если кто-то еще столкнулся с этой проблемой при попытке настроить сетевые интерфейсы в 18.04, оказалось, что сетевой менеджер отключил автоматическое согласование для меня, поэтому при перезагрузке ничего не работало; ifupdown (устарело), ​​netplan, возможно, какой-то другой вариант, потому что мы не можем выбрать технологию.

Используйте

nmcli c show "Wired connection 1"

Для отображения текущих настроек. Используйте nmcli c edit "Wired connection 1" для интерактивной установки значений (просмотрите иерархию настроек с помощью , перейдите и назад , измените и установите для значений. в помощь):

goto 802-3-ethernet.auto-negotiate
change
save persistent
quit
0
ответ дан 6 February 2012 в 10:23

Как намекнул Джефф М, вы можете сделать это с помощью NetworkManager, и мне очень повезло, что я сделал это таким образом.

Создайте файл в /etc/NetworkManager/dispatcher.d/ с именем 50-ethtool-autoneg-off и поместите в него следующее содержимое. Обратите внимание, что вы можете изменить eth0 на eth*, если вы хотите отключить для любого устройства eth, вы также можете добавить eth*|en*, если у вас есть система, использующая более новые «предсказуемые имена ядра».

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

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

Вам нужен шебанг #!/bin/sh или #!/bin/bash из примеров, которые я видел, и упомянутые им разрешения, безусловно, важны. Он должен быть по крайней мере для чтения / выполнения для пользователя root, а доступный для записи облегчает обновление без изменения прав доступа или принудительного сохранения вашего редактора.

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

Если у вас есть какие-либо проблемы с этим, дайте мне знать, и я проведу некоторые эксперименты, но в настоящее время я использую аналогичный метод для изменения интерфейса с speed 1000 на speed 100 из-за нестабильности в скорость по умолчанию.

0
ответ дан 6 February 2012 в 10:23

У меня были лучшие результаты при использовании скриптов ethtool в /etc/network/if-up.d. Согласно документации Network Manager, сценарии в /etc/NetworkManager/dispatcher.d будут выполняться после «возни с интерфейсами» NM. В моей системе 12.04 единственным скриптом является 01ifupdown, который затем будет запускать скрипты в /etc/network/if-up.d (также /etc/network/if-post-down.d).

Эта последовательность событий, кажется, происходит хорошо после появления экрана входа в систему в моей системе.

Я обнаружил много случаев появления следующей строки в системном журнале, которая может объяснить причину задержки:

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

Не забудьте добавить описание интерпретатора (#!/bin/sh) как первая строка вашего сценария. В противном случае он не будет работать, так как NetworkManager использует утилиту run-parts для их запуска. Они также должны принадлежать пользователю root и иметь разрешение на запись только для своего владельца.

0
ответ дан 6 February 2012 в 10:23

Кажется, нет способа сделать это в Network Manager. Редактирование /etc/network/interfaces, с другой стороны, является неуклюжим и вызывает задержки в более поздних выпусках Ubuntu, таких как 12.04 (см. , и , ). В итоге решение, предложенное здесь , оказывается наилучшим (на данный момент), добавив команду ethtool в rc.local:

sudo -H gedit /etc/rc.local

ethtool -s eth0 autoneg off speed 100 duplex full    # put this above 'exit 0'
0
ответ дан 6 February 2012 в 10:23

Другие вопросы по тегам:

Похожие вопросы: