svn commit: r190318 - in stable/7: sbin/ifconfig sys sys/contrib/pf
sys/dev/ath/ath_hal sys/dev/cxgb sys/net
Jamie Gritton
jamie at FreeBSD.org
Mon Mar 23 05:08:05 PDT 2009
Author: jamie
Date: Mon Mar 23 12:07:29 2009
New Revision: 190318
URL: http://svn.freebsd.org/changeset/base/190318
Log:
MFC:
r189864:
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.
(reprise r189970)
r190151:
Call the interface's if_ioctl from ifioctl(), if the protocol didn't
handle the ioctl. There are other paths that already call it, but this
allows for a non-interface socket (like AF_LOCAL which ifconfig now
uses) to use a broader class of interface ioctls.
Approved by: bz (mentor)
Modified:
stable/7/sbin/ifconfig/ (props changed)
stable/7/sbin/ifconfig/ifclone.c
stable/7/sbin/ifconfig/ifconfig.c
stable/7/sbin/ifconfig/ifgroup.c
stable/7/sys/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
stable/7/sys/dev/ath/ath_hal/ (props changed)
stable/7/sys/dev/cxgb/ (props changed)
stable/7/sys/net/if.c
Modified: stable/7/sbin/ifconfig/ifclone.c
==============================================================================
--- stable/7/sbin/ifconfig/ifclone.c Mon Mar 23 11:07:34 2009 (r190317)
+++ stable/7/sbin/ifconfig/ifclone.c Mon Mar 23 12:07:29 2009 (r190318)
@@ -53,9 +53,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: stable/7/sbin/ifconfig/ifconfig.c
==============================================================================
--- stable/7/sbin/ifconfig/ifconfig.c Mon Mar 23 11:07:34 2009 (r190317)
+++ stable/7/sbin/ifconfig/ifconfig.c Mon Mar 23 12:07:29 2009 (r190318)
@@ -434,21 +434,22 @@ 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;
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) {
@@ -792,11 +793,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: stable/7/sbin/ifconfig/ifgroup.c
==============================================================================
--- stable/7/sbin/ifconfig/ifgroup.c Mon Mar 23 11:07:34 2009 (r190317)
+++ stable/7/sbin/ifconfig/ifgroup.c Mon Mar 23 12:07:29 2009 (r190318)
@@ -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) {
Modified: stable/7/sys/net/if.c
==============================================================================
--- stable/7/sys/net/if.c Mon Mar 23 11:07:34 2009 (r190317)
+++ stable/7/sys/net/if.c Mon Mar 23 12:07:29 2009 (r190318)
@@ -1968,6 +1968,8 @@ ifioctl(struct socket *so, u_long cmd, c
error = ((*so->so_proto->pr_usrreqs->pru_control)(so, cmd,
data,
ifp, td));
+ if (error == EOPNOTSUPP && ifp != NULL && ifp->if_ioctl != NULL)
+ error = (*ifp->if_ioctl)(ifp, cmd, data);
#else
{
int ocmd = cmd;
@@ -2009,6 +2011,9 @@ ifioctl(struct socket *so, u_long cmd, c
cmd,
data,
ifp, td));
+ if (error == EOPNOTSUPP && ifp != NULL &&
+ ifp->if_ioctl != NULL)
+ error = (*ifp->if_ioctl)(ifp, cmd, data);
switch (ocmd) {
case OSIOCGIFADDR:
More information about the svn-src-stable
mailing list