1. Overview
In this tutorial, we’ll discuss the alternative ways to read the TX/RX information. TX shows the volume of data in bytes transmitted by an interface while RX information indicated the volume of data received by an interface in bytes. Usually, we use the ifconfig command since its output contains the TX/RX information. At present, ifconfig is deprecated and it’s no longer supported.
At the same time, Linux OS has already provided us with the equivalent commands we can use to obtain the same information. As we often say, one of the defining features of Linux is that “everything is a file”. Here, we’ll look at some special files we can obtain this information from.
2. The ip Command
Despite ifconfig being available, we can’t rely on it any longer. It won’t be available in future versions. On the contrary, it’s still in use. The ip command is the perfect alternative to the ifconfig command.
We use the ip command to display and configure the network parameters for our computer. Besides having the capability to find out which interfaces are configured on the system, we can also use ip to check the status of the other interfaces:
$ ip a
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 64:66:00:7v:a6:8c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.7/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0
valid_lft 165135sec preferred_lft 165135sec
inet6 fe80::1142:db0d:1d29:f10a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
As we can see, this output doesn’t give us the TX and RX information. To get this information, we use the -s flag and the link object.
To begin with, let’s see the TX and RX information on all interfaces in our computer:
$ ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped missed mcast
7920 104 0 0 0 0
TX: bytes packets errors dropped carrier collsns
7920 104 0 0 0 0
2: wlan0: <BROADCAST,MULTICAST, UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 62:57:20:7g:a6:7c brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
152808590 126789 0 0 0 0
TX: bytes packets errors dropped carrier collsns
10153431 68193 0 0 0 0
3: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 76:4d:7e:25:0b:ed brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
5468410 5900 0 0 0 0
TX: bytes packets errors dropped carrier collsns
873035 4914 0 0 0 0
Next, let’s display this information for a single interface:
$ ip -s link show dev wlan0
2: wlan0: <BROADCAST,MULTICAST, UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 62:57:20:7g:a6:7c brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
152808540 126788 0 0 0 0
TX: bytes packets errors dropped carrier collsns
10153349 68192 0 0 0 0
We can use the -h option to make our output more human-readable:
$ ip -s -h link show dev wlan0
2: wlan0: <BROADCAST,MULTICAST, UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 62:57:20:7g:a6:7c brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
153M 127k 0 0 0 0
TX: bytes packets errors dropped carrier collsns
10.2M 68.6k 0 0 0 0
3. /proc/net/dev File
The /proc directory is also known as the virtual file system. If we list the contents of the virtual file system using ls, the files within are listed. Even though these files don’t exist on the disk, the OS creates them on the spot upon our request or when a process makes the request.
If we look inside the /proc directory, we realize we have named and numbered directories. The named directories may be similar to some of the commands we usually run. On the other hand, the numbered directories are the PIDs of the running processes.
/proc/net directory provides an in-depth look at various networking parameters and statistics on the system. Each directory has a virtual file within it.
The file describes the aspect of the system’s network configuration. Inside the /proc/net directory, some of the virtual files we’ll find are arp, dev, netstat, raw, route, etc.
The /proc/net/dev file lists the various network devices configured on the system. Additionally, it shows complete transmission (TX) and reception (RX) statistics on each interface. This file displays the number of bytes each interface has sent and received, the number of inbound and outbound packets, the number of errors seen, the number of packets dropped, etc.
We can use cat to view these virtual files:
$ cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 7440 96 0 0 0 0 0 0 7440 96 0 0 0 0 0 0
eth0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
wlan0: 4122842 4984 0 0 0 0 0 0 781419 3322 0 0 0 0 0 0
We must note that on most devices /proc/net/dev is read from the hardware counters. Likewise, other stats get updates from the network stack in the device structures.
4. /sys/class/net Directory
Apart from the virtual file system, we can also look at the /sys/class/net directory. This directory has a directory for each network interface available in our system:
$ cd /sys/class/net/ && ls
lo usb0 wlan0
In each of these directories, we have a /statistics directory that contains all the network information.
Let’s get into the wlan0 directory and view its contents:
$ cd /sys/class/net/wlan0 && ls
addr_assign_type dev_port name_assign_type queues
address dormant napi_defer_hard_irqs speed
addr_len duplex netdev_group statistics
broadcast flags operstate subsystem
carrier gro_flush_timeout phy80211 testing
Next, let’s view the contents of the /statistics directory:
$ cd wlan0/statistics && ls
collisions rx_compressed rx_errors rx_length_errors rx_over_errors tx_bytes tx_dropped tx_heartbeat_errors
multicast rx_crc_errors rx_fifo_errors rx_missed_errors rx_packets tx_carrier_errors tx_errors tx_packets
rx_bytes rx_dropped rx_frame_errors rx_nohandler tx_aborted_errors tx_compressed tx_fifo_errors tx_window_errors
Now, let’s view the TX/RX information. To display the files, we use cat:
$ cat rx_bytes
153262397
$ cat tx_bytes
10389858
5. Using the ethtool Command
The ethtool is a command used to query or control network driver and hardware settings. We can use this command to get the statistics of a particular interface.
To query a specific network interface and get the network stats, we use the -S flag.
Let’s look at its syntax:
$ ethtool -S interface_name
For example, let’s run the ethtool command on our terminal:
$ ethtool -S wlan0 | grep '[r,t]x'
rx_packets: 405242
rx_bytes: 192996587
rx_duplicates: 93
rx_fragments: 268845
rx_dropped: 575
tx_packets: 69741
tx_bytes: 10409745
tx_filtered: 0
tx_retry_failed: 0
tx_retries: 4432
txrate: 135000000
rxrate: 1000000
ch_time_rx: 18446744073709551615
ch_time_tx: 18446744073709551615
We’re using grep to filter and get results for TX and RX.
6. Using the netstat Command
In older systems, we can still use the netstat command. Even though it’s outdated, it’s available in current versions of Linux. The future versions might not have it.
We use the netstat command to print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships.
Let’s use the netstat command to see the TX and RX information:
$ netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
lo 65536 114 0 0 0 114 0 0 0 LRU
usb0 1500 2895 0 0 0 2683 0 0 0 BMRU
wlan0 1500 129149 0 0 0 69615 0 0 0 BMRU
Next, we use it to display the TX and RX statistics for each protocol:
$ netstat -s
Ip:
Forwarding: 2
344042 total packets received
1 with invalid headers
4 with invalid addresses
0 forwarded
0 incoming packets discarded
338915 incoming packets delivered
217068 requests sent out
58 outgoing packets dropped
223 dropped because of missing route
Icmp:
156 ICMP messages received
0 input ICMP message failed
ICMP input histogram:
destination unreachable: 156
181 ICMP messages sent
0 ICMP messages failed
Although netstat -i is still usable, ip -s link command is the better option. The netstat command may be dropped in the coming versions.
7. Conclusion
In this article, we looked at alternatives to using the ifconfig command to get the TX/RX information. We discussed the ip, ethtool, and netstat commands.
Besides, we also saw the virtual file system where we explored some of the contents of the /proc/net directory and the /proc/net/dev file.
Lastly, we looked at the /sys/class/net directory, which is similar to the virtual file system.