[Bug 161986] [patch] netstat(1): Interface auto-width in "netstat -rn"

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Sat Mar 19 20:56:36 UTC 2016


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=161986

Yaroslav Shvets <yaroslav.shvets at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |yaroslav.shvets at gmail.com

--- Comment #4 from Yaroslav Shvets <yaroslav.shvets at gmail.com> ---
I prefer to rename interfaces for convenient operation in ipfw by masks:
# ipfw add allow ... in via if_wan*
# ipfw add deny ... out via if_vpn*
etc

I also observe the effect of trimming interface names after the renaming ones:

# ifconfig lagg0.17 name if_wan_kav_bgp

$ netstat -i | head -2
Name    Mtu Network       Address              Ipkts Ierrs Idrop    Opkts Oerrs
 Coll
if_wa  1500 <Link#1>      00:0c:29:6a:c0:7f   119703     0     0    88432  1027
    0
^^^^^
if_wa instead if_wan_kav_bgp

$ netstat -iW | head -2
Name      Mtu Network       Address              Ipkts Ierrs Idrop    Opkts
Oerrs  Coll
if_wan_  1500 <Link#1>      00:0c:29:6a:c0:7f   119713     0     0    88440 
1027     0
^^^^^^^
if_wan_ instead if_wan_kav_bgp

$ netstat -r | head -5 | tail -2
Destination        Gateway            Flags      Netif Expire
default            gw-kav             UGS    if_wan_k
                                             ^^^^^^^^
if_wan_k instead if_wan_kav_bgp

$ netstat -rW | head -5 | tail -2
Destination        Gateway            Flags       Use    Mtu      Netif Expire
default            gw-kav-bgp         UGS      762465   1500 if_wan_kav
                                                             ^^^^^^^^^^
if_wan_kav instead if_wan_kav_bgp

The problem of trimmed interface names in the output of netstat
is to use uncorrectly hardcoded length interface names.

There are two patches that use IFNAMSIZ from <net/if.h> instead of fixed
values.
$ cd /usr/src/usr.bin/netstat

$ cat patch-if.c
--- if.c.orig   2016-03-19 15:05:31.758234000 +0200
+++ if.c        2016-03-19 21:10:58.987339000 +0200
@@ -240,9 +240,9 @@

        if (!pfunc) {
                if (Wflag)
-                       printf("%-7.7s", "Name");
+                       printf("%-*.*s", IFNAMSIZ-1, IFNAMSIZ-1, "Name");
                else
-                       printf("%-5.5s", "Name");
+                       printf("%-*.*s", IFNAMSIZ-1, IFNAMSIZ-1, "Name");
                printf(" %5.5s %-13.13s %-17.17s %8.8s %5.5s %5.5s",
                    "Mtu", "Network", "Address", "Ipkts", "Ierrs", "Idrop");
                if (bflag)
@@ -282,9 +282,9 @@
                        continue;

                if (Wflag)
-                       printf("%-7.7s", ifa->ifa_name);
+                       printf("%-*.*s", IFNAMSIZ-1, IFNAMSIZ-1,
ifa->ifa_name);
                else
-                       printf("%-5.5s", ifa->ifa_name);
+                       printf("%-*.*s", IFNAMSIZ-1, IFNAMSIZ-1,
ifa->ifa_name);

 #define IFA_MTU(ifa)   (((struct if_data *)(ifa)->ifa_data)->ifi_mtu)
                show_stat("lu", 6, IFA_MTU(ifa), IFA_MTU(ifa));

$ cat patch-route.c
--- route.c.orig        2016-03-19 15:05:31.783407000 +0200
+++ route.c     2016-03-19 21:09:28.400830000 +0200
@@ -238,13 +238,13 @@
 #ifndef INET6
 #define        WID_DST_DEFAULT(af)     18      /* width of destination column
*/
 #define        WID_GW_DEFAULT(af)      18      /* width of gateway column */
-#define        WID_IF_DEFAULT(af)      (Wflag ? 10 : 8) /* width of netif
column */
+#define        WID_IF_DEFAULT(af)      IFNAMSIZ-1      /* width of netif
column */
 #else
 #define        WID_DST_DEFAULT(af) \
        ((af) == AF_INET6 ? (numeric_addr ? 33: 18) : 18)
 #define        WID_GW_DEFAULT(af) \
        ((af) == AF_INET6 ? (numeric_addr ? 29 : 18) : 18)
-#define        WID_IF_DEFAULT(af)      ((af) == AF_INET6 ? 8 : (Wflag ? 10 :
8))
+#define        WID_IF_DEFAULT(af)      ((af) == AF_INET6 ? 8 : IFNAMSIZ-1)
 #endif /*INET6*/

 static int wid_dst;

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list