| 
									
										
										
										
											2012-10-09 09:47:14 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * This file is subject to the terms and conditions of the GNU General Public | 
					
						
							|  |  |  |  * License.  See the file "COPYING" in the main directory of this archive | 
					
						
							|  |  |  |  * for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 1997, 1999, 2000, 2001 Ralf Baechle | 
					
						
							|  |  |  |  * Copyright (C) 2000, 2001 Silicon Graphics, Inc. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef _UAPI_ASM_SOCKET_H
 | 
					
						
							|  |  |  | #define _UAPI_ASM_SOCKET_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <asm/sockios.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * For setsockopt(2) | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This defines are ABI conformant as far as Linux supports these ... | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define SOL_SOCKET	0xffff
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SO_DEBUG	0x0001	/* Record debugging information.  */
 | 
					
						
							|  |  |  | #define SO_REUSEADDR	0x0004	/* Allow reuse of local addresses.  */
 | 
					
						
							|  |  |  | #define SO_KEEPALIVE	0x0008	/* Keep connections alive and send
 | 
					
						
							|  |  |  | 				   SIGPIPE when they die.  */ | 
					
						
							|  |  |  | #define SO_DONTROUTE	0x0010	/* Don't do local routing.  */
 | 
					
						
							|  |  |  | #define SO_BROADCAST	0x0020	/* Allow transmission of
 | 
					
						
							| 
									
										
										
										
											2013-01-22 12:59:30 +01:00
										 |  |  | 				   broadcast messages.	*/ | 
					
						
							| 
									
										
										
										
											2012-10-09 09:47:14 +01:00
										 |  |  | #define SO_LINGER	0x0080	/* Block on close of a reliable
 | 
					
						
							|  |  |  | 				   socket to transmit pending data.  */ | 
					
						
							|  |  |  | #define SO_OOBINLINE 0x0100	/* Receive out-of-band data in-band.  */
 | 
					
						
							| 
									
										
										
										
											2013-01-22 09:49:50 +00:00
										 |  |  | #define SO_REUSEPORT 0x0200	/* Allow local address and port reuse.  */
 | 
					
						
							| 
									
										
										
										
											2012-10-09 09:47:14 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define SO_TYPE		0x1008	/* Compatible name for SO_STYLE.  */
 | 
					
						
							| 
									
										
										
										
											2013-01-22 12:59:30 +01:00
										 |  |  | #define SO_STYLE	SO_TYPE /* Synonym */
 | 
					
						
							| 
									
										
										
										
											2012-10-09 09:47:14 +01:00
										 |  |  | #define SO_ERROR	0x1007	/* get error status and clear */
 | 
					
						
							|  |  |  | #define SO_SNDBUF	0x1001	/* Send buffer size. */
 | 
					
						
							|  |  |  | #define SO_RCVBUF	0x1002	/* Receive buffer. */
 | 
					
						
							|  |  |  | #define SO_SNDLOWAT	0x1003	/* send low-water mark */
 | 
					
						
							|  |  |  | #define SO_RCVLOWAT	0x1004	/* receive low-water mark */
 | 
					
						
							|  |  |  | #define SO_SNDTIMEO	0x1005	/* send timeout */
 | 
					
						
							| 
									
										
										
										
											2013-01-22 12:59:30 +01:00
										 |  |  | #define SO_RCVTIMEO	0x1006	/* receive timeout */
 | 
					
						
							| 
									
										
										
										
											2012-10-09 09:47:14 +01:00
										 |  |  | #define SO_ACCEPTCONN	0x1009
 | 
					
						
							|  |  |  | #define SO_PROTOCOL	0x1028	/* protocol type */
 | 
					
						
							|  |  |  | #define SO_DOMAIN	0x1029	/* domain/socket family */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* linux-specific, might as well be the same as on i386 */ | 
					
						
							|  |  |  | #define SO_NO_CHECK	11
 | 
					
						
							|  |  |  | #define SO_PRIORITY	12
 | 
					
						
							|  |  |  | #define SO_BSDCOMPAT	14
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SO_PASSCRED	17
 | 
					
						
							|  |  |  | #define SO_PEERCRED	18
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Security levels - as per NRL IPv6 - don't actually do anything */ | 
					
						
							|  |  |  | #define SO_SECURITY_AUTHENTICATION		22
 | 
					
						
							|  |  |  | #define SO_SECURITY_ENCRYPTION_TRANSPORT	23
 | 
					
						
							|  |  |  | #define SO_SECURITY_ENCRYPTION_NETWORK		24
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SO_BINDTODEVICE		25
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Socket filtering */ | 
					
						
							| 
									
										
										
										
											2013-01-22 12:59:30 +01:00
										 |  |  | #define SO_ATTACH_FILTER	26
 | 
					
						
							|  |  |  | #define SO_DETACH_FILTER	27
 | 
					
						
							| 
									
										
											  
											
												sk-filter: Add ability to get socket filter program (v2)
The SO_ATTACH_FILTER option is set only. I propose to add the get
ability by using SO_ATTACH_FILTER in getsockopt. To be less
irritating to eyes the SO_GET_FILTER alias to it is declared. This
ability is required by checkpoint-restore project to be able to
save full state of a socket.
There are two issues with getting filter back.
First, kernel modifies the sock_filter->code on filter load, thus in
order to return the filter element back to user we have to decode it
into user-visible constants. Fortunately the modification in question
is interconvertible.
Second, the BPF_S_ALU_DIV_K code modifies the command argument k to
speed up the run-time division by doing kernel_k = reciprocal(user_k).
Bad news is that different user_k may result in same kernel_k, so we
can't get the original user_k back. Good news is that we don't have
to do it. What we need to is calculate a user2_k so, that
  reciprocal(user2_k) == reciprocal(user_k) == kernel_k
i.e. if it's re-loaded back the compiled again value will be exactly
the same as it was. That said, the user2_k can be calculated like this
  user2_k = reciprocal(kernel_k)
with an exception, that if kernel_k == 0, then user2_k == 1.
The optlen argument is treated like this -- when zero, kernel returns
the amount of sock_fprog elements in filter, otherwise it should be
large enough for the sock_fprog array.
changes since v1:
* Declared SO_GET_FILTER in all arch headers
* Added decode of vlan-tag codes
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
											
										 
											2012-11-01 02:01:48 +00:00
										 |  |  | #define SO_GET_FILTER		SO_ATTACH_FILTER
 | 
					
						
							| 
									
										
										
										
											2012-10-09 09:47:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-22 12:59:30 +01:00
										 |  |  | #define SO_PEERNAME		28
 | 
					
						
							| 
									
										
										
										
											2012-10-09 09:47:14 +01:00
										 |  |  | #define SO_TIMESTAMP		29
 | 
					
						
							|  |  |  | #define SCM_TIMESTAMP		SO_TIMESTAMP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SO_PEERSEC		30
 | 
					
						
							|  |  |  | #define SO_SNDBUFFORCE		31
 | 
					
						
							|  |  |  | #define SO_RCVBUFFORCE		33
 | 
					
						
							|  |  |  | #define SO_PASSSEC		34
 | 
					
						
							|  |  |  | #define SO_TIMESTAMPNS		35
 | 
					
						
							|  |  |  | #define SCM_TIMESTAMPNS		SO_TIMESTAMPNS
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SO_MARK			36
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SO_TIMESTAMPING		37
 | 
					
						
							|  |  |  | #define SCM_TIMESTAMPING	SO_TIMESTAMPING
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-22 12:59:30 +01:00
										 |  |  | #define SO_RXQ_OVFL		40
 | 
					
						
							| 
									
										
										
										
											2012-10-09 09:47:14 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define SO_WIFI_STATUS		41
 | 
					
						
							|  |  |  | #define SCM_WIFI_STATUS		SO_WIFI_STATUS
 | 
					
						
							|  |  |  | #define SO_PEEK_OFF		42
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Instruct lower device to use last 4-bytes of skb data as FCS */ | 
					
						
							|  |  |  | #define SO_NOFCS		43
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 22:55:49 +01:00
										 |  |  | #define SO_LOCK_FILTER		44
 | 
					
						
							| 
									
										
										
										
											2012-10-09 09:47:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-28 11:19:25 +00:00
										 |  |  | #define SO_SELECT_ERR_QUEUE	45
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-10 17:13:36 +03:00
										 |  |  | #define SO_BUSY_POLL		46
 | 
					
						
							| 
									
										
										
										
											2013-06-14 16:33:57 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-09 09:47:14 +01:00
										 |  |  | #endif /* _UAPI_ASM_SOCKET_H */
 |