Ethtool

Last updated
ethtool
Original author(s) David S. Miller
Developer(s) Michal Kubecek
Initial release1998;27 years ago (1998)
Stable release
6.15 / 23 June 2025;2 months ago (2025-06-23)
Repository
Written in C
Operating system Linux
Type Networking
License GPLv2
Website www.kernel.org/pub/software/network/ethtool/

ethtool is the primary means in Linux kernel-based operating systems (primarily Linux and Android) for displaying and modifying the parameters of network interface controllers (NICs) and their associated device driver software from application programs running in userspace.

Contents

ethtool consists of two components, an API within the Linux kernel through which NICs can send and receive parameters through their device driver software, and a userspace API based on the Linux SIOCETHTOOL ioctl mechanism through which application programs can communicate with the kernel to send and receive NIC and NIC driver parameters.

Most Linux distributions provide a standard utility program called ethtool that can be used from a shell to control, or gather information from NICs using the ethtool userspace API. In the Information technology community, the term ethtool is usually used to refer to this utility program.

The ethtool userspace API can be accessed from programs written in the C and C++ programming languages through the C standard library or C++ standard library respectively.

Several scripting languages such as Perl and Python provide ethtool API bindings that allow programmers using these languages to write scripts that can control NIC's.

The macOS and FreeBSD operating systems provide utility programs that have a user interface similar to the Linux ethtool utility, but that use fundamentally different APIs to communicate with their operating system kernels and NIC's.

Usage

The command is useful for:

Examples

To display the current parameters of the first network port (eth0):

$ ethtooleth0 Settings for eth0:       Supported ports: [ TP MII ]       Supported link modes: 10baseT/Half 10baseT/Full                               100baseT/Half 100baseT/Full       Supports auto-negotiation: Yes       Advertised link modes: 10baseT/Half 10baseT/Full                               100baseT/Half 100baseT/Full       Advertised auto-negotiation: No       Speed: 100Mb/s       Duplex: Full       Port: MII       PHYAD: 1       Transceiver: internal       Auto-negotiation: off       Supports Wake-on: g       Wake-on: g       Current message level: 0x00000007 (7)       Link detected: yes

[1]

To configure it with the 1000 Mb/s speed and duplex, in 1000BASE-T:

$ ethtool-seth0speed1000duplexfullautonegoff 

To let the link light of the device eth0 flash for two minutes:

$ ethtool-peth0120

To print the driver info of the interface eth0:

$ ethtool-ieth0 driver: mlx5_coreversion: 4.9-2.2.4firmware-version: 14.28.2006 (MT_2420110034)expansion-rom-version: bus-info: 0000:65:00.1supports-statistics: yessupports-test: yessupports-eeprom-access: nosupports-register-dump: nosupports-priv-flags: yes

mii-tool

mii-tool is an older program performing a similar function to ethtool. Since 2003, [2] it's considered obsolete and replaced by ethtool.

Example

To display the current parameters:

$ mii-tool eth0: no autonegotiation, 100baseTx-HD, link ok

To force the network speed to 1 Gbit/s, and the duplex in full on the port 1 (eth0):

$ mii-tool-F1000baseTx-FDeth0 $ mii-tool eth0: 1 000 Mbit, full duplex, link ok

See also

References

  1. "9 Linux ethtool Examples to Manipulate Ethernet Card (NIC Card)". www.thegeekstuff.com. 2010-10-28. Retrieved 2020-11-14.
  2. "Ethernet Auto-negotiation and Duplexing on Linux". lists.olug.org. September 2003.