Author: jamie
Date: Sun Mar 15 22:33:18 2009
New Revision: 189864
URL: http://svn.freebsd.org/changeset/base/189864

Log:
  Default to AF_LOCAL instead of AF_INET sockets for non-family-specific
  operations.  This allows the query operations to work in non-IPv4 jails,
  and will be necessary in a future of possible non-INET networking.
  
  Approved by:  bz (mentor)

Modified:
  head/sbin/ifconfig/ifclone.c
  head/sbin/ifconfig/ifconfig.c
  head/sbin/ifconfig/ifgroup.c

Modified: head/sbin/ifconfig/ifclone.c
==============================================================================
--- head/sbin/ifconfig/ifclone.c        Sun Mar 15 20:17:44 2009        
(r189863)
+++ head/sbin/ifconfig/ifclone.c        Sun Mar 15 22:33:18 2009        
(r189864)
@@ -54,9 +54,9 @@ list_cloners(void)
        int idx;
        int s;
 
-       s = socket(AF_INET, SOCK_DGRAM, 0);
+       s = socket(AF_LOCAL, SOCK_DGRAM, 0);
        if (s == -1)
-               err(1, "socket(AF_INET,SOCK_DGRAM)");
+               err(1, "socket(AF_LOCAL,SOCK_DGRAM)");
 
        memset(&ifcr, 0, sizeof(ifcr));
 

Modified: head/sbin/ifconfig/ifconfig.c
==============================================================================
--- head/sbin/ifconfig/ifconfig.c       Sun Mar 15 20:17:44 2009        
(r189863)
+++ head/sbin/ifconfig/ifconfig.c       Sun Mar 15 22:33:18 2009        
(r189864)
@@ -441,22 +441,23 @@ static const struct cmd setifdstaddr_cmd
        DEF_CMD("ifdstaddr", 0, setifdstaddr);
 
 static int
-ifconfig(int argc, char *const *argv, int iscreate, const struct afswtch *afp)
+ifconfig(int argc, char *const *argv, int iscreate, const struct afswtch *uafp)
 {
-       const struct afswtch *nafp;
+       const struct afswtch *afp, *nafp;
        const struct cmd *p;
        struct callback *cb;
        int s;
 
        strncpy(ifr.ifr_name, name, sizeof ifr.ifr_name);
+       afp = uafp != NULL ? uafp : af_getbyname("inet");
 top:
-       if (afp == NULL)
-               afp = af_getbyname("inet");
        ifr.ifr_addr.sa_family =
                afp->af_af == AF_LINK || afp->af_af == AF_UNSPEC ?
-               AF_INET : afp->af_af;
+               AF_LOCAL : afp->af_af;
 
-       if ((s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0)) < 0)
+       if ((s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0)) < 0 &&
+           (uafp != NULL || errno != EPROTONOSUPPORT ||
+            (s = socket(AF_LOCAL, SOCK_DGRAM, 0)) < 0))
                err(1, "socket(family %u,SOCK_DGRAM", ifr.ifr_addr.sa_family);
 
        while (argc > 0) {
@@ -803,11 +804,12 @@ status(const struct afswtch *afp, const 
 
        if (afp == NULL) {
                allfamilies = 1;
-               afp = af_getbyname("inet");
-       } else
+               ifr.ifr_addr.sa_family = AF_LOCAL;
+       } else {
                allfamilies = 0;
-
-       ifr.ifr_addr.sa_family = afp->af_af == AF_LINK ? AF_INET : afp->af_af;
+               ifr.ifr_addr.sa_family =
+                   afp->af_af == AF_LINK ? AF_LOCAL : afp->af_af;
+       }
        strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
 
        s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0);

Modified: head/sbin/ifconfig/ifgroup.c
==============================================================================
--- head/sbin/ifconfig/ifgroup.c        Sun Mar 15 20:17:44 2009        
(r189863)
+++ head/sbin/ifconfig/ifgroup.c        Sun Mar 15 22:33:18 2009        
(r189864)
@@ -131,9 +131,9 @@ printgroup(const char *groupname)
        int                      len, cnt = 0;
        int                      s;
 
-       s = socket(AF_INET, SOCK_DGRAM, 0);
+       s = socket(AF_LOCAL, SOCK_DGRAM, 0);
        if (s == -1)
-               err(1, "socket(AF_INET,SOCK_DGRAM)");
+               err(1, "socket(AF_LOCAL,SOCK_DGRAM)");
        bzero(&ifgr, sizeof(ifgr));
        strlcpy(ifgr.ifgr_name, groupname, sizeof(ifgr.ifgr_name));
        if (ioctl(s, SIOCGIFGMEMB, (caddr_t)&ifgr) == -1) {
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to