1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
|
/*-
* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2000 Assar Westerlund
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer
* in this position and unchanged.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef _LINUX_SOCKET_H_
#define _LINUX_SOCKET_H_
/* msg flags in recvfrom/recvmsg */
#define LINUX_MSG_OOB 0x01
#define LINUX_MSG_PEEK 0x02
#define LINUX_MSG_DONTROUTE 0x04
#define LINUX_MSG_CTRUNC 0x08
#define LINUX_MSG_PROXY 0x10
#define LINUX_MSG_TRUNC 0x20
#define LINUX_MSG_DONTWAIT 0x40
#define LINUX_MSG_EOR 0x80
#define LINUX_MSG_WAITALL 0x100
#define LINUX_MSG_FIN 0x200
#define LINUX_MSG_SYN 0x400
#define LINUX_MSG_CONFIRM 0x800
#define LINUX_MSG_RST 0x1000
#define LINUX_MSG_ERRQUEUE 0x2000
#define LINUX_MSG_NOSIGNAL 0x4000
#define LINUX_MSG_WAITFORONE 0x10000
#define LINUX_MSG_CMSG_CLOEXEC 0x40000000
struct l_msghdr {
l_uintptr_t msg_name;
l_int msg_namelen;
l_uintptr_t msg_iov;
l_size_t msg_iovlen;
l_uintptr_t msg_control;
l_size_t msg_controllen;
l_uint msg_flags;
};
struct l_mmsghdr {
struct l_msghdr msg_hdr;
l_uint msg_len;
};
struct l_cmsghdr {
l_size_t cmsg_len;
l_int cmsg_level;
l_int cmsg_type;
};
/* Ancillary data object information macros */
#define LINUX_CMSG_ALIGN(len) roundup2(len, sizeof(l_ulong))
#define LINUX_CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + \
LINUX_CMSG_ALIGN(sizeof(struct l_cmsghdr))))
#define LINUX_CMSG_SPACE(len) (LINUX_CMSG_ALIGN(sizeof(struct l_cmsghdr)) + \
LINUX_CMSG_ALIGN(len))
#define LINUX_CMSG_LEN(len) (LINUX_CMSG_ALIGN(sizeof(struct l_cmsghdr)) + \
(len))
#define LINUX_CMSG_FIRSTHDR(msg) \
((msg)->msg_controllen >= \
sizeof(struct l_cmsghdr) ? \
(struct l_cmsghdr *) \
PTRIN((msg)->msg_control) : \
(struct l_cmsghdr *)(NULL))
#define LINUX_CMSG_NXTHDR(msg, cmsg) \
((((char *)(cmsg) + \
LINUX_CMSG_ALIGN((cmsg)->cmsg_len) + \
sizeof(*(cmsg))) > \
(((char *)PTRIN((msg)->msg_control)) + \
(msg)->msg_controllen)) ? \
(struct l_cmsghdr *) NULL : \
(struct l_cmsghdr *)((char *)(cmsg) + \
LINUX_CMSG_ALIGN((cmsg)->cmsg_len)))
#define CMSG_HDRSZ CMSG_LEN(0)
#define L_CMSG_HDRSZ LINUX_CMSG_LEN(0)
/* Supported socket types */
#define LINUX_SOCK_STREAM 1
#define LINUX_SOCK_DGRAM 2
#define LINUX_SOCK_RAW 3
#define LINUX_SOCK_RDM 4
#define LINUX_SOCK_SEQPACKET 5
#define LINUX_SOCK_MAX LINUX_SOCK_SEQPACKET
#define LINUX_SOCK_TYPE_MASK 0xf
/* Flags for socket, socketpair, accept4 */
#define LINUX_SOCK_CLOEXEC LINUX_O_CLOEXEC
#define LINUX_SOCK_NONBLOCK LINUX_O_NONBLOCK
struct l_ucred {
uint32_t pid;
uint32_t uid;
uint32_t gid;
};
#if defined(__i386__) || defined(__arm__) || \
(defined(__amd64__) && defined(COMPAT_LINUX32))
struct linux_accept_args {
register_t s;
register_t addr;
register_t namelen;
};
int linux_accept(struct thread *td, struct linux_accept_args *args);
/* Operations for socketcall */
#define LINUX_SOCKET 1
#define LINUX_BIND 2
#define LINUX_CONNECT 3
#define LINUX_LISTEN 4
#define LINUX_ACCEPT 5
#define LINUX_GETSOCKNAME 6
#define LINUX_GETPEERNAME 7
#define LINUX_SOCKETPAIR 8
#define LINUX_SEND 9
#define LINUX_RECV 10
#define LINUX_SENDTO 11
#define LINUX_RECVFROM 12
#define LINUX_SHUTDOWN 13
#define LINUX_SETSOCKOPT 14
#define LINUX_GETSOCKOPT 15
#define LINUX_SENDMSG 16
#define LINUX_RECVMSG 17
#define LINUX_ACCEPT4 18
#define LINUX_RECVMMSG 19
#define LINUX_SENDMMSG 20
#define LINUX_SENDFILE 21
#endif /* __i386__ || __arm__ || (__amd64__ && COMPAT_LINUX32) */
/* Socket defines */
#define LINUX_SOL_SOCKET 1
#define LINUX_SO_DEBUG 1
#define LINUX_SO_REUSEADDR 2
#define LINUX_SO_TYPE 3
#define LINUX_SO_ERROR 4
#define LINUX_SO_DONTROUTE 5
#define LINUX_SO_BROADCAST 6
#define LINUX_SO_SNDBUF 7
#define LINUX_SO_RCVBUF 8
#define LINUX_SO_KEEPALIVE 9
#define LINUX_SO_OOBINLINE 10
#define LINUX_SO_NO_CHECK 11
#define LINUX_SO_PRIORITY 12
#define LINUX_SO_LINGER 13
#define LINUX_SO_REUSEPORT 15
#ifndef LINUX_SO_PASSCRED /* powerpc differs */
#define LINUX_SO_PASSCRED 16
#define LINUX_SO_PEERCRED 17
#define LINUX_SO_RCVLOWAT 18
#define LINUX_SO_SNDLOWAT 19
#define LINUX_SO_RCVTIMEO 20
#define LINUX_SO_SNDTIMEO 21
#endif
#define LINUX_SO_TIMESTAMPO 29
#define LINUX_SO_TIMESTAMPN 63
#define LINUX_SO_TIMESTAMPNSO 35
#define LINUX_SO_TIMESTAMPNSN 64
#define LINUX_SO_ACCEPTCONN 30
#define LINUX_SO_PEERSEC 31
#define LINUX_SO_SNDBUFFORCE 32
#define LINUX_SO_RCVBUFFORCE 33
#define LINUX_SO_PROTOCOL 38
#define LINUX_SO_DOMAIN 39
#define LINUX_SO_PEERGROUPS 59
/* Socket-level control message types */
#define LINUX_SCM_RIGHTS 0x01
#define LINUX_SCM_CREDENTIALS 0x02
#define LINUX_SCM_TIMESTAMPO LINUX_SO_TIMESTAMPO
#define LINUX_SCM_TIMESTAMPN LINUX_SO_TIMESTAMPN
#define LINUX_SCM_TIMESTAMPNSO LINUX_SO_TIMESTAMPNSO
#define LINUX_SCM_TIMESTAMPNSN LINUX_SO_TIMESTAMPNSN
/* Socket options */
#define LINUX_IP_TOS 1
#define LINUX_IP_TTL 2
#define LINUX_IP_HDRINCL 3
#define LINUX_IP_OPTIONS 4
#define LINUX_IP_ROUTER_ALERT 5
#define LINUX_IP_RECVOPTS 6
#define LINUX_IP_RETOPTS 7
#define LINUX_IP_PKTINFO 8
#define LINUX_IP_PKTOPTIONS 9
#define LINUX_IP_MTU_DISCOVER 10
#define LINUX_IP_RECVERR 11
#define LINUX_IP_RECVTTL 12
#define LINUX_IP_RECVTOS 13
#define LINUX_IP_MTU 14
#define LINUX_IP_FREEBIND 15
#define LINUX_IP_IPSEC_POLICY 16
#define LINUX_IP_XFRM_POLICY 17
#define LINUX_IP_PASSSEC 18
#define LINUX_IP_TRANSPARENT 19
#define LINUX_IP_ORIGDSTADDR 20
#define LINUX_IP_RECVORIGDSTADDR LINUX_IP_ORIGDSTADDR
#define LINUX_IP_MINTTL 21
#define LINUX_IP_NODEFRAG 22
#define LINUX_IP_CHECKSUM 23
#define LINUX_IP_BIND_ADDRESS_NO_PORT 24
#define LINUX_IP_RECVFRAGSIZE 25
#define LINUX_IP_MULTICAST_IF 32
#define LINUX_IP_MULTICAST_TTL 33
#define LINUX_IP_MULTICAST_LOOP 34
#define LINUX_IP_ADD_MEMBERSHIP 35
#define LINUX_IP_DROP_MEMBERSHIP 36
#define LINUX_IP_UNBLOCK_SOURCE 37
#define LINUX_IP_BLOCK_SOURCE 38
#define LINUX_IP_ADD_SOURCE_MEMBERSHIP 39
#define LINUX_IP_DROP_SOURCE_MEMBERSHIP 40
#define LINUX_IP_MSFILTER 41
#define LINUX_MCAST_JOIN_GROUP 42
#define LINUX_MCAST_BLOCK_SOURCE 43
#define LINUX_MCAST_UNBLOCK_SOURCE 44
#define LINUX_MCAST_LEAVE_GROUP 45
#define LINUX_MCAST_JOIN_SOURCE_GROUP 46
#define LINUX_MCAST_LEAVE_SOURCE_GROUP 47
#define LINUX_MCAST_MSFILTER 48
#define LINUX_IP_MULTICAST_ALL 49
#define LINUX_IP_UNICAST_IF 50
#define LINUX_IPV6_ADDRFORM 1
#define LINUX_IPV6_2292PKTINFO 2
#define LINUX_IPV6_2292HOPOPTS 3
#define LINUX_IPV6_2292DSTOPTS 4
#define LINUX_IPV6_2292RTHDR 5
#define LINUX_IPV6_2292PKTOPTIONS 6
#define LINUX_IPV6_CHECKSUM 7
#define LINUX_IPV6_2292HOPLIMIT 8
#define LINUX_IPV6_NEXTHOP 9
#define LINUX_IPV6_AUTHHDR 10
#define LINUX_IPV6_FLOWINFO 11
#define LINUX_IPV6_UNICAST_HOPS 16
#define LINUX_IPV6_MULTICAST_IF 17
#define LINUX_IPV6_MULTICAST_HOPS 18
#define LINUX_IPV6_MULTICAST_LOOP 19
#define LINUX_IPV6_ADD_MEMBERSHIP 20
#define LINUX_IPV6_DROP_MEMBERSHIP 21
#define LINUX_IPV6_ROUTER_ALERT 22
#define LINUX_IPV6_MTU_DISCOVER 23
#define LINUX_IPV6_MTU 24
#define LINUX_IPV6_RECVERR 25
#define LINUX_IPV6_V6ONLY 26
#define LINUX_IPV6_JOIN_ANYCAST 27
#define LINUX_IPV6_LEAVE_ANYCAST 28
#define LINUX_IPV6_MULTICAST_ALL 29
#define LINUX_IPV6_ROUTER_ALERT_ISOLATE 30
#define LINUX_IPV6_FLOWLABEL_MGR 32
#define LINUX_IPV6_FLOWINFO_SEND 33
#define LINUX_IPV6_IPSEC_POLICY 34
#define LINUX_IPV6_XFRM_POLICY 35
#define LINUX_IPV6_HDRINCL 36
#define LINUX_IPV6_RECVPKTINFO 49
#define LINUX_IPV6_PKTINFO 50
#define LINUX_IPV6_RECVHOPLIMIT 51
#define LINUX_IPV6_HOPLIMIT 52
#define LINUX_IPV6_RECVHOPOPTS 53
#define LINUX_IPV6_HOPOPTS 54
#define LINUX_IPV6_RTHDRDSTOPTS 55
#define LINUX_IPV6_RECVRTHDR 56
#define LINUX_IPV6_RTHDR 57
#define LINUX_IPV6_RECVDSTOPTS 58
#define LINUX_IPV6_DSTOPTS 59
#define LINUX_IPV6_RECVPATHMTU 60
#define LINUX_IPV6_PATHMTU 61
#define LINUX_IPV6_DONTFRAG 62
#define LINUX_IPV6_AUTOFLOWLABEL 70
#define LINUX_IPV6_ADDR_PREFERENCES 72
#define LINUX_IPV6_MINHOPCOUNT 73
#define LINUX_IPV6_ORIGDSTADDR 74
#define LINUX_IPV6_TRANSPARENT 75
#define LINUX_IPV6_UNICAST_IF 76
#define LINUX_IPV6_RECVFRAGSIZE 77
#define LINUX_IPV6_FREEBIND 78
#define LINUX_TCP_NODELAY 1
#define LINUX_TCP_MAXSEG 2
#define LINUX_TCP_CORK 3
#define LINUX_TCP_KEEPIDLE 4
#define LINUX_TCP_KEEPINTVL 5
#define LINUX_TCP_KEEPCNT 6
#define LINUX_TCP_INFO 11
#define LINUX_TCP_MD5SIG 14
struct l_ifmap {
l_ulong mem_start;
l_ulong mem_end;
l_ushort base_addr;
u_char irq;
u_char dma;
u_char port;
/* 3 bytes spare */
};
struct l_ifreq {
union {
char ifrn_name[LINUX_IFNAMSIZ];
} ifr_ifrn;
union {
struct l_sockaddr ifru_addr;
struct l_sockaddr ifru_dstaddr;
struct l_sockaddr ifru_broadaddr;
struct l_sockaddr ifru_netmask;
struct l_sockaddr ifru_hwaddr;
l_short ifru_flags[1];
l_int ifru_ivalue;
l_int ifru_mtu;
struct l_ifmap ifru_map;
char ifru_slave[LINUX_IFNAMSIZ];
char ifru_newname[LINUX_IFNAMSIZ];
l_uintptr_t ifru_data;
} ifr_ifru;
};
#define ifr_name ifr_ifrn.ifrn_name /* Interface name */
#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
#define ifr_ifindex ifr_ifru.ifru_ivalue /* Interface index */
#endif /* _LINUX_SOCKET_H_ */
|