diff options
author | Tom Herbert <therbert@google.com> | 2013-01-22 04:49:50 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-01-23 13:44:00 -0500 |
commit | 055dc21a1d1d219608cd4baac7d0683fb2cbbe8a (patch) | |
tree | 23e66bde4668a92585f62d15c759c53fd4d0892f | |
parent | 4a633a602c26497b8285a202830829d3be007c7b (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.h | 2 | ||||
-rw-r--r-- | arch/avr32/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/cris/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/frv/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/h8300/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/ia64/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/m32r/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/mips/include/uapi/asm/socket.h | 3 | ||||
-rw-r--r-- | arch/mn10300/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/parisc/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/powerpc/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/s390/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/sparc/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/xtensa/include/uapi/asm/socket.h | 2 | ||||
-rw-r--r-- | include/linux/random.h | 6 | ||||
-rw-r--r-- | include/net/sock.h | 5 | ||||
-rw-r--r-- | include/uapi/asm-generic/socket.h | 3 | ||||
-rw-r--r-- | net/core/sock.c | 7 |
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. */ |
32 | To 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. */ | ||
78 | static 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; |