svn commit: r215175 - in stable/8/sys: net sys
Sergey Kandaurov
pluknet at FreeBSD.org
Fri Nov 12 12:00:00 UTC 2010
Author: pluknet
Date: Fri Nov 12 11:59:59 2010
New Revision: 215175
URL: http://svn.freebsd.org/changeset/base/215175
Log:
MFC r214136:
Reshuffle SIOCGIFCONF32 handler.
Approved by: kib (mentor)
Modified:
stable/8/sys/net/if.c
stable/8/sys/net/if.h
stable/8/sys/sys/sockio.h
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
stable/8/sys/dev/xen/xenpci/ (props changed)
Modified: stable/8/sys/net/if.c
==============================================================================
--- stable/8/sys/net/if.c Fri Nov 12 11:36:12 2010 (r215174)
+++ stable/8/sys/net/if.c Fri Nov 12 11:59:59 2010 (r215175)
@@ -87,6 +87,11 @@
#include <security/mac/mac_framework.h>
+#ifdef COMPAT_FREEBSD32
+#include <sys/mount.h>
+#include <compat/freebsd32/freebsd32.h>
+#endif
+
struct ifindex_entry {
struct ifnet *ife_ifnet;
};
@@ -2459,6 +2464,17 @@ ifhwioctl(u_long cmd, struct ifnet *ifp,
return (error);
}
+#ifdef COMPAT_FREEBSD32
+struct ifconf32 {
+ int32_t ifc_len;
+ union {
+ uint32_t ifcu_buf;
+ uint32_t ifcu_req;
+ } ifc_ifcu;
+};
+#define SIOCGIFCONF32 _IOWR('i', 36, struct ifconf32)
+#endif
+
/*
* Interface ioctls.
*/
@@ -2473,10 +2489,21 @@ ifioctl(struct socket *so, u_long cmd, c
switch (cmd) {
case SIOCGIFCONF:
case OSIOCGIFCONF:
-#ifdef __amd64__
+ return (ifconf(cmd, data));
+
+#ifdef COMPAT_FREEBSD32
case SIOCGIFCONF32:
+ {
+ struct ifconf32 *ifc32;
+ struct ifconf ifc;
+
+ ifc32 = (struct ifconf32 *)data;
+ ifc.ifc_len = ifc32->ifc_len;
+ ifc.ifc_buf = PTRIN(ifc32->ifc_buf);
+
+ return (ifconf(SIOCGIFCONF, (void *)&ifc));
+ }
#endif
- return (ifconf(cmd, data));
}
ifr = (struct ifreq *)data;
@@ -2703,23 +2730,12 @@ static int
ifconf(u_long cmd, caddr_t data)
{
struct ifconf *ifc = (struct ifconf *)data;
-#ifdef __amd64__
- struct ifconf32 *ifc32 = (struct ifconf32 *)data;
- struct ifconf ifc_swab;
-#endif
struct ifnet *ifp;
struct ifaddr *ifa;
struct ifreq ifr;
struct sbuf *sb;
int error, full = 0, valid_len, max_len;
-#ifdef __amd64__
- if (cmd == SIOCGIFCONF32) {
- ifc_swab.ifc_len = ifc32->ifc_len;
- ifc_swab.ifc_buf = (caddr_t)(uintptr_t)ifc32->ifc_buf;
- ifc = &ifc_swab;
- }
-#endif
/* Limit initial buffer size to MAXPHYS to avoid DoS from userspace. */
max_len = MAXPHYS - 1;
@@ -2809,10 +2825,6 @@ again:
}
ifc->ifc_len = valid_len;
-#ifdef __amd64__
- if (cmd == SIOCGIFCONF32)
- ifc32->ifc_len = valid_len;
-#endif
sbuf_finish(sb);
error = copyout(sbuf_data(sb), ifc->ifc_req, ifc->ifc_len);
sbuf_delete(sb);
Modified: stable/8/sys/net/if.h
==============================================================================
--- stable/8/sys/net/if.h Fri Nov 12 11:36:12 2010 (r215174)
+++ stable/8/sys/net/if.h Fri Nov 12 11:59:59 2010 (r215175)
@@ -391,16 +391,6 @@ struct ifconf {
#define ifc_req ifc_ifcu.ifcu_req /* array of structures returned */
};
-#if defined (__amd64__)
-struct ifconf32 {
- int ifc_len; /* size of associated buffer */
- union {
- u_int ifcu_buf;
- u_int ifcu_req;
- } ifc_ifcu;
-};
-#endif
-
/*
* interface groups
*/
Modified: stable/8/sys/sys/sockio.h
==============================================================================
--- stable/8/sys/sys/sockio.h Fri Nov 12 11:36:12 2010 (r215174)
+++ stable/8/sys/sys/sockio.h Fri Nov 12 11:59:59 2010 (r215175)
@@ -62,9 +62,6 @@
#define SIOCSIFBRDADDR _IOW('i', 19, struct ifreq) /* set broadcast addr */
#define OSIOCGIFCONF _IOWR('i', 20, struct ifconf) /* get ifnet list */
#define SIOCGIFCONF _IOWR('i', 36, struct ifconf) /* get ifnet list */
-#if defined (__amd64__)
-#define SIOCGIFCONF32 _IOWR('i', 36, struct ifconf32) /* get ifnet list */
-#endif
#define OSIOCGIFNETMASK _IOWR('i', 21, struct ifreq) /* get net addr mask */
#define SIOCGIFNETMASK _IOWR('i', 37, struct ifreq) /* get net addr mask */
#define SIOCSIFNETMASK _IOW('i', 22, struct ifreq) /* set net addr mask */
More information about the svn-src-stable-8
mailing list