summaryrefslogtreecommitdiff
path: root/sys/compat/linux/common/linux_socketcall.h
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.h
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.h')
-rw-r--r--sys/compat/linux/common/linux_socketcall.h72
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 */