Commit b0573dea1fb32ebc72ffa05980fd840df1d80860

Authored by Patrick McHardy
Committed by David S. Miller
1 parent f9e815b376

[NET]: Introduce SO_{SND,RCV}BUFFORCE socket options

Allows overriding of sysctl_{wmem,rmrm}_max

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 22 changed files with 58 additions and 2 deletions Side-by-side Diff

include/asm-alpha/socket.h
... ... @@ -25,6 +25,8 @@
25 25 #define SO_ERROR 0x1007
26 26 #define SO_SNDBUF 0x1001
27 27 #define SO_RCVBUF 0x1002
  28 +#define SO_SNDBUFFORCE 0x100a
  29 +#define SO_RCVBUFFORCE 0x100b
28 30 #define SO_RCVLOWAT 0x1010
29 31 #define SO_SNDLOWAT 0x1011
30 32 #define SO_RCVTIMEO 0x1012
include/asm-arm/socket.h
... ... @@ -14,6 +14,8 @@
14 14 #define SO_BROADCAST 6
15 15 #define SO_SNDBUF 7
16 16 #define SO_RCVBUF 8
  17 +#define SO_SNDBUFFORCE 32
  18 +#define SO_RCVBUFFORCE 33
17 19 #define SO_KEEPALIVE 9
18 20 #define SO_OOBINLINE 10
19 21 #define SO_NO_CHECK 11
include/asm-arm26/socket.h
... ... @@ -14,6 +14,8 @@
14 14 #define SO_BROADCAST 6
15 15 #define SO_SNDBUF 7
16 16 #define SO_RCVBUF 8
  17 +#define SO_SNDBUFFORCE 32
  18 +#define SO_RCVBUFFORCE 33
17 19 #define SO_KEEPALIVE 9
18 20 #define SO_OOBINLINE 10
19 21 #define SO_NO_CHECK 11
include/asm-cris/socket.h
... ... @@ -16,6 +16,8 @@
16 16 #define SO_BROADCAST 6
17 17 #define SO_SNDBUF 7
18 18 #define SO_RCVBUF 8
  19 +#define SO_SNDBUFFORCE 32
  20 +#define SO_RCVBUFFORCE 33
19 21 #define SO_KEEPALIVE 9
20 22 #define SO_OOBINLINE 10
21 23 #define SO_NO_CHECK 11
include/asm-frv/socket.h
... ... @@ -14,6 +14,8 @@
14 14 #define SO_BROADCAST 6
15 15 #define SO_SNDBUF 7
16 16 #define SO_RCVBUF 8
  17 +#define SO_SNDBUFFORCE 32
  18 +#define SO_RCVBUFFORCE 33
17 19 #define SO_KEEPALIVE 9
18 20 #define SO_OOBINLINE 10
19 21 #define SO_NO_CHECK 11
include/asm-h8300/socket.h
... ... @@ -14,6 +14,8 @@
14 14 #define SO_BROADCAST 6
15 15 #define SO_SNDBUF 7
16 16 #define SO_RCVBUF 8
  17 +#define SO_SNDBUFFORCE 32
  18 +#define SO_RCVBUFFORCE 33
17 19 #define SO_KEEPALIVE 9
18 20 #define SO_OOBINLINE 10
19 21 #define SO_NO_CHECK 11
include/asm-i386/socket.h
... ... @@ -14,6 +14,8 @@
14 14 #define SO_BROADCAST 6
15 15 #define SO_SNDBUF 7
16 16 #define SO_RCVBUF 8
  17 +#define SO_SNDBUFFORCE 32
  18 +#define SO_RCVBUFFORCE 33
17 19 #define SO_KEEPALIVE 9
18 20 #define SO_OOBINLINE 10
19 21 #define SO_NO_CHECK 11
include/asm-ia64/socket.h
... ... @@ -23,6 +23,8 @@
23 23 #define SO_BROADCAST 6
24 24 #define SO_SNDBUF 7
25 25 #define SO_RCVBUF 8
  26 +#define SO_SNDBUFFORCE 32
  27 +#define SO_RCVBUFFORCE 33
26 28 #define SO_KEEPALIVE 9
27 29 #define SO_OOBINLINE 10
28 30 #define SO_NO_CHECK 11
include/asm-m32r/socket.h
... ... @@ -14,6 +14,8 @@
14 14 #define SO_BROADCAST 6
15 15 #define SO_SNDBUF 7
16 16 #define SO_RCVBUF 8
  17 +#define SO_SNDBUFFORCE 32
  18 +#define SO_RCVBUFFORCE 33
17 19 #define SO_KEEPALIVE 9
18 20 #define SO_OOBINLINE 10
19 21 #define SO_NO_CHECK 11
include/asm-m68k/socket.h
... ... @@ -14,6 +14,8 @@
14 14 #define SO_BROADCAST 6
15 15 #define SO_SNDBUF 7
16 16 #define SO_RCVBUF 8
  17 +#define SO_SNDBUFFORCE 32
  18 +#define SO_RCVBUFFORCE 33
17 19 #define SO_KEEPALIVE 9
18 20 #define SO_OOBINLINE 10
19 21 #define SO_NO_CHECK 11
include/asm-mips/socket.h
... ... @@ -37,6 +37,8 @@
37 37 #define SO_ERROR 0x1007 /* get error status and clear */
38 38 #define SO_SNDBUF 0x1001 /* Send buffer size. */
39 39 #define SO_RCVBUF 0x1002 /* Receive buffer. */
  40 +#define SO_SNDBUFFORCE 0x100a
  41 +#define SO_RCVBUFFORCE 0x100b
40 42 #define SO_SNDLOWAT 0x1003 /* send low-water mark */
41 43 #define SO_RCVLOWAT 0x1004 /* receive low-water mark */
42 44 #define SO_SNDTIMEO 0x1005 /* send timeout */
include/asm-parisc/socket.h
... ... @@ -16,6 +16,8 @@
16 16 /* To add :#define SO_REUSEPORT 0x0200 */
17 17 #define SO_SNDBUF 0x1001
18 18 #define SO_RCVBUF 0x1002
  19 +#define SO_SNDBUFFORCE 0x100a
  20 +#define SO_RCVBUFFORCE 0x100b
19 21 #define SO_SNDLOWAT 0x1003
20 22 #define SO_RCVLOWAT 0x1004
21 23 #define SO_SNDTIMEO 0x1005
include/asm-ppc/socket.h
... ... @@ -20,6 +20,8 @@
20 20 #define SO_BROADCAST 6
21 21 #define SO_SNDBUF 7
22 22 #define SO_RCVBUF 8
  23 +#define SO_SNDBUFFORCE 32
  24 +#define SO_RCVBUFFORCE 33
23 25 #define SO_KEEPALIVE 9
24 26 #define SO_OOBINLINE 10
25 27 #define SO_NO_CHECK 11
include/asm-ppc64/socket.h
... ... @@ -21,6 +21,8 @@
21 21 #define SO_BROADCAST 6
22 22 #define SO_SNDBUF 7
23 23 #define SO_RCVBUF 8
  24 +#define SO_SNDBUFFORCE 32
  25 +#define SO_RCVBUFFORCE 33
24 26 #define SO_KEEPALIVE 9
25 27 #define SO_OOBINLINE 10
26 28 #define SO_NO_CHECK 11
include/asm-s390/socket.h
... ... @@ -22,6 +22,8 @@
22 22 #define SO_BROADCAST 6
23 23 #define SO_SNDBUF 7
24 24 #define SO_RCVBUF 8
  25 +#define SO_SNDBUFFORCE 32
  26 +#define SO_RCVBUFFORCE 33
25 27 #define SO_KEEPALIVE 9
26 28 #define SO_OOBINLINE 10
27 29 #define SO_NO_CHECK 11
include/asm-sh/socket.h
... ... @@ -14,6 +14,8 @@
14 14 #define SO_BROADCAST 6
15 15 #define SO_SNDBUF 7
16 16 #define SO_RCVBUF 8
  17 +#define SO_RCVBUFFORCE 32
  18 +#define SO_SNDBUFFORCE 33
17 19 #define SO_KEEPALIVE 9
18 20 #define SO_OOBINLINE 10
19 21 #define SO_NO_CHECK 11
include/asm-sparc/socket.h
... ... @@ -29,6 +29,8 @@
29 29  
30 30 #define SO_SNDBUF 0x1001
31 31 #define SO_RCVBUF 0x1002
  32 +#define SO_SNDBUFFORCE 0x100a
  33 +#define SO_RCVBUFFORCE 0x100b
32 34 #define SO_ERROR 0x1007
33 35 #define SO_TYPE 0x1008
34 36  
include/asm-sparc64/socket.h
... ... @@ -29,6 +29,8 @@
29 29  
30 30 #define SO_SNDBUF 0x1001
31 31 #define SO_RCVBUF 0x1002
  32 +#define SO_SNDBUFFORCE 0x100a
  33 +#define SO_RCVBUFFORCE 0x100b
32 34 #define SO_ERROR 0x1007
33 35 #define SO_TYPE 0x1008
34 36  
include/asm-v850/socket.h
... ... @@ -14,6 +14,8 @@
14 14 #define SO_BROADCAST 6
15 15 #define SO_SNDBUF 7
16 16 #define SO_RCVBUF 8
  17 +#define SO_SNDBUFFORCE 32
  18 +#define SO_RCVBUFFORCE 33
17 19 #define SO_KEEPALIVE 9
18 20 #define SO_OOBINLINE 10
19 21 #define SO_NO_CHECK 11
include/asm-x86_64/socket.h
... ... @@ -14,6 +14,8 @@
14 14 #define SO_BROADCAST 6
15 15 #define SO_SNDBUF 7
16 16 #define SO_RCVBUF 8
  17 +#define SO_SNDBUFFORCE 32
  18 +#define SO_RCVBUFFORCE 33
17 19 #define SO_KEEPALIVE 9
18 20 #define SO_OOBINLINE 10
19 21 #define SO_NO_CHECK 11
include/asm-xtensa/socket.h
... ... @@ -24,6 +24,8 @@
24 24 #define SO_BROADCAST 6
25 25 #define SO_SNDBUF 7
26 26 #define SO_RCVBUF 8
  27 +#define SO_SNDBUFFORCE 32
  28 +#define SO_RCVBUFFORCE 33
27 29 #define SO_KEEPALIVE 9
28 30 #define SO_OOBINLINE 10
29 31 #define SO_NO_CHECK 11
... ... @@ -260,7 +260,7 @@
260 260  
261 261 if (val > sysctl_wmem_max)
262 262 val = sysctl_wmem_max;
263   -
  263 +set_sndbuf:
264 264 sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
265 265 if ((val * 2) < SOCK_MIN_SNDBUF)
266 266 sk->sk_sndbuf = SOCK_MIN_SNDBUF;
... ... @@ -274,6 +274,13 @@
274 274 sk->sk_write_space(sk);
275 275 break;
276 276  
  277 + case SO_SNDBUFFORCE:
  278 + if (!capable(CAP_NET_ADMIN)) {
  279 + ret = -EPERM;
  280 + break;
  281 + }
  282 + goto set_sndbuf;
  283 +
277 284 case SO_RCVBUF:
278 285 /* Don't error on this BSD doesn't and if you think
279 286 about it this is right. Otherwise apps have to
... ... @@ -282,7 +289,7 @@
282 289  
283 290 if (val > sysctl_rmem_max)
284 291 val = sysctl_rmem_max;
285   -
  292 +set_rcvbuf:
286 293 sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
287 294 /* FIXME: is this lower bound the right one? */
288 295 if ((val * 2) < SOCK_MIN_RCVBUF)
... ... @@ -290,6 +297,13 @@
290 297 else
291 298 sk->sk_rcvbuf = val * 2;
292 299 break;
  300 +
  301 + case SO_RCVBUFFORCE:
  302 + if (!capable(CAP_NET_ADMIN)) {
  303 + ret = -EPERM;
  304 + break;
  305 + }
  306 + goto set_rcvbuf;
293 307  
294 308 case SO_KEEPALIVE:
295 309 #ifdef CONFIG_INET