'netstat -s -i' should show protocol statistics per interface. However it only shows ip6 statistics 'netstat -s' works as intended (shows the sum of each statistic, both ipv4 and ipv6, for all interfaces) 'netstat -s -4' works as intended (shows system-wide ipv4 statistics) 'netstat -s -i -4' returns nothing Note 'netstat -s -s' suppresses 0 values #netstat -s | wc -l 348 #netstat -s -s | wc -l 120 #netstat -s -s -i | wc -l 18 #netstat -s -s -I igb0 | wc -l 6 #netstat -s -s -i -4 | wc -l 0 'netstat -s -s -i' should return the same more more lines than 'netstat -s -s', since it will break the statistics down per-interface How-To-Repeat: netstat -s -i -4
command "netstat -i" will show the "per interface statistic" information, but currently, actually according to the source, developers only implemented the "ip6_ifstats" and "icmp6_ifstats", two methods only and they are for INET6, so "netstat -s -i -4" will get nothing, and "netstat -s -i -6" will be the same as "netstat -s -i"
For bugs matching the following conditions: - Status == In Progress - Assignee == "bugs@FreeBSD.org" - Last Modified Year <= 2017 Do - Set Status to "Open"
I decided to look at this today, and to my surprise, I found that netstat doesn't implement per-interface statistics for IPv4 at all. In usr.bin/netstat/main.c, line 105-106: { N_RIPCBINFO, N_IPSTAT, 1, protopr, ip_stats, NULL, "ip", 1, IPPROTO_RAW }, The 6th argument is supposed to be the function which prints per-interface statistics. The equivelant lines for IPv6 (line 141-142): { N_RIPCBINFO, N_IP6STAT, 1, protopr, ip6_stats, ip6_ifstats, "ip6", 1, IPPROTO_RAW }, ip6_stats and ip6_ifstats are implemented in usr.bin/netstat/inet6.c. ip_stats (but no ip_ifstats) is implemented in usr.bin/netstat/inet.c. tl;dr: someone has to implement functions to print the IPv4 information as well.
... And I just realized I didn't see the comment by Eitan Adler before starting to dig into this. Oops.