1. Overview
In this article, we’ll be looking at the ethtool command in Linux. Specifically, we’ll demonstrate the tool’s capability through the commands it offers.
2. ethtool
The ethtool is a command-line tool in Linux for managing network interface devices. It allows us to modify the parameters of the devices and query the information of those devices.
The ethtool usually comes with any distribution of Linux. But if it’s missing, we can install it with the distro’s package manager. For example, we install with the apt-get command in Debian-based Linux:
$ sudo apt-get install -y ethtool
Then, we run the command with –version to verify the installation:
$ sudo ethtool --version
ethtool version 5.16
If the version is displayed without any errors, we’ve successfully installed the ethtool in our Linux.
3. Querying Network Interface Device
Some of the subcommands and options offered by the ethtool can be categorized as querying commands. It extracts and reports information related to the network interface device or its driver.
3.1. Obtaining Network Interface Device Properties
To get the general properties of a network interface device, we simply run ethtool followed by its name:
$ sudo ethtool enp0s3
Settings for enp0s3:
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/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: umbg
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
In the command above, we use ethtool to obtain the device properties of the enp0s3 network interface. From the output, we see that it shows the device’s speed, duplexity, and supported link modes, among other properties. Additionally, we can quickly verify our interface is connected by ensuring the “Link detected” is yes.
As a little experiment, we can unplug the cable from the network interface, and we should see that it will now show “Link detected: false” when we rerun the same command.
3.2. Obtaining Device’s Driver Properties
The ethtool command could also report the device’s driver properties with the –driver option:
$ sudo ethtool --driver enp0s3
driver: e1000
version: 5.13.0-48-generic
firmware-version:
expansion-rom-version:
bus-info: 0000:00:03.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
From the output, we can see the device’s driver name as well as its version. Additionally, it also tells us whether it supports some of the features we would expect, such as statistics collection, tests, and others.
3.3. Obtaining Device Statistics
Most of the network interface devices collect statistics. For example, it records how many packets have been transmitted and received. To retrieve these statistics, we can invoke ethtool with the –statistics option:
$ sudo ethtool --statistics enp0s3
NIC statistics:
rx_packets: 353208
tx_packets: 60115
rx_bytes: 515998054
tx_bytes: 3951578
rx_broadcast: 0
tx_broadcast: 10
rx_multicast: 0
tx_multicast: 126
rx_errors: 0
tx_errors: 0
tx_dropped: 0
multicast: 0
...(more statistics)
The statistics we can obtain from this command are device-specific. But at the minimum, we’ll always get the basic statistics like packet received and transmitted (rx_packets and tx_packets), bytes received and transmitted (rx_bytes and tx_bytes), and dropped packets.
4. The Ethernet PAUSE Parameters
In Ethernet, the PAUSE frame mechanism is a way to relieve traffic congestion during transfer. When one end of the data link cannot catch up, it can send a pause frame to the other end to slow down the transmission rate. The ethtool command offers multiple options that we can use to query and configure the parameters associated with the PAUSE frame mechanism.
4.1. Obtaining the PAUSE Parameters
To obtain the configured PAUSE parameters of a given ethernet device, we use the –show-pause option:
$ sudo ethtool --show-pause enp0s3
Pause parameters for enp0s3:
Autonegotiate: on
RX: on
TX: off
From the console, we can see that the ethernet device enp0s3 has both the RX and Autonegotiation turned on, and TX turned off. Let’s look at how we can modify these parameters.
4.2. Changing PAUSE Parameters
To modify the PAUSE parameters, we use the –pause option followed by the parameter name we want to configure for and its state (on or off). For example, to configure the PAUSE’s auto-negotiation parameter, we specify the autoneg:
$ sudo ethtool --pause enp0s3 autoneg off
$ sudo ethtool --pause enp0s3 autoneg on
For the RX parameter, we use the rx argument:
$ sudo ethtool --pause enp0s3 rx off
$ sudo ethtool --pause enp0s3 rx on
Finally, we use the tx argument for the TX parameter:
$ sudo ethtool --pause enp0s3 tx off
$ sudo ethtool --pause enp0s3 tx on
5. Running Self Test on Network Interface Device
For network interface devices that support testing, we can use the –test option of the ethtool to run some tests on the device. The possible modes are offline and online.
The offline mode offers a more comprehensive test, but it might interrupt the working of the device through a reboot. It includes the register test, EEPROM test, interrupts test, loopback test, and link test. For example, to run the offline test on the enp0s3 device:
$ sudo ethtool --test enp0s3 offline
On the other hand, the online mode ensures no interruption to the operation of the device. However, it only performs the link test:
$ sudo ethtool --test enp0s3 online
6. Configuring Other Settings
With ethtool, we can also change settings like speed, duplexity, and toggling auto-negotiation. Concretely, we configure those device settings through the -s option followed by the argument key-value pairs.
For example, we can change the speed of the network interface to 10Mbit/s and set the duplexity to half using the -s option:
$ sudo ethtool -s enp0s3 speed 10 duplex half
The command above sets the enp0s3 device’s speed to 10Mbit/s and its duplexity to half.
Do note that we are only allowed to set the speed according to the supported link modes of the devices. For example, attempting to set the speed to 50Mbit/s using the same command would yield an error:
$ sudo ethtool -s enp0s3 speed 50 duplex half
Cannot advertise speed 50 duplex half
Additionally, we can also toggle the state of auto-negotiation of this network interface using the autoneg argument:
$ sudo ethtool -s enp0s3 autoneg off
$ sudo ethtool -s enp0s3 autoneg on
6. Summary
In this tutorial, we’ve taken a look at the ethtool command-line tool in Linux. Particularly, we’ve looked at some of the commands to query and configure the network interface device.