ifconfig description

bart bart at convex.ru
Fri Nov 25 12:22:25 GMT 2005


Hello,

I have couple of bsd routers with dozens vlans
and missed ability to make comment on interface like cisco description

so, here are patches for 6.0 but they can be easily adopted for 5.4

now you can write smthng like
#ifconfig vlan45 descr "Some corp. room 666"

and then you'll see
#ifconfig vlan45
vlan45: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 192.168.1.1 netmask 0xffffffe0
        ether 00:07:e9:69:34:61
        media: Ethernet autoselect (1000baseTX <full-duplex>)        
        status: active
        descr: Some corp. room 666
        vlan: 45 parent interface: em0

bye,
Alex Bartolomey


---- cut ----

*** sys/net/if.c        Thu Sep 29 20:57:06 2005
--- sys1/net/if.c       Fri Nov 25 11:43:25 2005
***************
*** 1201,1206 ****
--- 1201,1207 ----
  {
        struct ifreq *ifr;
        struct ifstat *ifs;
+       struct ifdescreq *ifrd;
        int error = 0;
        int new_flags, temp_flags;
        size_t namelen, onamelen;
***************
*** 1348,1353 ****
--- 1349,1366 ----
                EVENTHANDLER_INVOKE(ifnet_arrival_event, ifp);
                /* Announce the return of the interface. */
                rt_ifannouncemsg(ifp, IFAN_ARRIVAL);
+               break;
+ 
+ /* bartp */
+ 
+       case SIOCSIFDESCR:
+               ifrd = (struct ifdescreq *)data;
+               strlcpy(ifp->if_data.ifi_descr, ifrd->ifrd_descr, MAXIFDESCRSIZE);
+               break;
+ 
+       case SIOCGIFDESCR:
+               ifrd = (struct ifdescreq *)data;
+               strlcpy(ifrd->ifrd_descr, ifp->if_data.ifi_descr, MAXIFDESCRSIZE);
                break;
  
        case SIOCSIFMETRIC:

*** sys/net/if.h        Fri Oct  7 14:00:05 2005
--- sys1/net/if.h       Fri Nov 25 11:30:05 2005
***************
*** 72,77 ****
--- 72,80 ----
        char    *ifcr_buffer;           /* buffer for cloner names */
  };
  
+ #define       MAXIFDESCRSIZE  48
+ 
+ 
  /*
   * Structure describing information about an interface
   * which may be of interest to management entities.
***************
*** 107,112 ****
--- 110,116 ----
        u_int   ifi_timepad;            /* time_t is int, not long on alpha */
  #endif
        struct  timeval ifi_lastchange; /* time of last administrative change */
+       char    ifi_descr[MAXIFDESCRSIZE];
  };
  
  /*-
***************
*** 287,292 ****
--- 291,301 ----
  #define       ifr_reqcap      ifr_ifru.ifru_cap[0]    /* requested capabilities */
  #define       ifr_curcap      ifr_ifru.ifru_cap[1]    /* current capabilities */
  #define       ifr_index       ifr_ifru.ifru_index     /* interface index */
+ };
+ 
+ struct        ifdescreq {
+       char    ifrd_name[IFNAMSIZ];            /* if name, e.g. "en0" */
+       char    ifrd_descr[MAXIFDESCRSIZE];     /* interface description */
  };
  
  #define       _SIZEOF_ADDR_IFREQ(ifr) \

*** sys/sys/sockio.h    Sun Jun  5 03:13:13 2005
--- sys1/sys/sockio.h   Fri Nov 25 11:41:48 2005
***************
*** 80,85 ****
--- 80,90 ----
  #define       SIOCSIFMAC       _IOW('i', 39, struct ifreq)    /* set IF MAC label */
  #define       SIOCSIFNAME      _IOW('i', 40, struct ifreq)    /* set IF name */
  
+ /* bartp */
+ #define       SIOCSIFDESCR     _IOW('i', 41, struct ifdescreq) /* set IF descr */
+ #define       SIOCGIFDESCR    _IOWR('i', 42, struct ifdescreq) /* get IF descr */
+ 
+ 
  #define       SIOCADDMULTI     _IOW('i', 49, struct ifreq)    /* add m'cast addr */
  #define       SIOCDELMULTI     _IOW('i', 50, struct ifreq)    /* del m'cast addr */
  #define       SIOCGIFMTU      _IOWR('i', 51, struct ifreq)    /* get IF mtu */

*** sbin/ifconfig/ifconfig.c    Thu Oct  6 15:01:56 2005
--- sbin1/ifconfig/ifconfig.c   Fri Nov 25 12:09:38 2005
***************
*** 791,796 ****
--- 791,812 ----
        printname = 0;
  }
  
+ static void
+ setifdescr(const char *val, int dummy __unused, int s, 
+     const struct afswtch *afp)
+ {
+       struct ifdescreq ifrd;
+ 
+       strlcpy( ifrd.ifrd_name, ifr.ifr_name,  sizeof(ifr.ifr_name) );
+       strlcpy( ifrd.ifrd_descr, val, sizeof(ifrd.ifrd_descr) );
+ 
+       if (ioctl(s, SIOCSIFDESCR, (caddr_t)&ifrd) < 0) {
+               warn("ioctl (set descr)");
+               return;
+       }
+ }
+ 
+ 
  /*
   * Expand the compacted form of addresses as returned via the
   * configuration read via sysctl().
***************
*** 829,834 ****
--- 845,851 ----
        struct  rt_addrinfo info;
        int allfamilies, s;
        struct ifstat ifs;
+       struct ifdescreq ifrd;
  
        if (afp == NULL) {
                allfamilies = 1;
***************
*** 904,909 ****
--- 921,933 ----
        if (ioctl(s, SIOCGIFSTATUS, &ifs) == 0) 
                printf("%s", ifs.ascii);
  
+ /* bartp */
+ 
+       strncpy(ifrd.ifrd_name, name, sizeof ifrd.ifrd_name);
+       if (ioctl(s, SIOCGIFDESCR, (caddr_t)&ifrd) == 0 && ifrd.ifrd_descr[0]!=0 ) {
+               printf("        descr: %s\n", ifrd.ifrd_descr);
+       }
+ 
        close(s);
        return;
  }
***************
*** 1051,1056 ****
--- 1075,1081 ----
        DEF_CMD("noicmp",       IFF_LINK1,      setifflags),
        DEF_CMD_ARG("mtu",                      setifmtu),
        DEF_CMD_ARG("name",                     setifname),
+       DEF_CMD_ARG("descr",                    setifdescr),
  };
  
  static __constructor void        

-- 
Best regards,
 bart                          mailto:bart at convex.ru



More information about the freebsd-net mailing list