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 | |