1 /* $NetBSD: linux_socketcall.h,v 1.22 2021/09/23 06:56:27 ryo Exp $ */ 2 3 /*- 4 * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Frank van der Linden and Eric Haszlakiewicz. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 /* 33 * Copyright (c) 1995 Frank van der Linden 34 * All rights reserved. 35 * 36 * Redistribution and use in source and binary forms, with or without 37 * modification, are permitted provided that the following conditions 38 * are met: 39 * 1. Redistributions of source code must retain the above copyright 40 * notice, this list of conditions and the following disclaimer. 41 * 2. Redistributions in binary form must reproduce the above copyright 42 * notice, this list of conditions and the following disclaimer in the 43 * documentation and/or other materials provided with the distribution. 44 * 3. All advertising materials mentioning features or use of this software 45 * must display the following acknowledgement: 46 * This product includes software developed for the NetBSD Project 47 * by Frank van der Linden 48 * 4. The name of the author may not be used to endorse or promote products 49 * derived from this software without specific prior written permission 50 * 51 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 52 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 53 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 54 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 55 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 56 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 57 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 58 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 59 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 60 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 61 */ 62 63 #ifndef _LINUX_SOCKETCALL_H 64 #define _LINUX_SOCKETCALL_H 65 66 /* Alpha does not use the socketcall multiplexer */ 67 #if !defined(__aarch64__) && !defined(__alpha__) && !defined(__amd64__) && !defined(COMPAT_LINUX32) 68 /* Used on: arm, i386, m68k, mips, ppc, sparc, sparc64 */ 69 /* Used for COMPAT_LINUX32 on amd64 */ 70 /* Not used on: aarch64, alpha */ 71 #include <compat/linux/linux_syscall.h> 72 #include <compat/linux/linux_syscallargs.h> 73 74 /* 75 * Values passed to the Linux socketcall() syscall, determining the actual 76 * action to take. 77 */ 78 79 #define LINUX_SYS_SOCKET 1 80 #define LINUX_SYS_BIND 2 81 #define LINUX_SYS_CONNECT 3 82 #define LINUX_SYS_LISTEN 4 83 #define LINUX_SYS_ACCEPT 5 84 #define LINUX_SYS_GETSOCKNAME 6 85 #define LINUX_SYS_GETPEERNAME 7 86 #define LINUX_SYS_SOCKETPAIR 8 87 #define LINUX_SYS_SEND 9 88 #define LINUX_SYS_RECV 10 89 #define LINUX_SYS_SENDTO 11 90 #define LINUX_SYS_RECVFROM 12 91 #define LINUX_SYS_SHUTDOWN 13 92 #define LINUX_SYS_SETSOCKOPT 14 93 #define LINUX_SYS_GETSOCKOPT 15 94 #define LINUX_SYS_SENDMSG 16 95 #define LINUX_SYS_RECVMSG 17 96 #define LINUX_SYS_ACCEPT4 18 97 #define LINUX_SYS_RECVMMSG 19 98 #define LINUX_SYS_SENDMMSG 20 99 100 #define LINUX_MAX_SOCKETCALL 20 101 102 103 /* 104 * Structures for the arguments of the different system calls. This looks 105 * a little better than copyin() of all values one by one. 106 */ 107 108 /* !!!: This should be at least as large as any other struct here. */ 109 struct linux_socketcall_dummy_args { 110 int dummy_ints[4]; /* Max 4 ints */ 111 void *dummy_ptrs[3]; /* Max 3 pointers */ 112 }; 113 114 #ifndef LINUX_SYS_socket 115 struct linux_sys_socket_args { 116 syscallarg(int) domain; 117 syscallarg(int) type; 118 syscallarg(int) protocol; 119 }; 120 #endif 121 122 #ifndef LINUX_SYS_socketpair 123 struct linux_sys_socketpair_args { 124 syscallarg(int) domain; 125 syscallarg(int) type; 126 syscallarg(int) protocol; 127 syscallarg(int *) rsv; 128 }; 129 #endif 130 131 #ifndef LINUX_SYS_sendto 132 struct linux_sys_sendto_args { 133 syscallarg(int) s; 134 syscallarg(void *) msg; 135 syscallarg(int) len; 136 syscallarg(int) flags; 137 syscallarg(struct osockaddr *) to; 138 syscallarg(int) tolen; 139 }; 140 #endif 141 142 #ifndef LINUX_SYS_recvfrom 143 struct linux_sys_recvfrom_args { 144 syscallarg(int) s; 145 syscallarg(void *) buf; 146 syscallarg(int) len; 147 syscallarg(int) flags; 148 syscallarg(struct osockaddr *) from; 149 syscallarg(int *) fromlenaddr; 150 }; 151 #endif 152 153 #ifndef LINUX_SYS_setsockopt 154 struct linux_sys_setsockopt_args { 155 syscallarg(int) s; 156 syscallarg(int) level; 157 syscallarg(int) optname; 158 syscallarg(void *) optval; 159 syscallarg(int) optlen; 160 }; 161 #endif 162 163 #ifndef LINUX_SYS_getsockopt 164 struct linux_sys_getsockopt_args { 165 syscallarg(int) s; 166 syscallarg(int) level; 167 syscallarg(int) optname; 168 syscallarg(void *) optval; 169 syscallarg(int *) optlen; 170 }; 171 #endif 172 173 #ifndef LINUX_SYS_bind 174 struct linux_sys_bind_args { 175 syscallarg(int) s; 176 syscallarg(struct osockaddr *) name; 177 syscallarg(int) namelen; 178 }; 179 #endif 180 181 #ifndef LINUX_SYS_connect 182 struct linux_sys_connect_args { 183 syscallarg(int) s; 184 syscallarg(struct osockaddr *) name; 185 syscallarg(int) namelen; 186 }; 187 #endif 188 189 #ifndef LINUX_SYS_accept 190 struct linux_sys_accept_args { 191 syscallarg(int) s; 192 syscallarg(struct osockaddr *) name; 193 syscallarg(int *) anamelen; 194 }; 195 #endif 196 197 #ifndef LINUX_SYS_getsockname 198 struct linux_sys_getsockname_args { 199 syscallarg(int) fdes; 200 syscallarg(struct osockaddr *) asa; 201 syscallarg(int *) alen; 202 }; 203 #endif 204 205 #ifndef LINUX_SYS_getpeername 206 struct linux_sys_getpeername_args { 207 syscallarg(int) fdes; 208 syscallarg(struct osockaddr *) asa; 209 syscallarg(int *) alen; 210 }; 211 #endif 212 213 #ifndef LINUX_SYS_sendmsg 214 struct linux_sys_sendmsg_args { 215 syscallarg(int) s; 216 syscallarg(struct linux_msghdr *) msg; 217 syscallarg(u_int) flags; 218 }; 219 #endif 220 221 #ifndef LINUX_SYS_recvmsg 222 struct linux_sys_recvmsg_args { 223 syscallarg(int) s; 224 syscallarg(struct linux_msghdr *) msg; 225 syscallarg(u_int) flags; 226 }; 227 #endif 228 229 #ifndef LINUX_SYS_send 230 struct linux_sys_send_args { 231 syscallarg(int) s; 232 syscallarg(void *) buf; 233 syscallarg(int) len; 234 syscallarg(int) flags; 235 }; 236 #endif 237 238 #ifndef LINUX_SYS_recv 239 struct linux_sys_recv_args { 240 syscallarg(int) s; 241 syscallarg(void *) buf; 242 syscallarg(int) len; 243 syscallarg(int) flags; 244 }; 245 #endif 246 247 #ifndef LINUX_SYS_accept4 248 struct linux_sys_accept4_args { 249 syscallarg(int) s; 250 syscallarg(struct osockaddr *) name; 251 syscallarg(int *) anamelen; 252 syscallarg(int) flags; 253 }; 254 #endif 255 256 #ifndef LINUX_SYS_recvmmsg 257 struct linux_sys_recvmmsg_args { 258 syscallarg(int) s; 259 syscallarg(struct linux_mmsghdr *) msgvec; 260 syscallarg(unsigned int) vlen; 261 syscallarg(unsigned int) flags; 262 syscallarg(struct linux_timespec *) timeout; 263 }; 264 #endif 265 266 #ifndef LINUX_SYS_sendmmsg 267 struct linux_sys_sendmmsg_args { 268 syscallarg(int) s; 269 syscallarg(struct linux_mmsghdr *) msgvec; 270 syscallarg(unsigned int) vlen; 271 syscallarg(unsigned int) flags; 272 }; 273 #endif 274 275 # ifdef _KERNEL 276 __BEGIN_DECLS 277 #define SYS_DEF(foo) int foo(struct lwp *, const struct foo##_args *, register_t *); 278 SYS_DEF(linux_sys_socket) 279 SYS_DEF(linux_sys_socketpair) 280 SYS_DEF(linux_sys_sendto) 281 SYS_DEF(linux_sys_recvfrom) 282 SYS_DEF(linux_sys_setsockopt) 283 SYS_DEF(linux_sys_getsockopt) 284 SYS_DEF(linux_sys_connect) 285 SYS_DEF(linux_sys_bind) 286 SYS_DEF(linux_sys_getsockname) 287 SYS_DEF(linux_sys_getpeername) 288 SYS_DEF(linux_sys_sendmsg) 289 SYS_DEF(linux_sys_recvmsg) 290 SYS_DEF(linux_sys_recv) 291 SYS_DEF(linux_sys_send) 292 SYS_DEF(linux_sys_accept) 293 SYS_DEF(linux_sys_accept4) 294 SYS_DEF(linux_sys_recvmmsg) 295 SYS_DEF(linux_sys_sendmmsg) 296 #undef SYS_DEF 297 __END_DECLS 298 # endif /* !_KERNEL */ 299 300 # endif 301 302 #endif /* !_LINUX_SOCKETCALL_H */ 303