Команда ethtool

Команда ethtool позволяет использовать утилиту с соответствующим именем для изменения низкоуровневых параметров сетевых карт. Данная утилита способна изменять огромное количество параметров сетевых карт, большая часть из которых не интересна обычным пользователям. Кроме того, драйверы сетевых карт домашних компьютеров и ноутбуков не позволяют изменять большую часть поддерживаемых утилитой параметров, поэтому в большинстве случаев она используется для проверки и установки скорости сетевого соединения, а также режима работы сетевой карты.

Базовый синтаксис команды выглядит следующим образом:

# ethtool [параметры] имя-сетевого-интерфейса

Утилита поддерживает огромное количество параметров. Наиболее важными из них являются параметр -i, позволяющий получить информацию о драйвере сетевой карты, параметр -S, позволяющий получить статистику работы сетевой карты в случае поддержки этой функции драйвером, параметр -s, позволяющий установить скорость и режим работы сетевой карты, параметры -k и -K, позволяющие получить и установить значения параметров режима передачи данных, а также параметр -p, позволяющий идентифицировать порт сетевой карты с помощью мигающего индикатора.

Утилита работает с именами сетевых интерфейсов, связанных с сетевыми картами, поэтому для работы с ней нужно выяснить имя сетевого интерфейса, связанного с интересующей вас сетевой картой. Для этого может использоваться одна из следующих команд:

# ifconfig -a
# ip a s

Установка утилиты

В первую очередь вам придется установить рассматриваемую утилиту; проще всего это сделать с помощью терминала путем исполнения соответствующей вашему дистрибутиву команды. Подробнее об установке программного обеспечения рассказано в данном разделе.

Команда для Linux Mint, Ubuntu и Debian:

$ sudo apt-get install ethtool

Команда для Fedora Workstation:

$ sudo dnf install ethtool

Примеры использования

Определение имени сетевого интерфейса

Для определения имени сетевого интерфейса, которое нужно передавать утилите ethtool, следует использовать утилиту ifconfig или ip. Вторая утилита предустановлена во всех популярных дистрибутивах, поэтому рассмотрим пример ее использования:

# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 8c:89:a5:57:76:ba brd ff:ff:ff:ff:ff:ff
    inet 192.168.188.120/24 brd 192.168.188.255 scope global dynamic noprefixroute enp3s0
    valid_lft 111sec preferred_lft 111sec
    inet6 fe80::8e89:a5ff:fe57:76ba/64 scope link noprefixroute
    valid_lft forever preferred_lft forever
3: wwp5s0f2u1u4i1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 02:50:f3:00:00:00 brd ff:ff:ff:ff:ff:ff

Сетевое соединение через интересующую нас сетевую карту установлено, поэтому сетевой интерфейс с идентификатором 3 под названием wwp5s0f2u1u4i1 не подходит (state DOWN означает, что сетевой интерфейс деактивирован). Сетевой интерфейс с идентификатором 1 под названием lo также не подходит (state UNKNOWN означает, что сетевой интерфейс находится в неизвестном состоянии), кроме того, по флагу LOOPBACK можно установить, что это кольцевой интерфейс. Остается сетевой интерфейс с идентификатором 2 и именем enp3s0 в активном состоянии (state UP) с приведенными параметрами. Именно это имя и нужно использовать.

Получение параметров сетевой карты

Для получения параметров сетевой карты достаточно использовать утилиту без каких-либо параметров:

# ethtool enp3s0
Settings for enp3s0:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Supported pause frame use: No
    Supports auto-negotiation: Yes
    Supported FEC modes: Not reported
    Advertised link modes: Not reported
    Advertised pause frame use: No
    Advertised auto-negotiation: Yes
    Advertised FEC modes: Not reported
    Speed: 100Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    MDI-X: Unknown
    Supports Wake-on: pg
    Wake-on: d
    Current message level: 0x0000003f (63)
                           drv probe link timer ifdown ifup
    Link detected: yes

Очевидно, что сетевая карта поддерживает сетевое соединение (Link detected: yes) в полнодуплексном режиме передачи (Duplex: Full) с максимальной скоростью в 100 Мб/с (Speed: 100Mb/s) через витую пару (Port: Twisted Pair). При этом она может передавать данные даже в полнодуплексном режиме со скоростью 1 Гб/с (Supported link modes: 10baseT/Half ... 1000baseT/Full), поддерживает автосогласование (Supports auto-negotiation: Yes) и использует его (Advertised auto-negotiation: Yes).

Установка параметров сетевого соединения

Для установки параметров сетевого соединения следует использовать параметр -s:

# ethtool -s enp3s0 speed 10 duplex full autoneg off

Это команда для снижения скорости передачи до 10 Мб/с (speed 10) в полнодуплексном режиме (duplex full) и отключения функции автосогласования (autoneg off). Для прверки изменений достаточно использовать утилиту без каких-либо параметров:

# ethtool enp3s0
Settings for enp3s0:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Supported pause frame use: No
    Supports auto-negotiation: Yes
    Supported FEC modes: Not reported
    Advertised link modes: 10baseT/Full
    Advertised pause frame use: No
    Advertised auto-negotiation: No
    Advertised FEC modes: Not reported
    Speed: 10Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    MDI-X: Unknown
    Supports Wake-on: pg
    Wake-on: d
    Current message level: 0x0000003f (63)
                           drv probe link timer ifdown ifup
    Link detected: yes

Очевидно, что теперь соединение установлено на скорости 10 Мб/с (Speed: 10Mb/s) без автосогласования (Advertised auto-negotiation: No).

Получение параметров драйвера сетевой карты

Для получения параметров драйвера сетевой карты достаточно использовать параметр -i:

# ethtool -i enp3s0
driver: atl1c
version: 1.0.1.1-NAPI
firmware-version:
expansion-rom-version:
bus-info: 0000:03:00.0
supports-statistics: no
supports-test: no
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

Очевидно, для управления сетевой картой используется драйвер atl1c версии 1.0.1.1-NAPI. Карта использует порт 0000:03:00.0, ее драйвер не не предоставляет доступа к механизмам сбора статистики (supports-statistics: no) и тестирования (supports-test: no).

Идентификация порта сетевой карты

Для идентификации порта сетевой карты с помощью мигающего индикатора достаточно использовать параметр -p:

# ethtool -p enp3s0 10
Cannot identify NIC: Operation not supported

Значение 10 устанавливает длительность периода мигания индикатора, равную 10 секундам. Очевидно, в моем случае сетевая карта не поддерживает подобную функцию.