From 8cbefdbb89b5ee49aac4cf8d9591ef23f21584a2 Mon Sep 17 00:00:00 2001 From: jdolecek Date: Wed, 4 Jul 2001 10:09:24 +0000 Subject: Do address family (AF_*) number translation for socket system calls which pass socket address in our or out. This makes Linux programs using IPv6 working under emulation. This addresses kern/13279 by Jun-ichiro itojun Hagino. Change sendmsg()/recvmsg() to expect the control information to be passed the standard way (not 4.3BSD one, imlied by compat_43 code or MSG_COMPAT). Linux uses different (arguably broken) CMSG_ALIGN() on some architectures unfortunately, that would need to be handled eventually. Also provide some other trivial stubs (like linux_sys_send()) to avoid unneeded dependance on uipc_syscalls_43.c. --- sys/compat/linux/common/linux_socketcall.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'sys/compat/linux/common/linux_socketcall.c') diff --git a/sys/compat/linux/common/linux_socketcall.c b/sys/compat/linux/common/linux_socketcall.c index 12055b127f5..2992b28d162 100644 --- a/sys/compat/linux/common/linux_socketcall.c +++ b/sys/compat/linux/common/linux_socketcall.c @@ -1,4 +1,4 @@ -/* $NetBSD: linux_socketcall.c,v 1.20 2001/06/22 08:27:05 jdolecek Exp $ */ +/* $NetBSD: linux_socketcall.c,v 1.21 2001/07/04 10:09:24 jdolecek Exp $ */ /*- * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc. @@ -79,7 +79,7 @@ */ /* The sizes of the arguments. Used for copyin. */ -int linux_socketcall_argsize[] = { +int linux_socketcall_argsize[LINUX_MAX_SOCKETCALL+1] = { -1, sizeof(struct linux_sys_socket_args), /* 1 */ sizeof(struct linux_sys_bind_args), @@ -128,23 +128,23 @@ linux_sys_socketcall(p, v, retval) case LINUX_SYS_socket: return linux_sys_socket(p, (void *)&lda, retval); case LINUX_SYS_bind: - return sys_bind(p, (void *)&lda, retval); + return linux_sys_bind(p, (void *)&lda, retval); case LINUX_SYS_connect: return linux_sys_connect(p, (void *)&lda, retval); case LINUX_SYS_listen: return sys_listen(p, (void *)&lda, retval); case LINUX_SYS_accept: - return compat_43_sys_accept(p, (void *)&lda, retval); + return linux_sys_accept(p, (void *)&lda, retval); case LINUX_SYS_getsockname: - return compat_43_sys_getsockname(p, (void *)&lda, retval); + return linux_sys_getsockname(p, (void *)&lda, retval); case LINUX_SYS_getpeername: - return compat_43_sys_getpeername(p, (void *)&lda, retval); + return linux_sys_getpeername(p, (void *)&lda, retval); case LINUX_SYS_socketpair: return linux_sys_socketpair(p, (void *)&lda, retval); case LINUX_SYS_send: - return compat_43_sys_send(p, (void *)&lda, retval); + return linux_sys_send(p, (void *)&lda, retval); case LINUX_SYS_recv: - return compat_43_sys_recv(p, (void *)&lda, retval); + return linux_sys_recv(p, (void *)&lda, retval); case LINUX_SYS_sendto: return linux_sys_sendto(p, (void *)&lda, retval); case LINUX_SYS_recvfrom: @@ -156,9 +156,9 @@ linux_sys_socketcall(p, v, retval) case LINUX_SYS_getsockopt: return linux_sys_getsockopt(p, (void *)&lda, retval); case LINUX_SYS_sendmsg: - return sys_sendmsg(p, (void *)&lda, retval); + return linux_sys_sendmsg(p, (void *)&lda, retval); case LINUX_SYS_recvmsg: - return sys_recvmsg(p, (void *)&lda, retval); + return linux_sys_recvmsg(p, (void *)&lda, retval); default: return ENOSYS; } -- cgit