Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Need advise about linux32 on amd64



On Fri, Jun 20, 2008 at 07:11:23PM +0200, Nicolas Joly wrote:
> 
> Yes. I had a quick look, and SIOCGIFCONF ioctl is currently broken on
> amd64 for both compat linux and linux32 ...
[...]
> As for linux32, the problem is burried in compat netbsd32 where
> *SIOCGIFCONF ioctls handling looks wrong. It does not follow the
> native definitions ... And is missing OOSIOCGIFCONF currently needed
> by linux compat.

Can you try the attached, which should fix SIOCGIFCONF ioctl under
compat linux32 (other ioctls may needs to be adjusted too) ?

-- 
Nicolas Joly

Biological Software and Databanks.
Institut Pasteur, Paris.
Index: sys/compat/linux32/common/linux32_socket.c
===================================================================
RCS file: /cvsroot/src/sys/compat/linux32/common/linux32_socket.c,v
retrieving revision 1.6
diff -u -p -r1.6 linux32_socket.c
--- sys/compat/linux32/common/linux32_socket.c  19 Jun 2008 16:09:25 -0000      
1.6
+++ sys/compat/linux32/common/linux32_socket.c  21 Jun 2008 13:25:31 -0000
@@ -53,10 +53,15 @@ __KERNEL_RCSID(0, "$NetBSD: linux32_sock
 #include <machine/types.h>
 
 #include <net/if.h>
+#include <net/route.h>
+
+#include <netinet/in.h>
+#include <netinet/ip_mroute.h>
 
 #include <sys/syscallargs.h>
 
 #include <compat/netbsd32/netbsd32.h>
+#include <compat/netbsd32/netbsd32_ioctl.h>
 #include <compat/netbsd32/netbsd32_conv.h>
 #include <compat/netbsd32/netbsd32_syscallargs.h>
 #include <compat/sys/sockio.h>
@@ -376,8 +381,8 @@ linux32_ioctl_socket(struct lwp *l, cons
 {
        /* {
                syscallarg(int) fd;
-               syscallarg(u_long) com;
-               syscallarg(void *) data;
+               syscallarg(netbsd32_u_long) com;
+               syscallarg(netbsd32_voidp) data;
        } */
        u_long com;
        int error = 0, isdev = 0, dosys = 1;
@@ -424,7 +429,7 @@ linux32_ioctl_socket(struct lwp *l, cons
 
        switch (com) {
        case LINUX_SIOCGIFCONF:
-               SCARG(&ia, com) = OOSIOCGIFCONF;
+               SCARG(&ia, com) = OOSIOCGIFCONF32;
                break;
        case LINUX_SIOCGIFFLAGS:
                SCARG(&ia, com) = OSIOCGIFFLAGS;
Index: sys/compat/netbsd32/netbsd32_ioctl.c
===================================================================
RCS file: /cvsroot/src/sys/compat/netbsd32/netbsd32_ioctl.c,v
retrieving revision 1.39
diff -u -p -r1.39 netbsd32_ioctl.c
--- sys/compat/netbsd32/netbsd32_ioctl.c        29 May 2008 14:51:26 -0000      
1.39
+++ sys/compat/netbsd32/netbsd32_ioctl.c        21 Jun 2008 13:25:31 -0000
@@ -490,6 +490,8 @@ printf("netbsd32_ioctl(%d, %x, %x): %s g
                IOCTL_STRUCT_CONV_TO(SIOCPHASE2, ifreq);
 #endif
 
+       case OOSIOCGIFCONF32:
+               IOCTL_STRUCT_CONV_TO(OOSIOCGIFCONF, ifconf);
        case OSIOCGIFCONF32:
                IOCTL_STRUCT_CONV_TO(OSIOCGIFCONF, ifconf);
        case SIOCGIFCONF32:
Index: sys/compat/netbsd32/netbsd32_ioctl.h
===================================================================
RCS file: /cvsroot/src/sys/compat/netbsd32/netbsd32_ioctl.h,v
retrieving revision 1.22
diff -u -p -r1.22 netbsd32_ioctl.h
--- sys/compat/netbsd32/netbsd32_ioctl.h        29 May 2008 14:51:26 -0000      
1.22
+++ sys/compat/netbsd32/netbsd32_ioctl.h        21 Jun 2008 13:25:31 -0000
@@ -220,8 +220,9 @@ struct      netbsd32_ifconf {
 };
 #if 1
 /* from <sys/sockio.h> */
-#define        OSIOCGIFCONF32  _IOWR('i', 20, struct netbsd32_ifconf)  /* get 
ifnet list */
-#define        SIOCGIFCONF32   _IOWR('i', 36, struct netbsd32_ifconf)  /* get 
ifnet list */
+#define        OOSIOCGIFCONF32 _IOWR('i', 20, struct netbsd32_ifconf)  /* get 
ifnet list */
+#define        OSIOCGIFCONF32  _IOWR('i', 36, struct netbsd32_ifconf)  /* get 
ifnet list */
+#define        SIOCGIFCONF32   _IOWR('i', 38, struct netbsd32_ifconf)  /* get 
ifnet list */
 #endif
 
 /* from <net/if.h> */


Home | Main Index | Thread Index | Old Index