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