Cozying up to ethtool

If you'd like to know a lot more about your ethernet interfaces than ifconfig will ever tell you, it's time you take a look at ethtool.

Want to get even more familiar with your network adapters? The ifconfig command is not the only tool for examining your interfaces. Since 1998 or so, a tool called ethtool has been

available for displaying and modifying your ethernet adapter settings.

Using ethtool, you can:

  • Display identification and diagnostic information
  • Look at extended device statistics
  • Control the speed, duplex, autonegotiation and flow control settings
  • Control checksum offload and other offload features
  • Control the DMA ring sizes and interrupt moderation
  • Control receive queue selection for multiqueue devices
  • Upgrade firmware in flash memory

You can get a lot of basic information on one of your network interfaces with the command ethtool followed by the name of the interface you want to examine.

$ ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        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: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Link detected: yes

To get firmware information on a physical interface, use the -i option:

# ethtool -i eth0
driver: bnx2
version: 1.7.9-1
firmware-version: 5.2.3 NCSI 2.0.11
bus-info: 0000:01:00.0

Not much information is available for bonded interfaces, but ethtool will identify them as

such, using the term "bonding". There are no statistics available for non-physical interfaces as you can see from the output below.

# ethtool -i bond0
driver: bonding
version: 3.2.4
firmware-version: 2
# ethtool -S bond0
no stats available

To see the pause settings and whether an interface is set up to auto-negotiate, use the -a option:

# ethtool -a eth0
Pause parameters for eth0:
Autonegotiate:  on
RX:             on
TX:             on

To view statistics for your ethernet interface, use the -S option:

# ethtool -S eth0
NIC statistics:
     rx_bytes: 125850431219
     rx_error_bytes: 0
     tx_bytes: 139140209311
     tx_error_bytes: 0
     rx_ucast_packets: 96912478
     rx_mcast_packets: 12054491
     rx_bcast_packets: 52901669
     tx_ucast_packets: 155871625
     tx_mcast_packets: 2466
     tx_bcast_packets: 94454
     tx_mac_errors: 0
     tx_carrier_errors: 0
     rx_crc_errors: 0
     rx_align_errors: 0
     tx_single_collisions: 0
     tx_multi_collisions: 0
     tx_deferred: 0
     tx_excess_collisions: 0
     tx_late_collisions: 0
     tx_total_collisions: 0
     rx_fragments: 0
     rx_jabbers: 0
     rx_undersize_packets: 0
     rx_oversize_packets: 0
     rx_64_byte_packets: 55466306
     rx_65_to_127_byte_packets: 19003700
     rx_128_to_255_byte_packets: 8308294
     rx_256_to_511_byte_packets: 836880
     rx_512_to_1023_byte_packets: 141854
     rx_1024_to_1522_byte_packets: 78145842
     rx_1523_to_9022_byte_packets: 0
     tx_64_byte_packets: 305460
     tx_65_to_127_byte_packets: 66853240
     tx_128_to_255_byte_packets: 353026
     tx_256_to_511_byte_packets: 49608
     tx_512_to_1023_byte_packets: 17149
     tx_1024_to_1522_byte_packets: 88390062
     tx_1523_to_9022_byte_packets: 0
     rx_xon_frames: 17119
     rx_xoff_frames: 17119
     tx_xon_frames: 0
     tx_xoff_frames: 0
     rx_mac_ctrl_frames: 0
     rx_filtered_packets: 58432177
     rx_discards: 0
     rx_fw_discards: 165994

That's a lot of statistics! Notice how the packet count output is broken down by packet size.

There's even a command that you can use to get the interface to blink. Why would you do that? When you're not sure which interface is which by looking at them -- which is eth0, which is eth1, etc.

ethtool --identify eth0 10

This command would cause the eth0 interface to blink for ten seconds. Of course, if you're staring at your screen, this will seem no more illuminating than sleeping for ten seconds, but if you're looking at the back of your system, you'll see a modest little light show and you'll know which interface is eth0.

You can also use ethtool to test one of your network interfaces with the -t or --test option. Note that some of these will interrupt service. If you use the offline command as shown below, a comprehensive set of tests will be done, but service will be interrupted.

# ethtool -t offline eth0

If you select online instead, fewer tests will be run, but service will not be interrupted.

There's also a fairly nice man page for the ethtool command and you can get a synopsis of the commands by asking for help with the ethtool -h command.

The ethtool command can certainly tell you a lot more about your network interfaces than ifconfig and can provide very interesting information on your network traffic as well.

Join the Network World communities on Facebook and LinkedIn to comment on topics that are top of mind.
Must read: 10 new UI features coming to Windows 10