net: implement a SO_DOMAIN getsockoption
authorJan Engelhardt <jengelh@medozas.de>
Tue, 4 Aug 2009 07:28:29 +0000 (07:28 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 5 Aug 2009 20:02:57 +0000 (13:02 -0700)
This sockopt goes in line with SO_TYPE and SO_PROTOCOL. It makes it
possible for userspace programs to pass around file descriptors — I
am referring to arguments-to-functions, but it may even work for the
fd passing over UNIX sockets — without needing to also pass the
auxiliary information (PF_INET6/IPPROTO_TCP).

Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
20 files changed:
arch/alpha/include/asm/socket.h
arch/arm/include/asm/socket.h
arch/avr32/include/asm/socket.h
arch/cris/include/asm/socket.h
arch/frv/include/asm/socket.h
arch/h8300/include/asm/socket.h
arch/ia64/include/asm/socket.h
arch/m32r/include/asm/socket.h
arch/m68k/include/asm/socket.h
arch/microblaze/include/asm/socket.h
arch/mips/include/asm/socket.h
arch/mn10300/include/asm/socket.h
arch/parisc/include/asm/socket.h
arch/powerpc/include/asm/socket.h
arch/s390/include/asm/socket.h
arch/sparc/include/asm/socket.h
arch/x86/include/asm/socket.h
arch/xtensa/include/asm/socket.h
include/asm-generic/socket.h
net/core/sock.c

index 2f8b4d3777497ea0f640573feacfa5656dc96a1d..26773e3246e2b6fab6e4c342068688247dfee239 100644 (file)
@@ -33,6 +33,7 @@
 #define        SO_SNDTIMEO     0x1013
 #define SO_ACCEPTCONN  0x1014
 #define SO_PROTOCOL    0x1028
+#define SO_DOMAIN      0x1029
 
 /* linux-specific, might as well be the same as on i386 */
 #define SO_NO_CHECK    11
index 7f47454ffbf3ebcf440e658a639421ab266440f1..92ac61d294fd81bc33403990c2a520d51578d0dc 100644 (file)
@@ -58,5 +58,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_SOCKET_H */
index 6af2866a4f003eb3a315010e8b6d69ab887cd61f..fe863f9794d545489686d0e47c1fc53daac1bd63 100644 (file)
@@ -58,5 +58,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* __ASM_AVR32_SOCKET_H */
index f3859fb0990c6502c9f5b95e435af38832562164..45ec49bdb7b16d11f2aa58c006bb27b26874dcef 100644 (file)
@@ -60,6 +60,7 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_SOCKET_H */
 
index 8dab3486ffa40f6feae5cd312e1d3fa2e8a91605..2dea726095c20ae1b2ec530d8769eaf9d4d03cb1 100644 (file)
@@ -58,6 +58,7 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_SOCKET_H */
 
index ba770d09cd6370371218b6156f04fbe845672ed1..1547f01c8e22decafe3370824ac1020c1c5fce1a 100644 (file)
@@ -58,5 +58,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_SOCKET_H */
index 091cd9d47d0fe261b35fd6b9ecef8784d2d8eda4..0b0d5ff062e5f1f276f0ae1d71a2035cf923fdcd 100644 (file)
@@ -67,5 +67,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_IA64_SOCKET_H */
index d36f5928fb7981e58ff382f224fd24e88e7f0245..3390a864f224f9f21cd6f62dbb5daf2eeb62ebdb 100644 (file)
@@ -58,5 +58,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_M32R_SOCKET_H */
index 060cb7ed024fcf4c5cc680f574cd8d37d1821b12..eee01cce921b8a259e7bf57aa407b4afc6b29704 100644 (file)
@@ -58,5 +58,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_SOCKET_H */
index 96bf8bfa935e114e5ced1662f9bc66b9b84e3ff5..7361ae7cfcde1842885e6da3cf78cc5dcc21b4a5 100644 (file)
@@ -67,5 +67,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_MICROBLAZE_SOCKET_H */
index 289ce5f5f2a30d97a892745484d8ab7cf1d8cd4d..ae05accd9fe4594c4c1d6a9f7b6f6713843680c5 100644 (file)
@@ -43,6 +43,7 @@ To add: #define SO_REUSEPORT 0x0200   /* Allow local address and port reuse.  */
 #define SO_RCVTIMEO    0x1006  /* receive timeout */
 #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
index 19d7cf709b77bf661cdd72d3b03b2e49a4623e4f..4df75af29d76cfa63b5b12900f88f50911cc8aa9 100644 (file)
@@ -58,5 +58,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_SOCKET_H */
index a658b09df624ed7a5412ad52f6ae9be651b44577..960b1e5d8e16152381af97335c487be07cae316e 100644 (file)
@@ -25,6 +25,7 @@
 #define SO_ERROR       0x1007
 #define SO_TYPE                0x1008
 #define SO_PROTOCOL    0x1028
+#define SO_DOMAIN      0x1029
 #define SO_PEERNAME    0x2000
 
 #define SO_NO_CHECK    0x400b
index 609049d7117e9460826d3868e7551b389925cbc1..3ab8b3e6feb0545e57a13f4e8258238efcd22e2b 100644 (file)
@@ -65,5 +65,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_POWERPC_SOCKET_H */
index 65baa9a83abc318aa07348e0aaadc85db7faf924..e42df89a0b85e644e037f4d3ea5114599ebb0820 100644 (file)
@@ -66,5 +66,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_SOCKET_H */
index 9cbbfafd05384196b49194a0e421693fde01e379..3a5ae3d12088dd94e3b07c1a4378208660149a5f 100644 (file)
@@ -30,6 +30,7 @@
 #define SO_ERROR       0x1007
 #define SO_TYPE                0x1008
 #define SO_PROTOCOL    0x1028
+#define SO_DOMAIN      0x1029
 
 
 /* Linux specific, keep the same. */
index 1077d2535a3200a975777c5283ede2370e13625c..b2a8c74f2d064410bd8c3c85f00c63f54bde6ba4 100644 (file)
@@ -58,5 +58,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _ASM_X86_SOCKET_H */
index e47f172142f1e340b43630feb974c2b016519b01..beb3a6bdb61d0dddf8c9abfb9aab6667b2116a1f 100644 (file)
@@ -69,5 +69,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* _XTENSA_SOCKET_H */
index 7e24d186616e08bcbcf748f87c244a2f4ba0bb08..538991cef6f0300be0eb5407dcc90491677001b8 100644 (file)
@@ -61,5 +61,6 @@
 #define SCM_TIMESTAMPING       SO_TIMESTAMPING
 
 #define SO_PROTOCOL            38
+#define SO_DOMAIN              39
 
 #endif /* __ASM_GENERIC_SOCKET_H */
index ebce661234acd049e565d363def2408216a9ace1..3ac34ea6ec058832975a1f8ad1d946337b7cf474 100644 (file)
@@ -483,6 +483,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
                break;
        case SO_TYPE:
        case SO_PROTOCOL:
+       case SO_DOMAIN:
        case SO_ERROR:
                ret = -ENOPROTOOPT;
                break;
@@ -769,6 +770,10 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
                v.val = sk->sk_protocol;
                break;
 
+       case SO_DOMAIN:
+               v.val = sk->sk_family;
+               break;
+
        case SO_ERROR:
                v.val = -sock_error(sk);
                if (v.val == 0)