summaryrefslogtreecommitdiff
path: root/sys/compat/linux/common/linux_socketcall.c
diff options
context:
space:
mode:
authorjdolecek <jdolecek@NetBSD.org>2001-07-04 10:09:24 +0000
committerjdolecek <jdolecek@NetBSD.org>2001-07-04 10:09:24 +0000
commit8cbefdbb89b5ee49aac4cf8d9591ef23f21584a2 (patch)
tree3111cacff9647cc2cc173325b543e08ba12ae80f /sys/compat/linux/common/linux_socketcall.c
parent76159ce4fe364beaf3c3cfc110e6f23e5fb051f0 (diff)
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.
Diffstat (limited to 'sys/compat/linux/common/linux_socketcall.c')
-rw-r--r--sys/compat/linux/common/linux_socketcall.c20
1 files changed, 10 insertions, 10 deletions
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;
}