xref: /qemu/linux-user/socket.h (revision 72ac97cd)
1 
2 #if defined(TARGET_MIPS)
3     /* MIPS special values for constants */
4 
5     /*
6      * For setsockopt(2)
7      *
8      * This defines are ABI conformant as far as Linux supports these ...
9      */
10     #define TARGET_SOL_SOCKET      0xffff
11 
12     #define TARGET_SO_DEBUG        0x0001  /* Record debugging information. */
13     #define TARGET_SO_REUSEADDR    0x0004  /* Allow reuse of local addresses. */
14     #define TARGET_SO_KEEPALIVE    0x0008  /* Keep connections alive and send
15                                               SIGPIPE when they die. */
16     #define TARGET_SO_DONTROUTE    0x0010  /* Don't do local routing. */
17     #define TARGET_SO_BROADCAST    0x0020  /* Allow transmission of
18                                               broadcast messages. */
19     #define TARGET_SO_LINGER       0x0080  /* Block on close of a reliable
20                                             * socket to transmit pending data.
21                                             */
22     #define TARGET_SO_OOBINLINE 0x0100     /* Receive out-of-band data in-band.
23                                             */
24     #if 0
25     /* To add: Allow local address and port reuse. */
26     #define TARGET_SO_REUSEPORT 0x0200
27     #endif
28 
29     #define TARGET_SO_TYPE         0x1008  /* Compatible name for SO_STYLE. */
30     #define TARGET_SO_STYLE        SO_TYPE /* Synonym */
31     #define TARGET_SO_ERROR        0x1007  /* get error status and clear */
32     #define TARGET_SO_SNDBUF       0x1001  /* Send buffer size. */
33     #define TARGET_SO_RCVBUF       0x1002  /* Receive buffer. */
34     #define TARGET_SO_SNDLOWAT     0x1003  /* send low-water mark */
35     #define TARGET_SO_RCVLOWAT     0x1004  /* receive low-water mark */
36     #define TARGET_SO_SNDTIMEO     0x1005  /* send timeout */
37     #define TARGET_SO_RCVTIMEO     0x1006  /* receive timeout */
38     #define TARGET_SO_ACCEPTCONN   0x1009
39 
40     /* linux-specific, might as well be the same as on i386 */
41     #define TARGET_SO_NO_CHECK     11
42     #define TARGET_SO_PRIORITY     12
43     #define TARGET_SO_BSDCOMPAT    14
44 
45     #define TARGET_SO_PASSCRED     17
46     #define TARGET_SO_PEERCRED     18
47 
48     /* Security levels - as per NRL IPv6 - don't actually do anything */
49     #define TARGET_SO_SECURITY_AUTHENTICATION              22
50     #define TARGET_SO_SECURITY_ENCRYPTION_TRANSPORT        23
51     #define TARGET_SO_SECURITY_ENCRYPTION_NETWORK          24
52 
53     #define TARGET_SO_BINDTODEVICE         25
54 
55     /* Socket filtering */
56     #define TARGET_SO_ATTACH_FILTER        26
57     #define TARGET_SO_DETACH_FILTER        27
58 
59     #define TARGET_SO_PEERNAME             28
60     #define TARGET_SO_TIMESTAMP            29
61     #define SCM_TIMESTAMP          SO_TIMESTAMP
62 
63     #define TARGET_SO_PEERSEC              30
64     #define TARGET_SO_SNDBUFFORCE          31
65     #define TARGET_SO_RCVBUFFORCE          33
66 
67     /** sock_type - Socket types
68      *
69      * Please notice that for binary compat reasons MIPS has to
70      * override the enum sock_type in include/linux/net.h, so
71      * we define ARCH_HAS_SOCKET_TYPES here.
72      *
73      * @SOCK_DGRAM - datagram (conn.less) socket
74      * @SOCK_STREAM - stream (connection) socket
75      * @SOCK_RAW - raw socket
76      * @SOCK_RDM - reliably-delivered message
77      * @SOCK_SEQPACKET - sequential packet socket
78      * @SOCK_DCCP - Datagram Congestion Control Protocol socket
79      * @SOCK_PACKET - linux specific way of getting packets at the dev level.
80      *                For writing rarp and other similar things on the user
81      *                level.
82      * @SOCK_CLOEXEC - sets the close-on-exec (FD_CLOEXEC) flag.
83      * @SOCK_NONBLOCK - sets the O_NONBLOCK file status flag.
84      */
85 
86     #define ARCH_HAS_SOCKET_TYPES          1
87 
88     enum sock_type {
89            TARGET_SOCK_DGRAM       = 1,
90            TARGET_SOCK_STREAM      = 2,
91            TARGET_SOCK_RAW         = 3,
92            TARGET_SOCK_RDM         = 4,
93            TARGET_SOCK_SEQPACKET   = 5,
94            TARGET_SOCK_DCCP        = 6,
95            TARGET_SOCK_PACKET      = 10,
96            TARGET_SOCK_CLOEXEC     = 02000000,
97            TARGET_SOCK_NONBLOCK    = 0200,
98     };
99 
100     #define TARGET_SOCK_MAX (TARGET_SOCK_PACKET + 1)
101     #define TARGET_SOCK_TYPE_MASK    0xf  /* Covers up to TARGET_SOCK_MAX-1. */
102 
103 #elif defined(TARGET_ALPHA)
104 
105     /* For setsockopt(2) */
106     #define TARGET_SOL_SOCKET   0xffff
107 
108     #define TARGET_SO_DEBUG 0x0001
109     #define TARGET_SO_REUSEADDR 0x0004
110     #define TARGET_SO_KEEPALIVE 0x0008
111     #define TARGET_SO_DONTROUTE 0x0010
112     #define TARGET_SO_BROADCAST 0x0020
113     #define TARGET_SO_LINGER    0x0080
114     #define TARGET_SO_OOBINLINE 0x0100
115     /* To add :#define TARGET_SO_REUSEPORT 0x0200 */
116 
117     #define TARGET_SO_TYPE      0x1008
118     #define TARGET_SO_ERROR 0x1007
119     #define TARGET_SO_SNDBUF    0x1001
120     #define TARGET_SO_RCVBUF    0x1002
121     #define TARGET_SO_SNDBUFFORCE   0x100a
122     #define TARGET_SO_RCVBUFFORCE   0x100b
123     #define TARGET_SO_RCVLOWAT  0x1010
124     #define TARGET_SO_SNDLOWAT  0x1011
125     #define TARGET_SO_RCVTIMEO  0x1012
126     #define TARGET_SO_SNDTIMEO  0x1013
127     #define TARGET_SO_ACCEPTCONN    0x1014
128     #define TARGET_SO_PROTOCOL  0x1028
129     #define TARGET_SO_DOMAIN    0x1029
130 
131     /* linux-specific, might as well be the same as on i386 */
132     #define TARGET_SO_NO_CHECK  11
133     #define TARGET_SO_PRIORITY  12
134     #define TARGET_SO_BSDCOMPAT 14
135 
136     #define TARGET_SO_PASSCRED  17
137     #define TARGET_SO_PEERCRED  18
138     #define TARGET_SO_BINDTODEVICE 25
139 
140     /* Socket filtering */
141     #define TARGET_SO_ATTACH_FILTER        26
142     #define TARGET_SO_DETACH_FILTER        27
143 
144     #define TARGET_SO_PEERNAME      28
145     #define TARGET_SO_TIMESTAMP     29
146     #define TARGET_SCM_TIMESTAMP        TARGET_SO_TIMESTAMP
147 
148     #define TARGET_SO_PEERSEC       30
149     #define TARGET_SO_PASSSEC       34
150     #define TARGET_SO_TIMESTAMPNS       35
151     #define TARGET_SCM_TIMESTAMPNS      TARGET_SO_TIMESTAMPNS
152 
153     /* Security levels - as per NRL IPv6 - don't actually do anything */
154     #define TARGET_SO_SECURITY_AUTHENTICATION       19
155     #define TARGET_SO_SECURITY_ENCRYPTION_TRANSPORT 20
156     #define TARGET_SO_SECURITY_ENCRYPTION_NETWORK       21
157 
158     #define TARGET_SO_MARK          36
159 
160     #define TARGET_SO_TIMESTAMPING      37
161     #define TARGET_SCM_TIMESTAMPING TARGET_SO_TIMESTAMPING
162 
163     #define TARGET_SO_RXQ_OVFL             40
164 
165     #define TARGET_SO_WIFI_STATUS       41
166     #define TARGET_SCM_WIFI_STATUS      TARGET_SO_WIFI_STATUS
167     #define TARGET_SO_PEEK_OFF      42
168 
169     /* Instruct lower device to use last 4-bytes of skb data as FCS */
170     #define TARGET_SO_NOFCS     43
171 
172     /** sock_type - Socket types
173      *
174      * Please notice that for binary compat reasons ALPHA has to
175      * override the enum sock_type in include/linux/net.h, so
176      * we define ARCH_HAS_SOCKET_TYPES here.
177      *
178      * @SOCK_DGRAM - datagram (conn.less) socket
179      * @SOCK_STREAM - stream (connection) socket
180      * @SOCK_RAW - raw socket
181      * @SOCK_RDM - reliably-delivered message
182      * @SOCK_SEQPACKET - sequential packet socket
183      * @SOCK_DCCP - Datagram Congestion Control Protocol socket
184      * @SOCK_PACKET - linux specific way of getting packets at the dev level.
185      *                For writing rarp and other similar things on the user
186      *                level.
187      * @SOCK_CLOEXEC - sets the close-on-exec (FD_CLOEXEC) flag.
188      * @SOCK_NONBLOCK - sets the O_NONBLOCK file status flag.
189      */
190 
191     #define ARCH_HAS_SOCKET_TYPES          1
192 
193     enum sock_type {
194            TARGET_SOCK_STREAM      = 1,
195            TARGET_SOCK_DGRAM       = 2,
196            TARGET_SOCK_RAW         = 3,
197            TARGET_SOCK_RDM         = 4,
198            TARGET_SOCK_SEQPACKET   = 5,
199            TARGET_SOCK_DCCP        = 6,
200            TARGET_SOCK_PACKET      = 10,
201            TARGET_SOCK_CLOEXEC     = 010000000,
202            TARGET_SOCK_NONBLOCK    = 010000000000,
203     };
204 
205     #define TARGET_SOCK_MAX (TARGET_SOCK_PACKET + 1)
206     #define TARGET_SOCK_TYPE_MASK    0xf  /* Covers up to TARGET_SOCK_MAX-1. */
207 #else
208 
209 #if defined(TARGET_SPARC)
210     /** sock_type - Socket types
211      *
212      * Please notice that for binary compat reasons SPARC has to
213      * override the enum sock_type in include/linux/net.h, so
214      * we define ARCH_HAS_SOCKET_TYPES here.
215      *
216      * @SOCK_DGRAM - datagram (conn.less) socket
217      * @SOCK_STREAM - stream (connection) socket
218      * @SOCK_RAW - raw socket
219      * @SOCK_RDM - reliably-delivered message
220      * @SOCK_SEQPACKET - sequential packet socket
221      * @SOCK_DCCP - Datagram Congestion Control Protocol socket
222      * @SOCK_PACKET - linux specific way of getting packets at the dev level.
223      *                For writing rarp and other similar things on the user
224      *                level.
225      * @SOCK_CLOEXEC - sets the close-on-exec (FD_CLOEXEC) flag.
226      * @SOCK_NONBLOCK - sets the O_NONBLOCK file status flag.
227      */
228 
229     #define ARCH_HAS_SOCKET_TYPES          1
230 
231     enum sock_type {
232            TARGET_SOCK_STREAM      = 1,
233            TARGET_SOCK_DGRAM       = 2,
234            TARGET_SOCK_RAW         = 3,
235            TARGET_SOCK_RDM         = 4,
236            TARGET_SOCK_SEQPACKET   = 5,
237            TARGET_SOCK_DCCP        = 6,
238            TARGET_SOCK_PACKET      = 10,
239            TARGET_SOCK_CLOEXEC     = 020000000,
240            TARGET_SOCK_NONBLOCK    = 040000,
241     };
242 
243     #define TARGET_SOCK_MAX (TARGET_SOCK_PACKET + 1)
244     #define TARGET_SOCK_TYPE_MASK    0xf  /* Covers up to TARGET_SOCK_MAX-1. */
245 #endif
246 
247     /* For setsockopt(2) */
248     #define TARGET_SOL_SOCKET      1
249 
250     #define TARGET_SO_DEBUG        1
251     #define TARGET_SO_REUSEADDR    2
252     #define TARGET_SO_TYPE         3
253     #define TARGET_SO_ERROR        4
254     #define TARGET_SO_DONTROUTE    5
255     #define TARGET_SO_BROADCAST    6
256     #define TARGET_SO_SNDBUF       7
257     #define TARGET_SO_RCVBUF       8
258     #define TARGET_SO_SNDBUFFORCE  32
259     #define TARGET_SO_RCVBUFFORCE  33
260     #define TARGET_SO_KEEPALIVE    9
261     #define TARGET_SO_OOBINLINE    10
262     #define TARGET_SO_NO_CHECK     11
263     #define TARGET_SO_PRIORITY     12
264     #define TARGET_SO_LINGER       13
265     #define TARGET_SO_BSDCOMPAT    14
266     /* To add :#define TARGET_SO_REUSEPORT 15 */
267 #if defined(TARGET_PPC)
268     #define TARGET_SO_RCVLOWAT     16
269     #define TARGET_SO_SNDLOWAT     17
270     #define TARGET_SO_RCVTIMEO     18
271     #define TARGET_SO_SNDTIMEO     19
272     #define TARGET_SO_PASSCRED     20
273     #define TARGET_SO_PEERCRED     21
274 #else
275     #define TARGET_SO_PASSCRED     16
276     #define TARGET_SO_PEERCRED     17
277     #define TARGET_SO_RCVLOWAT     18
278     #define TARGET_SO_SNDLOWAT     19
279     #define TARGET_SO_RCVTIMEO     20
280     #define TARGET_SO_SNDTIMEO     21
281 #endif
282 
283     /* Security levels - as per NRL IPv6 - don't actually do anything */
284     #define TARGET_SO_SECURITY_AUTHENTICATION              22
285     #define TARGET_SO_SECURITY_ENCRYPTION_TRANSPORT        23
286     #define TARGET_SO_SECURITY_ENCRYPTION_NETWORK          24
287 
288     #define TARGET_SO_BINDTODEVICE 25
289 
290     /* Socket filtering */
291     #define TARGET_SO_ATTACH_FILTER        26
292     #define TARGET_SO_DETACH_FILTER        27
293 
294     #define TARGET_SO_PEERNAME             28
295     #define TARGET_SO_TIMESTAMP            29
296     #define TARGET_SCM_TIMESTAMP           TARGET_SO_TIMESTAMP
297 
298     #define TARGET_SO_ACCEPTCONN           30
299 
300     #define TARGET_SO_PEERSEC              31
301 
302 #endif
303 
304 #ifndef ARCH_HAS_SOCKET_TYPES
305     /** sock_type - Socket types - default values
306      *
307      *
308      * @SOCK_STREAM - stream (connection) socket
309      * @SOCK_DGRAM - datagram (conn.less) socket
310      * @SOCK_RAW - raw socket
311      * @SOCK_RDM - reliably-delivered message
312      * @SOCK_SEQPACKET - sequential packet socket
313      * @SOCK_DCCP - Datagram Congestion Control Protocol socket
314      * @SOCK_PACKET - linux specific way of getting packets at the dev level.
315      *                For writing rarp and other similar things on the user
316      *                level.
317      * @SOCK_CLOEXEC - sets the close-on-exec (FD_CLOEXEC) flag.
318      * @SOCK_NONBLOCK - sets the O_NONBLOCK file status flag.
319      */
320     enum sock_type {
321            TARGET_SOCK_STREAM      = 1,
322            TARGET_SOCK_DGRAM       = 2,
323            TARGET_SOCK_RAW         = 3,
324            TARGET_SOCK_RDM         = 4,
325            TARGET_SOCK_SEQPACKET   = 5,
326            TARGET_SOCK_DCCP        = 6,
327            TARGET_SOCK_PACKET      = 10,
328            TARGET_SOCK_CLOEXEC     = 02000000,
329            TARGET_SOCK_NONBLOCK    = 04000,
330     };
331 
332     #define TARGET_SOCK_MAX (TARGET_SOCK_PACKET + 1)
333     #define TARGET_SOCK_TYPE_MASK    0xf  /* Covers up to TARGET_SOCK_MAX-1. */
334 
335 #endif
336