not just on interfaces with tunnel addresses on them

ok?

Index: ifconfig.c
===================================================================
RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v
retrieving revision 1.317
diff -u -p -r1.317 ifconfig.c
--- ifconfig.c  2 Mar 2016 19:45:10 -0000       1.317
+++ ifconfig.c  3 Apr 2016 23:28:14 -0000
@@ -181,6 +181,7 @@ void        settunnelinst(const char *, int);
 void   settunnelttl(const char *, int);
 void   setvnetid(const char *, int);
 void   delvnetid(const char *, int);
+void   getvnetid(void);
 void   setifparent(const char *, int);
 void   delifparent(const char *, int);
 void   getifparent(void);
@@ -2850,8 +2851,6 @@ phys_status(int force)
 
        if (dstport)
                printf(":%u", ntohs(dstport));
-       if (ioctl(s, SIOCGVNETID, (caddr_t)&ifr) == 0)
-               printf(" vnetid %d", ifr.ifr_vnetid);
        if (ioctl(s, SIOCGLIFPHYTTL, (caddr_t)&ifr) == 0 && ifr.ifr_ttl > 0)
                printf(" ttl %d", ifr.ifr_ttl);
 #ifndef SMALL
@@ -2943,6 +2942,7 @@ status(int link, struct sockaddr_dl *sdl
                printf("\tpatch: %s\n", ifname);
 #endif
        vlan_status();
+       getvnetid();
        getifparent();
 #ifndef SMALL
        carp_status();
@@ -3396,6 +3396,25 @@ delvnetid(const char *ignored, int alsoi
 {
        if (ioctl(s, SIOCDVNETID, &ifr) < 0)
                warn("SIOCDVNETID");
+}
+
+void
+getvnetid(void)
+{
+       if (strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)) >=
+           sizeof(ifr.ifr_name))
+               errx(1, "vnetid: name is too long");
+
+       if (ioctl(s, SIOCGVNETID, &ifr) == -1) {
+               if (errno != EADDRNOTAVAIL)
+                       return;
+
+               printf("\tvnetid: none\n");
+
+               return;
+       }
+
+       printf("\tvnetid: %u\n", ifr.ifr_vnetid);
 }
 
 void


Reply via email to