Home | History | Annotate | Line # | Download | only in common
      1 /*	$NetBSD: linux32_socketcall.h,v 1.3 2007/12/20 23:02:58 dsl Exp $ */
      2 
      3 /*-
      4  * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  * 3. All advertising materials mentioning features or use of this software
     15  *    must display the following acknowledgement:
     16  *	This product includes software developed by Emmanuel Dreyfus
     17  * 4. The name of the author may not be used to endorse or promote
     18  *    products derived from this software without specific prior written
     19  *    permission.
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY THE THE AUTHOR AND CONTRIBUTORS ``AS IS''
     22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     23  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     24  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
     25  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     31  * POSSIBILITY OF SUCH DAMAGE.
     32  */
     33 #ifndef _LINUX32_SOCKETCALL_H
     34 #define _LINUX32_SOCKETCALL_H
     35 
     36 #define LINUX32_MAX_SOCKETCALL    17
     37 
     38 #ifdef  syscallarg
     39 #undef  syscallarg
     40 #endif
     41 
     42 #define syscallarg(x)							\
     43 	union {								\
     44 		register32_t pad;					\
     45 									\
     46 		struct { x datum; } le;					\
     47 		struct { /* LINTED zero array dimension */		\
     48 			int8_t pad[  /* CONSTCOND */			\
     49 				(sizeof (register32_t) < sizeof (x))	\
     50 				? 0					\
     51 				: sizeof (register32_t) - sizeof (x)];	\
     52 			x datum;					\
     53 		} be;							\
     54 	}
     55 
     56 struct linux32_sys_socket_args {
     57 	syscallarg(int) domain;
     58 	syscallarg(int) type;
     59 	syscallarg(int) protocol;
     60 };
     61 
     62 struct linux32_sys_socketpair_args {
     63 	syscallarg(int) domain;
     64 	syscallarg(int) type;
     65 	syscallarg(int) protocol;
     66 	syscallarg(netbsd32_intp) rsv;
     67 };
     68 
     69 struct linux32_sys_sendto_args {
     70 	syscallarg(int) s;
     71 	syscallarg(netbsd32_voidp) msg;
     72 	syscallarg(int) len;
     73 	syscallarg(int) flags;
     74 	syscallarg(netbsd32_sockaddrp_t) to;
     75 	syscallarg(int) tolen;
     76 };
     77 
     78 struct linux32_sys_recvfrom_args {
     79 	syscallarg(int) s;
     80 	syscallarg(netbsd32_voidp) buf;
     81 	syscallarg(netbsd32_size_t) len;
     82 	syscallarg(int) flags;
     83 	syscallarg(netbsd32_osockaddrp_t) from;
     84 	syscallarg(netbsd32_intp) fromlenaddr;
     85 };
     86 
     87 struct linux32_sys_setsockopt_args {
     88 	syscallarg(int) s;
     89 	syscallarg(int) level;
     90 	syscallarg(int) optname;
     91 	syscallarg(netbsd32_voidp) optval;
     92 	syscallarg(int) optlen;
     93 };
     94 
     95 struct linux32_sys_getsockopt_args {
     96 	syscallarg(int) s;
     97 	syscallarg(int) level;
     98 	syscallarg(int) optname;
     99 	syscallarg(netbsd32_voidp) optval;
    100 	syscallarg(netbsd32_intp) optlen;
    101 };
    102 
    103 struct linux32_sys_bind_args {
    104 	syscallarg(int) s;
    105 	syscallarg(netbsd32_osockaddrp_t) name;
    106 	syscallarg(int) namelen;
    107 };
    108 
    109 struct linux32_sys_connect_args {
    110 	syscallarg(int) s;
    111 	syscallarg(netbsd32_osockaddrp_t) name;
    112 	syscallarg(int) namelen;
    113 };
    114 
    115 struct linux32_sys_accept_args {
    116 	syscallarg(int) s;
    117 	syscallarg(netbsd32_osockaddrp_t) name;
    118 	syscallarg(netbsd32_intp) anamelen;
    119 };
    120 
    121 struct linux32_sys_getsockname_args {
    122 	syscallarg(int) fdec;
    123 	syscallarg(netbsd32_charp) asa;
    124 	syscallarg(netbsd32_intp) alen;
    125 };
    126 
    127 struct linux32_sys_getpeername_args {
    128 	syscallarg(int) fdes;
    129 	syscallarg(netbsd32_sockaddrp_t) asa;
    130 	syscallarg(netbsd32_intp) alen;
    131 };
    132 
    133 struct linux32_sys_sendmsg_args {
    134 	syscallarg(int) s;
    135 	syscallarg(netbsd32_msghdrp_t) msg;
    136 	syscallarg(int) flags;
    137 };
    138 
    139 struct linux32_sys_recvmsg_args {
    140 	syscallarg(int) s;
    141 	syscallarg(netbsd32_msghdrp_t) msg;
    142 	syscallarg(int) flags;
    143 };
    144 
    145 struct linux32_sys_send_args {
    146 	syscallarg(int) s;
    147 	syscallarg(netbsd32_voidp) buf;
    148 	syscallarg(int) len;
    149 	syscallarg(int) flags;
    150 };
    151 
    152 struct linux32_sys_recv_args {
    153 	syscallarg(int) s;
    154 	syscallarg(netbsd32_voidp) buf;
    155 	syscallarg(int) len;
    156 	syscallarg(int) flags;
    157 };
    158 
    159 union linux32_socketcall_args {
    160 	struct 	linux_sys_socket_args socket_args;
    161 	struct 	linux32_sys_bind_args bind_args;
    162 	struct 	linux32_sys_connect_args connect_args;
    163 	struct 	sys_listen_args listen_args;
    164 	struct 	linux32_sys_accept_args accept_args;
    165 	struct 	linux32_sys_getsockname_args getsockname_args;
    166 	struct 	linux32_sys_getpeername_args getpeername_args;
    167 	struct 	linux32_sys_socketpair_args socketpair_args;
    168 	struct 	linux32_sys_send_args send_args;
    169 	struct 	linux32_sys_recv_args recv_args;
    170 	struct 	linux32_sys_sendto_args sendto_args;
    171 	struct 	linux32_sys_recvfrom_args recvfrom_args;
    172 	struct 	sys_shutdown_args shutdown_args;
    173 	struct 	linux32_sys_setsockopt_args setsockopt_args;
    174 	struct 	linux32_sys_getsockopt_args getsockopt_args;
    175 	struct 	linux32_sys_sendmsg_args sendmsg_args;
    176 	struct 	linux32_sys_recvmsg_args recvmsg_args;
    177 };
    178 
    179 # ifdef _KERNEL
    180 __BEGIN_DECLS
    181 #define SYS_DEF(foo) struct foo##_args; \
    182     int foo(struct lwp *, const struct foo##_args *, register_t *)
    183 SYS_DEF(linux32_sys_socketpair);
    184 SYS_DEF(linux32_sys_sendto);
    185 SYS_DEF(linux32_sys_recvfrom);
    186 SYS_DEF(linux32_sys_setsockopt);
    187 SYS_DEF(linux32_sys_getsockopt);
    188 SYS_DEF(linux32_sys_connect);
    189 SYS_DEF(linux32_sys_socket);
    190 SYS_DEF(linux32_sys_bind);
    191 SYS_DEF(linux32_sys_getsockname);
    192 SYS_DEF(linux32_sys_getpeername);
    193 SYS_DEF(linux32_sys_sendmsg);
    194 SYS_DEF(linux32_sys_recvmsg);
    195 SYS_DEF(linux32_sys_recv);
    196 SYS_DEF(linux32_sys_send);
    197 SYS_DEF(linux32_sys_accept);
    198 #undef SYS_DEF
    199 __END_DECLS
    200 # endif /* !_KERNEL */
    201 
    202 #endif /* !_LINUX32_SOCKETCALL_H */
    203