Skip to content

Commit

Permalink
net: implement a SO_DOMAIN getsockoption
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jan Engelhardt authored and David S. Miller committed Aug 5, 2009
1 parent 49c794e commit 0d6038e
Show file tree
Hide file tree
Showing 20 changed files with 24 additions and 0 deletions.
1 change: 1 addition & 0 deletions arch/alpha/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions arch/arm/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_SOCKET_H */
1 change: 1 addition & 0 deletions arch/avr32/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* __ASM_AVR32_SOCKET_H */
1 change: 1 addition & 0 deletions arch/cris/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_SOCKET_H */

Expand Down
1 change: 1 addition & 0 deletions arch/frv/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_SOCKET_H */

1 change: 1 addition & 0 deletions arch/h8300/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_SOCKET_H */
1 change: 1 addition & 0 deletions arch/ia64/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,5 +67,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_IA64_SOCKET_H */
1 change: 1 addition & 0 deletions arch/m32r/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_M32R_SOCKET_H */
1 change: 1 addition & 0 deletions arch/m68k/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_SOCKET_H */
1 change: 1 addition & 0 deletions arch/microblaze/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,5 +67,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_MICROBLAZE_SOCKET_H */
1 change: 1 addition & 0 deletions arch/mips/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions arch/mn10300/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_SOCKET_H */
1 change: 1 addition & 0 deletions arch/parisc/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions arch/powerpc/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_POWERPC_SOCKET_H */
1 change: 1 addition & 0 deletions arch/s390/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,5 +66,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_SOCKET_H */
1 change: 1 addition & 0 deletions arch/sparc/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand Down
1 change: 1 addition & 0 deletions arch/x86/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _ASM_X86_SOCKET_H */
1 change: 1 addition & 0 deletions arch/xtensa/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* _XTENSA_SOCKET_H */
1 change: 1 addition & 0 deletions include/asm-generic/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,6 @@
#define SCM_TIMESTAMPING SO_TIMESTAMPING

#define SO_PROTOCOL 38
#define SO_DOMAIN 39

#endif /* __ASM_GENERIC_SOCKET_H */
5 changes: 5 additions & 0 deletions net/core/sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 0d6038e

Please sign in to comment.