xref: /netbsd-src/sys/compat/linux32/common/linux32_socketcall.h (revision 7e2790cf6f02365ee5b4342577d9e49e94e7a7aa)
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