[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>
This commit is contained in:
Родитель
f9e815b376
Коммит
b0573dea1f
|
@ -25,6 +25,8 @@
|
||||||
#define SO_ERROR 0x1007
|
#define SO_ERROR 0x1007
|
||||||
#define SO_SNDBUF 0x1001
|
#define SO_SNDBUF 0x1001
|
||||||
#define SO_RCVBUF 0x1002
|
#define SO_RCVBUF 0x1002
|
||||||
|
#define SO_SNDBUFFORCE 0x100a
|
||||||
|
#define SO_RCVBUFFORCE 0x100b
|
||||||
#define SO_RCVLOWAT 0x1010
|
#define SO_RCVLOWAT 0x1010
|
||||||
#define SO_SNDLOWAT 0x1011
|
#define SO_SNDLOWAT 0x1011
|
||||||
#define SO_RCVTIMEO 0x1012
|
#define SO_RCVTIMEO 0x1012
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -37,6 +37,8 @@ To add: #define SO_REUSEPORT 0x0200 /* Allow local address and port reuse. */
|
||||||
#define SO_ERROR 0x1007 /* get error status and clear */
|
#define SO_ERROR 0x1007 /* get error status and clear */
|
||||||
#define SO_SNDBUF 0x1001 /* Send buffer size. */
|
#define SO_SNDBUF 0x1001 /* Send buffer size. */
|
||||||
#define SO_RCVBUF 0x1002 /* Receive buffer. */
|
#define SO_RCVBUF 0x1002 /* Receive buffer. */
|
||||||
|
#define SO_SNDBUFFORCE 0x100a
|
||||||
|
#define SO_RCVBUFFORCE 0x100b
|
||||||
#define SO_SNDLOWAT 0x1003 /* send low-water mark */
|
#define SO_SNDLOWAT 0x1003 /* send low-water mark */
|
||||||
#define SO_RCVLOWAT 0x1004 /* receive low-water mark */
|
#define SO_RCVLOWAT 0x1004 /* receive low-water mark */
|
||||||
#define SO_SNDTIMEO 0x1005 /* send timeout */
|
#define SO_SNDTIMEO 0x1005 /* send timeout */
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
/* To add :#define SO_REUSEPORT 0x0200 */
|
/* To add :#define SO_REUSEPORT 0x0200 */
|
||||||
#define SO_SNDBUF 0x1001
|
#define SO_SNDBUF 0x1001
|
||||||
#define SO_RCVBUF 0x1002
|
#define SO_RCVBUF 0x1002
|
||||||
|
#define SO_SNDBUFFORCE 0x100a
|
||||||
|
#define SO_RCVBUFFORCE 0x100b
|
||||||
#define SO_SNDLOWAT 0x1003
|
#define SO_SNDLOWAT 0x1003
|
||||||
#define SO_RCVLOWAT 0x1004
|
#define SO_RCVLOWAT 0x1004
|
||||||
#define SO_SNDTIMEO 0x1005
|
#define SO_SNDTIMEO 0x1005
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_RCVBUFFORCE 32
|
||||||
|
#define SO_SNDBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
|
|
||||||
#define SO_SNDBUF 0x1001
|
#define SO_SNDBUF 0x1001
|
||||||
#define SO_RCVBUF 0x1002
|
#define SO_RCVBUF 0x1002
|
||||||
|
#define SO_SNDBUFFORCE 0x100a
|
||||||
|
#define SO_RCVBUFFORCE 0x100b
|
||||||
#define SO_ERROR 0x1007
|
#define SO_ERROR 0x1007
|
||||||
#define SO_TYPE 0x1008
|
#define SO_TYPE 0x1008
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
|
|
||||||
#define SO_SNDBUF 0x1001
|
#define SO_SNDBUF 0x1001
|
||||||
#define SO_RCVBUF 0x1002
|
#define SO_RCVBUF 0x1002
|
||||||
|
#define SO_SNDBUFFORCE 0x100a
|
||||||
|
#define SO_RCVBUFFORCE 0x100b
|
||||||
#define SO_ERROR 0x1007
|
#define SO_ERROR 0x1007
|
||||||
#define SO_TYPE 0x1008
|
#define SO_TYPE 0x1008
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
#define SO_BROADCAST 6
|
#define SO_BROADCAST 6
|
||||||
#define SO_SNDBUF 7
|
#define SO_SNDBUF 7
|
||||||
#define SO_RCVBUF 8
|
#define SO_RCVBUF 8
|
||||||
|
#define SO_SNDBUFFORCE 32
|
||||||
|
#define SO_RCVBUFFORCE 33
|
||||||
#define SO_KEEPALIVE 9
|
#define SO_KEEPALIVE 9
|
||||||
#define SO_OOBINLINE 10
|
#define SO_OOBINLINE 10
|
||||||
#define SO_NO_CHECK 11
|
#define SO_NO_CHECK 11
|
||||||
|
|
|
@ -260,7 +260,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
|
||||||
|
|
||||||
if (val > sysctl_wmem_max)
|
if (val > sysctl_wmem_max)
|
||||||
val = sysctl_wmem_max;
|
val = sysctl_wmem_max;
|
||||||
|
set_sndbuf:
|
||||||
sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
|
sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
|
||||||
if ((val * 2) < SOCK_MIN_SNDBUF)
|
if ((val * 2) < SOCK_MIN_SNDBUF)
|
||||||
sk->sk_sndbuf = SOCK_MIN_SNDBUF;
|
sk->sk_sndbuf = SOCK_MIN_SNDBUF;
|
||||||
|
@ -274,6 +274,13 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
|
||||||
sk->sk_write_space(sk);
|
sk->sk_write_space(sk);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SO_SNDBUFFORCE:
|
||||||
|
if (!capable(CAP_NET_ADMIN)) {
|
||||||
|
ret = -EPERM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
goto set_sndbuf;
|
||||||
|
|
||||||
case SO_RCVBUF:
|
case SO_RCVBUF:
|
||||||
/* Don't error on this BSD doesn't and if you think
|
/* Don't error on this BSD doesn't and if you think
|
||||||
about it this is right. Otherwise apps have to
|
about it this is right. Otherwise apps have to
|
||||||
|
@ -282,7 +289,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
|
||||||
|
|
||||||
if (val > sysctl_rmem_max)
|
if (val > sysctl_rmem_max)
|
||||||
val = sysctl_rmem_max;
|
val = sysctl_rmem_max;
|
||||||
|
set_rcvbuf:
|
||||||
sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
|
sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
|
||||||
/* FIXME: is this lower bound the right one? */
|
/* FIXME: is this lower bound the right one? */
|
||||||
if ((val * 2) < SOCK_MIN_RCVBUF)
|
if ((val * 2) < SOCK_MIN_RCVBUF)
|
||||||
|
@ -291,6 +298,13 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
|
||||||
sk->sk_rcvbuf = val * 2;
|
sk->sk_rcvbuf = val * 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SO_RCVBUFFORCE:
|
||||||
|
if (!capable(CAP_NET_ADMIN)) {
|
||||||
|
ret = -EPERM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
goto set_rcvbuf;
|
||||||
|
|
||||||
case SO_KEEPALIVE:
|
case SO_KEEPALIVE:
|
||||||
#ifdef CONFIG_INET
|
#ifdef CONFIG_INET
|
||||||
if (sk->sk_protocol == IPPROTO_TCP)
|
if (sk->sk_protocol == IPPROTO_TCP)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче