Put back the previous hack to make compat_cvtcmd() work for all the ioctls
that use struct ifreq which have not been explicitly versioned. If someone feels like fixing it with a list aproach, I think below is a complete list - the one used in the previous version missed a lot of them. BIOCGETIF BIOCSETIF GREDSOCK GREGADDRD GREGADDRS GREGPROTO GRESADDRD GRESADDRS GRESPROTO GRESSOCK SIOCADDMULTI SIOCDELMULTI SIOCDIFADDR SIOCDIFADDR_IN6 SIOCDIFPHYADDR SIOCGDEFIFACE_IN6 SIOCGIFADDR SIOCGIFADDR_IN6 SIOCGIFAFLAG_IN6 SIOCGIFALIFETIME_IN6 SIOCGIFBRDADDR SIOCGIFDLT SIOCGIFDSTADDR SIOCGIFDSTADDR_IN6 SIOCGIFFLAGS SIOCGIFGENERIC SIOCGIFMETRIC SIOCGIFMTU SIOCGIFNETMASK SIOCGIFNETMASK_IN6 SIOCGIFPDSTADDR SIOCGIFPDSTADDR_IN6 SIOCGIFPSRCADDR SIOCGIFPSRCADDR_IN6 SIOCGIFSTAT_ICMP6 SIOCGIFSTAT_IN6 SIOCGPVCSIF SIOCGVH SIOCIFCREATE SIOCIFDESTROY SIOCSDEFIFACE_IN6 SIOCSIFADDR SIOCSIFADDR_IN6 SIOCSIFALIFETIME_IN6 SIOCSIFBRDADDR SIOCSIFDSTADDR SIOCSIFDSTADDR_IN6 SIOCSIFFLAGS SIOCSIFGENERIC SIOCSIFMEDIA SIOCSIFMETRIC SIOCSIFMTU SIOCSIFNETMASK SIOCSIFNETMASK_IN6 SIOCSNDFLUSH_IN6 SIOCSPFXFLUSH_IN6 SIOCSPVCSIF SIOCSRTRFLUSH_IN6 SIOCSVH TAPGIFNAME
This commit is contained in:
parent
3749a6a002
commit
1bcc2150d3
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: uipc_syscalls_43.c,v 1.33 2007/08/20 04:49:41 skd Exp $ */
|
||||
/* $NetBSD: uipc_syscalls_43.c,v 1.34 2007/08/20 16:52:59 martin Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1989, 1990, 1993
|
||||
|
@ -32,7 +32,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls_43.c,v 1.33 2007/08/20 04:49:41 skd Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls_43.c,v 1.34 2007/08/20 16:52:59 martin Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -389,37 +389,26 @@ compat_43_sa_put(from)
|
|||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* XXX: The following check depends on the fact that the only struct
|
||||
* sized 0x20 bytes in the ifioctls is struct oifreq and struct ifcapreq.
|
||||
* If that changes, then we'll need to use an explicit list here.
|
||||
* (But the actual list is ~60 entries long and uses includes all over
|
||||
* the tree...)
|
||||
*/
|
||||
u_long
|
||||
compat_cvtcmd(u_long cmd)
|
||||
{
|
||||
u_long ncmd;
|
||||
|
||||
switch (cmd) {
|
||||
case OSIOCSIFADDR:
|
||||
case OOSIOCGIFADDR:
|
||||
case OSIOCSIFDSTADDR:
|
||||
case OOSIOCGIFDSTADDR:
|
||||
case OSIOCSIFFLAGS:
|
||||
case OSIOCGIFFLAGS:
|
||||
case OOSIOCGIFBRDADDR:
|
||||
case OSIOCSIFBRDADDR:
|
||||
case OOSIOCGIFCONF:
|
||||
case OOSIOCGIFNETMASK:
|
||||
case OSIOCSIFNETMASK:
|
||||
case OSIOCGIFCONF:
|
||||
case OSIOCADDMULTI:
|
||||
case OSIOCDELMULTI:
|
||||
case OSIOCSIFMEDIA:
|
||||
case OBIOCGETIF:
|
||||
case OBIOCSETIF:
|
||||
case OTAPGIFNAME:
|
||||
ncmd = ((cmd) & ~(IOCPARM_MASK << IOCPARM_SHIFT)) |
|
||||
(sizeof(struct ifreq) << IOCPARM_SHIFT);
|
||||
break;
|
||||
default:
|
||||
ncmd = cmd;
|
||||
}
|
||||
return (ncmd);
|
||||
#define ifcapreq(x) ((x) == SIOCGIFCAP || (x) == SIOCSIFCAP)
|
||||
|
||||
ncmd = ((IOCPARM_LEN(cmd) == sizeof(struct oifreq) && !ifcapreq(cmd)) ?
|
||||
((cmd & ~(IOCPARM_MASK << IOCPARM_SHIFT)) |
|
||||
(sizeof(struct ifreq) << IOCPARM_SHIFT)) : cmd);
|
||||
|
||||
return ncmd;
|
||||
}
|
||||
|
||||
int
|
||||
|
|
Loading…
Reference in New Issue