ifconfig description

bart bart at convex.ru
Thu Dec 1 20:55:57 GMT 2005


*** sys/net/if.c.orig   Fri Apr 15 07:52:03 2005
--- sys/net/if.c        Sat Nov 26 17:34:41 2005
***************
*** 1072,1077 ****
--- 1072,1078 ----
  {
        struct ifreq *ifr;
        struct ifstat *ifs;
+       struct ifdescreq *ifrd;
        int error = 0;
        int new_flags;
        size_t namelen, onamelen;
***************
*** 1214,1219 ****
--- 1215,1232 ----
                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_descr, ifrd->ifrd_descr, MAXIFDESCRSIZE);
+               break;
+ 
+       case SIOCGIFDESCR:
+               ifrd = (struct ifdescreq *)data;
+               strlcpy(ifrd->ifrd_descr, ifp->if_descr, MAXIFDESCRSIZE);
                break;
  
        case SIOCSIFMETRIC:

*** sys/net/if.h.orig     Tue Mar  1 03:03:13 2005
--- sys/net/if.h        Tue Nov 29 17:21:13 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.
***************
*** 269,274 ****
--- 272,282 ----
        struct  sockaddr ifra_addr;
        struct  sockaddr ifra_broadaddr;
        struct  sockaddr ifra_mask;
+ };
+ 
+ struct        ifdescreq {
+       char    ifrd_name[IFNAMSIZ];            /* if name, e.g. "en0" */
+       char    ifrd_descr[MAXIFDESCRSIZE];     /* interface description */
  };
  
  struct ifmediareq {


*** sys/net/if_var.h.orig     Sun May  8 13:00:16 2005
--- sys/net/if_var.h    Sat Nov 26 17:34:06 2005
***************
*** 200,205 ****
--- 200,206 ----
        int     if_afdata_initialized;
        struct  mtx if_afdata_mtx;
        struct  task if_starttask;      /* task for IFF_NEEDSGIANT */
+       char    if_descr[MAXIFDESCRSIZE];
  };
  
  typedef void if_init_f_t(void *);


*** sbin/ifconfig/ifconfig.c.orig      Mon Mar 21 21:05:33 2005
--- sbin/ifconfig/ifconfig.c    Fri Nov 25 15:29:35 2005
***************
*** 175,180 ****
--- 175,181 ----
  c_func        setifflags, setifmetric, setifmtu, setifcap;
  c_func        clone_destroy;
  c_func        setifname;
+ c_func        setifdescr;
  
  
  void clone_create(void);
***************
*** 310,315 ****
--- 311,317 ----
        { "noicmp",     IFF_LINK1,      setifflags },
        { "mtu",        NEXTARG,        setifmtu },
        { "name",       NEXTARG,        setifname },
+       { "descr",      NEXTARG,        setifdescr },
        { 0,            0,              setifaddr },
        { 0,            0,              setifdstaddr },
  };
***************
*** 1008,1013 ****
--- 1010,1031 ----
        (*afp->af_getaddr)(addr, DSTADDR);
  }
  
+ 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;
+       }
+ }
+ 
+ 
  /*
   * Note: doing an SIOCIGIFFLAGS scribbles on the union portion
   * of the ifreq structure, which may confuse other parts of ifconfig.
***************
*** 1121,1126 ****
--- 1139,1145 ----
        struct  rt_addrinfo info;
        int allfamilies, s;
        struct ifstat ifs;
+       struct ifdescreq ifrd;
  
        if (afp == NULL) {
                allfamilies = 1;
***************
*** 1219,1224 ****
--- 1238,1250 ----
  #endif
                )
                warnx("%s has no %s interface address!", name, afp->af_name);
+ 
+ /* 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;


*** sys/sys/sockio.h.orig     Wed Apr  7 10:19:49 2004
--- sys/sys/sockio.h    Fri Nov 25 15:07:55 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 */



More information about the freebsd-net mailing list