aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Herbert <therbert@google.com>2013-01-22 04:49:50 -0500
committerDavid S. Miller <davem@davemloft.net>2013-01-23 13:44:00 -0500
commit055dc21a1d1d219608cd4baac7d0683fb2cbbe8a (patch)
tree23e66bde4668a92585f62d15c759c53fd4d0892f
parent4a633a602c26497b8285a202830829d3be007c7b (diff)
soreuseport: infrastructure
Definitions and macros for implementing soreusport. Signed-off-by: Tom Herbert <therbert@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--arch/alpha/include/uapi/asm/socket.h2
-rw-r--r--arch/avr32/include/uapi/asm/socket.h2
-rw-r--r--arch/cris/include/uapi/asm/socket.h2
-rw-r--r--arch/frv/include/uapi/asm/socket.h2
-rw-r--r--arch/h8300/include/uapi/asm/socket.h2
-rw-r--r--arch/ia64/include/uapi/asm/socket.h2
-rw-r--r--arch/m32r/include/uapi/asm/socket.h2
-rw-r--r--arch/mips/include/uapi/asm/socket.h3
-rw-r--r--arch/mn10300/include/uapi/asm/socket.h2
-rw-r--r--arch/parisc/include/uapi/asm/socket.h2
-rw-r--r--arch/powerpc/include/uapi/asm/socket.h2
-rw-r--r--arch/s390/include/uapi/asm/socket.h2
-rw-r--r--arch/sparc/include/uapi/asm/socket.h2
-rw-r--r--arch/xtensa/include/uapi/asm/socket.h2
-rw-r--r--include/linux/random.h6
-rw-r--r--include/net/sock.h5
-rw-r--r--include/uapi/asm-generic/socket.h3
-rw-r--r--net/core/sock.c7
18 files changed, 32 insertions, 18 deletions
diff --git a/arch/alpha/include/uapi/asm/socket.h b/arch/alpha/include/uapi/asm/socket.h
index 755702eefd9c..c5195524d1ef 100644
--- a/arch/alpha/include/uapi/asm/socket.h
+++ b/arch/alpha/include/uapi/asm/socket.h
@@ -19,7 +19,7 @@
19#define SO_BROADCAST 0x0020 19#define SO_BROADCAST 0x0020
20#define SO_LINGER 0x0080 20#define SO_LINGER 0x0080
21#define SO_OOBINLINE 0x0100 21#define SO_OOBINLINE 0x0100
22/* To add :#define SO_REUSEPORT 0x0200 */ 22#define SO_REUSEPORT 0x0200
23 23
24#define SO_TYPE 0x1008 24#define SO_TYPE 0x1008
25#define SO_ERROR 0x1007 25#define SO_ERROR 0x1007
diff --git a/arch/avr32/include/uapi/asm/socket.h b/arch/avr32/include/uapi/asm/socket.h
index f3f38a0e2ef9..51c6401582ea 100644
--- a/arch/avr32/include/uapi/asm/socket.h
+++ b/arch/avr32/include/uapi/asm/socket.h
@@ -22,7 +22,7 @@
22#define SO_PRIORITY 12 22#define SO_PRIORITY 12
23#define SO_LINGER 13 23#define SO_LINGER 13
24#define SO_BSDCOMPAT 14 24#define SO_BSDCOMPAT 14
25/* To add :#define SO_REUSEPORT 15 */ 25#define SO_REUSEPORT 15
26#define SO_PASSCRED 16 26#define SO_PASSCRED 16
27#define SO_PEERCRED 17 27#define SO_PEERCRED 17
28#define SO_RCVLOWAT 18 28#define SO_RCVLOWAT 18
diff --git a/arch/cris/include/uapi/asm/socket.h b/arch/cris/include/uapi/asm/socket.h
index 406b5838defd..50692b738c75 100644
--- a/arch/cris/include/uapi/asm/socket.h
+++ b/arch/cris/include/uapi/asm/socket.h
@@ -24,7 +24,7 @@
24#define SO_PRIORITY 12 24#define SO_PRIORITY 12
25#define SO_LINGER 13 25#define SO_LINGER 13
26#define SO_BSDCOMPAT 14 26#define SO_BSDCOMPAT 14
27/* To add :#define SO_REUSEPORT 15 */ 27#define SO_REUSEPORT 15
28#define SO_PASSCRED 16 28#define SO_PASSCRED 16
29#define SO_PEERCRED 17 29#define SO_PEERCRED 17
30#define SO_RCVLOWAT 18 30#define SO_RCVLOWAT 18
diff --git a/arch/frv/include/uapi/asm/socket.h b/arch/frv/include/uapi/asm/socket.h
index d8e1132a1ab6..595391f0f98c 100644
--- a/arch/frv/include/uapi/asm/socket.h
+++ b/arch/frv/include/uapi/asm/socket.h
@@ -22,7 +22,7 @@
22#define SO_PRIORITY 12 22#define SO_PRIORITY 12
23#define SO_LINGER 13 23#define SO_LINGER 13
24#define SO_BSDCOMPAT 14 24#define SO_BSDCOMPAT 14
25/* To add :#define SO_REUSEPORT 15 */ 25#define SO_REUSEPORT 15
26#define SO_PASSCRED 16 26#define SO_PASSCRED 16
27#define SO_PEERCRED 17 27#define SO_PEERCRED 17
28#define SO_RCVLOWAT 18 28#define SO_RCVLOWAT 18
diff --git a/arch/h8300/include/uapi/asm/socket.h b/arch/h8300/include/uapi/asm/socket.h
index c8b87a828206..43e32621da7d 100644
--- a/arch/h8300/include/uapi/asm/socket.h
+++ b/arch/h8300/include/uapi/asm/socket.h
@@ -22,7 +22,7 @@
22#define SO_PRIORITY 12 22#define SO_PRIORITY 12
23#define SO_LINGER 13 23#define SO_LINGER 13
24#define SO_BSDCOMPAT 14 24#define SO_BSDCOMPAT 14
25/* To add :#define SO_REUSEPORT 15 */ 25#define SO_REUSEPORT 15
26#define SO_PASSCRED 16 26#define SO_PASSCRED 16
27#define SO_PEERCRED 17 27#define SO_PEERCRED 17
28#define SO_RCVLOWAT 18 28#define SO_RCVLOWAT 18
diff --git a/arch/ia64/include/uapi/asm/socket.h b/arch/ia64/include/uapi/asm/socket.h
index f390896c3104..c567adc8bea5 100644
--- a/arch/ia64/include/uapi/asm/socket.h
+++ b/arch/ia64/include/uapi/asm/socket.h
@@ -31,7 +31,7 @@
31#define SO_PRIORITY 12 31#define SO_PRIORITY 12
32#define SO_LINGER 13 32#define SO_LINGER 13
33#define SO_BSDCOMPAT 14 33#define SO_BSDCOMPAT 14
34/* To add :#define SO_REUSEPORT 15 */ 34#define SO_REUSEPORT 15
35#define SO_PASSCRED 16 35#define SO_PASSCRED 16
36#define SO_PEERCRED 17 36#define SO_PEERCRED 17
37#define SO_RCVLOWAT 18 37#define SO_RCVLOWAT 18
diff --git a/arch/m32r/include/uapi/asm/socket.h b/arch/m32r/include/uapi/asm/socket.h
index 6a895155e7a3..519afa2755db 100644
--- a/arch/m32r/include/uapi/asm/socket.h
+++ b/arch/m32r/include/uapi/asm/socket.h
@@ -22,7 +22,7 @@
22#define SO_PRIORITY 12 22#define SO_PRIORITY 12
23#define SO_LINGER 13 23#define SO_LINGER 13
24#define SO_BSDCOMPAT 14 24#define SO_BSDCOMPAT 14
25/* To add :#define SO_REUSEPORT 15 */ 25#define SO_REUSEPORT 15
26#define SO_PASSCRED 16 26#define SO_PASSCRED 16
27#define SO_PEERCRED 17 27#define SO_PEERCRED 17
28#define SO_RCVLOWAT 18 28#define SO_RCVLOWAT 18
diff --git a/arch/mips/include/uapi/asm/socket.h b/arch/mips/include/uapi/asm/socket.h
index 9d11a7713923..7e2723637b35 100644
--- a/arch/mips/include/uapi/asm/socket.h
+++ b/arch/mips/include/uapi/asm/socket.h
@@ -28,8 +28,7 @@
28#define SO_LINGER 0x0080 /* Block on close of a reliable 28#define SO_LINGER 0x0080 /* Block on close of a reliable
29 socket to transmit pending data. */ 29 socket to transmit pending data. */
30#define SO_OOBINLINE 0x0100 /* Receive out-of-band data in-band. */ 30#define SO_OOBINLINE 0x0100 /* Receive out-of-band data in-band. */
31#if 0 31#define SO_REUSEPORT 0x0200 /* Allow local address and port reuse. */
32To add: #define SO_REUSEPORT 0x0200 /* Allow local address and port reuse. */
33#endif 32#endif
34 33
35#define SO_TYPE 0x1008 /* Compatible name for SO_STYLE. */ 34#define SO_TYPE 0x1008 /* Compatible name for SO_STYLE. */
diff --git a/arch/mn10300/include/uapi/asm/socket.h b/arch/mn10300/include/uapi/asm/socket.h
index ab702c40b30e..5c7c7c988544 100644
--- a/arch/mn10300/include/uapi/asm/socket.h
+++ b/arch/mn10300/include/uapi/asm/socket.h
@@ -22,7 +22,7 @@
22#define SO_PRIORITY 12 22#define SO_PRIORITY 12
23#define SO_LINGER 13 23#define SO_LINGER 13
24#define SO_BSDCOMPAT 14 24#define SO_BSDCOMPAT 14
25/* To add :#define SO_REUSEPORT 15 */ 25#define SO_REUSEPORT 15
26#define SO_PASSCRED 16 26#define SO_PASSCRED 16
27#define SO_PEERCRED 17 27#define SO_PEERCRED 17
28#define SO_RCVLOWAT 18 28#define SO_RCVLOWAT 18
diff --git a/arch/parisc/include/uapi/asm/socket.h b/arch/parisc/include/uapi/asm/socket.h
index da2c8d3c209e..526e4b9aece0 100644
--- a/arch/parisc/include/uapi/asm/socket.h
+++ b/arch/parisc/include/uapi/asm/socket.h
@@ -13,7 +13,7 @@
13#define SO_BROADCAST 0x0020 13#define SO_BROADCAST 0x0020
14#define SO_LINGER 0x0080 14#define SO_LINGER 0x0080
15#define SO_OOBINLINE 0x0100 15#define SO_OOBINLINE 0x0100
16/* To add :#define SO_REUSEPORT 0x0200 */ 16#define SO_REUSEPORT 0x0200
17#define SO_SNDBUF 0x1001 17#define SO_SNDBUF 0x1001
18#define SO_RCVBUF 0x1002 18#define SO_RCVBUF 0x1002
19#define SO_SNDBUFFORCE 0x100a 19#define SO_SNDBUFFORCE 0x100a
diff --git a/arch/powerpc/include/uapi/asm/socket.h b/arch/powerpc/include/uapi/asm/socket.h
index e6ca31816cc9..a26dcaece509 100644
--- a/arch/powerpc/include/uapi/asm/socket.h
+++ b/arch/powerpc/include/uapi/asm/socket.h
@@ -29,7 +29,7 @@
29#define SO_PRIORITY 12 29#define SO_PRIORITY 12
30#define SO_LINGER 13 30#define SO_LINGER 13
31#define SO_BSDCOMPAT 14 31#define SO_BSDCOMPAT 14
32/* To add :#define SO_REUSEPORT 15 */ 32#define SO_REUSEPORT 15
33#define SO_RCVLOWAT 16 33#define SO_RCVLOWAT 16
34#define SO_SNDLOWAT 17 34#define SO_SNDLOWAT 17
35#define SO_RCVTIMEO 18 35#define SO_RCVTIMEO 18
diff --git a/arch/s390/include/uapi/asm/socket.h b/arch/s390/include/uapi/asm/socket.h
index 9ce60b68f070..f99eea7fff0f 100644
--- a/arch/s390/include/uapi/asm/socket.h
+++ b/arch/s390/include/uapi/asm/socket.h
@@ -28,7 +28,7 @@
28#define SO_PRIORITY 12 28#define SO_PRIORITY 12
29#define SO_LINGER 13 29#define SO_LINGER 13
30#define SO_BSDCOMPAT 14 30#define SO_BSDCOMPAT 14
31/* To add :#define SO_REUSEPORT 15 */ 31#define SO_REUSEPORT 15
32#define SO_PASSCRED 16 32#define SO_PASSCRED 16
33#define SO_PEERCRED 17 33#define SO_PEERCRED 17
34#define SO_RCVLOWAT 18 34#define SO_RCVLOWAT 18
diff --git a/arch/sparc/include/uapi/asm/socket.h b/arch/sparc/include/uapi/asm/socket.h
index fbbba57547d1..cbbad74b2e06 100644
--- a/arch/sparc/include/uapi/asm/socket.h
+++ b/arch/sparc/include/uapi/asm/socket.h
@@ -15,7 +15,7 @@
15#define SO_PEERCRED 0x0040 15#define SO_PEERCRED 0x0040
16#define SO_LINGER 0x0080 16#define SO_LINGER 0x0080
17#define SO_OOBINLINE 0x0100 17#define SO_OOBINLINE 0x0100
18/* To add :#define SO_REUSEPORT 0x0200 */ 18#define SO_REUSEPORT 0x0200
19#define SO_BSDCOMPAT 0x0400 19#define SO_BSDCOMPAT 0x0400
20#define SO_RCVLOWAT 0x0800 20#define SO_RCVLOWAT 0x0800
21#define SO_SNDLOWAT 0x1000 21#define SO_SNDLOWAT 0x1000
diff --git a/arch/xtensa/include/uapi/asm/socket.h b/arch/xtensa/include/uapi/asm/socket.h
index dbf316487b51..35905cb6e419 100644
--- a/arch/xtensa/include/uapi/asm/socket.h
+++ b/arch/xtensa/include/uapi/asm/socket.h
@@ -32,7 +32,7 @@
32#define SO_PRIORITY 12 32#define SO_PRIORITY 12
33#define SO_LINGER 13 33#define SO_LINGER 13
34#define SO_BSDCOMPAT 14 34#define SO_BSDCOMPAT 14
35/* To add :#define SO_REUSEPORT 15 */ 35#define SO_REUSEPORT 15
36#define SO_PASSCRED 16 36#define SO_PASSCRED 16
37#define SO_PEERCRED 17 37#define SO_PEERCRED 17
38#define SO_RCVLOWAT 18 38#define SO_RCVLOWAT 18
diff --git a/include/linux/random.h b/include/linux/random.h
index d9846088c2c5..347ce553a306 100644
--- a/include/linux/random.h
+++ b/include/linux/random.h
@@ -74,4 +74,10 @@ static inline int arch_get_random_int(unsigned int *v)
74} 74}
75#endif 75#endif
76 76
77/* Pseudo random number generator from numerical recipes. */
78static inline u32 next_pseudo_random32(u32 seed)
79{
80 return seed * 1664525 + 1013904223;
81}
82
77#endif /* _LINUX_RANDOM_H */ 83#endif /* _LINUX_RANDOM_H */
diff --git a/include/net/sock.h b/include/net/sock.h
index 5a34e2f03657..581dc6bd7dc6 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -140,6 +140,7 @@ typedef __u64 __bitwise __addrpair;
140 * @skc_family: network address family 140 * @skc_family: network address family
141 * @skc_state: Connection state 141 * @skc_state: Connection state
142 * @skc_reuse: %SO_REUSEADDR setting 142 * @skc_reuse: %SO_REUSEADDR setting
143 * @skc_reuseport: %SO_REUSEPORT setting
143 * @skc_bound_dev_if: bound device index if != 0 144 * @skc_bound_dev_if: bound device index if != 0
144 * @skc_bind_node: bind hash linkage for various protocol lookup tables 145 * @skc_bind_node: bind hash linkage for various protocol lookup tables
145 * @skc_portaddr_node: second hash linkage for UDP/UDP-Lite protocol 146 * @skc_portaddr_node: second hash linkage for UDP/UDP-Lite protocol
@@ -179,7 +180,8 @@ struct sock_common {
179 180
180 unsigned short skc_family; 181 unsigned short skc_family;
181 volatile unsigned char skc_state; 182 volatile unsigned char skc_state;
182 unsigned char skc_reuse; 183 unsigned char skc_reuse:4;
184 unsigned char skc_reuseport:4;
183 int skc_bound_dev_if; 185 int skc_bound_dev_if;
184 union { 186 union {
185 struct hlist_node skc_bind_node; 187 struct hlist_node skc_bind_node;
@@ -297,6 +299,7 @@ struct sock {
297#define sk_family __sk_common.skc_family 299#define sk_family __sk_common.skc_family
298#define sk_state __sk_common.skc_state 300#define sk_state __sk_common.skc_state
299#define sk_reuse __sk_common.skc_reuse 301#define sk_reuse __sk_common.skc_reuse
302#define sk_reuseport __sk_common.skc_reuseport
300#define sk_bound_dev_if __sk_common.skc_bound_dev_if 303#define sk_bound_dev_if __sk_common.skc_bound_dev_if
301#define sk_bind_node __sk_common.skc_bind_node 304#define sk_bind_node __sk_common.skc_bind_node
302#define sk_prot __sk_common.skc_prot 305#define sk_prot __sk_common.skc_prot
diff --git a/include/uapi/asm-generic/socket.h b/include/uapi/asm-generic/socket.h
index 3f6a99201410..4ef3acbba5da 100644
--- a/include/uapi/asm-generic/socket.h
+++ b/include/uapi/asm-generic/socket.h
@@ -22,8 +22,7 @@
22#define SO_PRIORITY 12 22#define SO_PRIORITY 12
23#define SO_LINGER 13 23#define SO_LINGER 13
24#define SO_BSDCOMPAT 14 24#define SO_BSDCOMPAT 14
25/* To add :#define SO_REUSEPORT 15 */ 25#define SO_REUSEPORT 15
26
27#ifndef SO_PASSCRED /* powerpc only differs in these */ 26#ifndef SO_PASSCRED /* powerpc only differs in these */
28#define SO_PASSCRED 16 27#define SO_PASSCRED 16
29#define SO_PEERCRED 17 28#define SO_PEERCRED 17
diff --git a/net/core/sock.c b/net/core/sock.c
index 8258fb741e9a..235fb89e8973 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -665,6 +665,9 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
665 case SO_REUSEADDR: 665 case SO_REUSEADDR:
666 sk->sk_reuse = (valbool ? SK_CAN_REUSE : SK_NO_REUSE); 666 sk->sk_reuse = (valbool ? SK_CAN_REUSE : SK_NO_REUSE);
667 break; 667 break;
668 case SO_REUSEPORT:
669 sk->sk_reuseport = valbool;
670 break;
668 case SO_TYPE: 671 case SO_TYPE:
669 case SO_PROTOCOL: 672 case SO_PROTOCOL:
670 case SO_DOMAIN: 673 case SO_DOMAIN:
@@ -972,6 +975,10 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
972 v.val = sk->sk_reuse; 975 v.val = sk->sk_reuse;
973 break; 976 break;
974 977
978 case SO_REUSEPORT:
979 v.val = sk->sk_reuseport;
980 break;
981
975 case SO_KEEPALIVE: 982 case SO_KEEPALIVE:
976 v.val = sock_flag(sk, SOCK_KEEPOPEN); 983 v.val = sock_flag(sk, SOCK_KEEPOPEN);
977 break; 984 break;