diff options
| author | jdolecek <jdolecek@NetBSD.org> | 2001-07-04 10:09:24 +0000 |
|---|---|---|
| committer | jdolecek <jdolecek@NetBSD.org> | 2001-07-04 10:09:24 +0000 |
| commit | 8cbefdbb89b5ee49aac4cf8d9591ef23f21584a2 (patch) | |
| tree | 3111cacff9647cc2cc173325b543e08ba12ae80f /sys/compat/linux/common/linux_socketcall.h | |
| parent | 76159ce4fe364beaf3c3cfc110e6f23e5fb051f0 (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.h')
| -rw-r--r-- | sys/compat/linux/common/linux_socketcall.h | 72 |
1 files changed, 40 insertions, 32 deletions
diff --git a/sys/compat/linux/common/linux_socketcall.h b/sys/compat/linux/common/linux_socketcall.h index cf055c40714..43f5dcbacb8 100644 --- a/sys/compat/linux/common/linux_socketcall.h +++ b/sys/compat/linux/common/linux_socketcall.h @@ -1,4 +1,4 @@ -/* $NetBSD: linux_socketcall.h,v 1.5 1999/03/25 04:26:45 sommerfe Exp $ */ +/* $NetBSD: linux_socketcall.h,v 1.6 2001/07/04 10:09:24 jdolecek Exp $ */ /*- * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc. @@ -130,7 +130,7 @@ struct linux_sys_sendto_args { syscallarg(void *) msg; syscallarg(int) len; syscallarg(int) flags; - syscallarg(struct sockaddr *) to; + syscallarg(struct osockaddr *) to; syscallarg(int) tolen; }; @@ -139,8 +139,8 @@ struct linux_sys_recvfrom_args { syscallarg(void *) buf; syscallarg(int) len; syscallarg(int) flags; - syscallarg(struct sockaddr *) from; - syscallarg(int *) fromlen; + syscallarg(struct osockaddr *) from; + syscallarg(int *) fromlenaddr; }; struct linux_sys_setsockopt_args { @@ -159,72 +159,72 @@ struct linux_sys_getsockopt_args { syscallarg(int *) optlen; }; -/* These are only used for their size: */ - struct linux_sys_bind_args { syscallarg(int) s; - syscallarg(struct sockaddr *) name; + syscallarg(struct osockaddr *) name; syscallarg(int) namelen; }; struct linux_sys_connect_args { syscallarg(int) s; - syscallarg(struct sockaddr *) name; + syscallarg(struct osockaddr *) name; syscallarg(int) namelen; }; -struct linux_sys_listen_args { - syscallarg(int) s; - syscallarg(int) backlog; -}; - struct linux_sys_accept_args { syscallarg(int) s; - syscallarg(struct sockaddr *) addr; - syscallarg(int *) namelen; + syscallarg(struct osockaddr *) name; + syscallarg(int *) anamelen; }; struct linux_sys_getsockname_args { - syscallarg(int) s; - syscallarg(struct sockaddr *) addr; - syscallarg(int *) namelen; + syscallarg(int) fdes; + syscallarg(struct osockaddr *) asa; + syscallarg(int *) alen; }; struct linux_sys_getpeername_args { + syscallarg(int) fdes; + syscallarg(struct osockaddr *) asa; + syscallarg(int *) alen; +}; + +struct linux_sys_sendmsg_args { syscallarg(int) s; - syscallarg(struct sockaddr *) addr; - syscallarg(int *) namelen; + syscallarg(struct msghdr *) msg; + syscallarg(u_int) flags; +}; + +struct linux_sys_recvmsg_args { + syscallarg(int) s; + syscallarg(struct msghdr *) msg; + syscallarg(u_int) flags; }; struct linux_sys_send_args { syscallarg(int) s; - syscallarg(void *) msg; + syscallarg(void *) buf; syscallarg(int) len; syscallarg(int) flags; }; struct linux_sys_recv_args { syscallarg(int) s; - syscallarg(void *) msg; + syscallarg(void *) buf; syscallarg(int) len; syscallarg(int) flags; }; -struct linux_sys_shutdown_args { - syscallarg(int) s; - syscallarg(int) how; -}; +/* These are only used for their size: */ -struct linux_sys_sendmsg_args { +struct linux_sys_listen_args { syscallarg(int) s; - syscallarg(struct msghdr *) msg; - syscallarg(u_int) flags; + syscallarg(int) backlog; }; -struct linux_sys_recvmsg_args { +struct linux_sys_shutdown_args { syscallarg(int) s; - syscallarg(struct msghdr *) msg; - syscallarg(u_int) flags; + syscallarg(int) how; }; # ifdef _KERNEL @@ -236,6 +236,14 @@ int linux_sys_recvfrom __P((struct proc *, void *, register_t *)); int linux_sys_setsockopt __P((struct proc *, void *, register_t *)); int linux_sys_getsockopt __P((struct proc *, void *, register_t *)); int linux_sys_connect __P((struct proc *, void *, register_t *)); +int linux_sys_bind __P((struct proc *, void *, register_t *)); +int linux_sys_getsockname __P((struct proc *, void *, register_t *)); +int linux_sys_getpeername __P((struct proc *, void *, register_t *)); +int linux_sys_sendmsg __P((struct proc *, void *, register_t *)); +int linux_sys_recvmsg __P((struct proc *, void *, register_t *)); +int linux_sys_recv __P((struct proc *, void *, register_t *)); +int linux_sys_send __P((struct proc *, void *, register_t *)); +int linux_sys_accept __P((struct proc *, void *, register_t *)); __END_DECLS # endif /* !_KERNEL */ |
