NetBSD/sys/compat/linux/common/linux_socketcall.h

249 lines
7.3 KiB
C

/* $NetBSD: linux_socketcall.h,v 1.15 2008/04/28 20:23:44 martin Exp $ */
/*-
* Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Frank van der Linden and Eric Haszlakiewicz.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Copyright (c) 1995 Frank van der Linden
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed for the NetBSD Project
* by Frank van der Linden
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _LINUX_SOCKETCALL_H
#define _LINUX_SOCKETCALL_H
/* Alpha does not use the socketcall multiplexer */
#if !defined(__alpha__) && !defined(__amd64__) && !defined(COMPAT_LINUX32)
/* Used on: arm, i386, m68k, mips, ppc, sparc, sparc64 */
/* Used for COMPAT_LINUX32 on amd64 */
/* Not used on: alpha */
/*
* Values passed to the Linux socketcall() syscall, determining the actual
* action to take.
*/
#define LINUX_SYS_socket 1
#define LINUX_SYS_bind 2
#define LINUX_SYS_connect 3
#define LINUX_SYS_listen 4
#define LINUX_SYS_accept 5
#define LINUX_SYS_getsockname 6
#define LINUX_SYS_getpeername 7
#define LINUX_SYS_socketpair 8
#define LINUX_SYS_send 9
#define LINUX_SYS_recv 10
#define LINUX_SYS_sendto 11
#define LINUX_SYS_recvfrom 12
#define LINUX_SYS_shutdown 13
#define LINUX_SYS_setsockopt 14
#define LINUX_SYS_getsockopt 15
#define LINUX_SYS_sendmsg 16
#define LINUX_SYS_recvmsg 17
#define LINUX_MAX_SOCKETCALL 17
/*
* Structures for the arguments of the different system calls. This looks
* a little better than copyin() of all values one by one.
*/
/* !!!: This should be at least as large as any other struct here. */
struct linux_socketcall_dummy_args {
int dummy_ints[4]; /* Max 4 ints */
void *dummy_ptrs[3]; /* Max 3 pointers */
};
struct linux_sys_socket_args {
syscallarg(int) domain;
syscallarg(int) type;
syscallarg(int) protocol;
};
struct linux_sys_socketpair_args {
syscallarg(int) domain;
syscallarg(int) type;
syscallarg(int) protocol;
syscallarg(int *) rsv;
};
struct linux_sys_sendto_args {
syscallarg(int) s;
syscallarg(void *) msg;
syscallarg(int) len;
syscallarg(int) flags;
syscallarg(struct osockaddr *) to;
syscallarg(int) tolen;
};
struct linux_sys_recvfrom_args {
syscallarg(int) s;
syscallarg(void *) buf;
syscallarg(int) len;
syscallarg(int) flags;
syscallarg(struct osockaddr *) from;
syscallarg(int *) fromlenaddr;
};
struct linux_sys_setsockopt_args {
syscallarg(int) s;
syscallarg(int) level;
syscallarg(int) optname;
syscallarg(void *) optval;
syscallarg(int) optlen;
};
struct linux_sys_getsockopt_args {
syscallarg(int) s;
syscallarg(int) level;
syscallarg(int) optname;
syscallarg(void *) optval;
syscallarg(int *) optlen;
};
struct linux_sys_bind_args {
syscallarg(int) s;
syscallarg(struct osockaddr *) name;
syscallarg(int) namelen;
};
struct linux_sys_connect_args {
syscallarg(int) s;
syscallarg(struct osockaddr *) name;
syscallarg(int) namelen;
};
struct linux_sys_accept_args {
syscallarg(int) s;
syscallarg(struct osockaddr *) name;
syscallarg(int *) anamelen;
};
struct linux_sys_getsockname_args {
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 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 *) buf;
syscallarg(int) len;
syscallarg(int) flags;
};
struct linux_sys_recv_args {
syscallarg(int) s;
syscallarg(void *) buf;
syscallarg(int) len;
syscallarg(int) flags;
};
/* These are only used for their size: */
struct linux_sys_listen_args {
syscallarg(int) s;
syscallarg(int) backlog;
};
struct linux_sys_shutdown_args {
syscallarg(int) s;
syscallarg(int) how;
};
# ifdef _KERNEL
__BEGIN_DECLS
#define SYS_DEF(foo) int foo(struct lwp *, const struct foo##_args *, register_t *);
SYS_DEF(linux_sys_socket)
SYS_DEF(linux_sys_socketpair)
SYS_DEF(linux_sys_sendto)
SYS_DEF(linux_sys_recvfrom)
SYS_DEF(linux_sys_setsockopt)
SYS_DEF(linux_sys_getsockopt)
SYS_DEF(linux_sys_connect)
SYS_DEF(linux_sys_bind)
SYS_DEF(linux_sys_getsockname)
SYS_DEF(linux_sys_getpeername)
SYS_DEF(linux_sys_sendmsg)
SYS_DEF(linux_sys_recvmsg)
SYS_DEF(linux_sys_recv)
SYS_DEF(linux_sys_send)
SYS_DEF(linux_sys_accept)
#undef SYS_DEF
__END_DECLS
# endif /* !_KERNEL */
# endif
#endif /* !_LINUX_SOCKETCALL_H */