tcp: enable mid stream window clamp
authorNeil Spring <ntspring@fb.com>
Wed, 25 Aug 2021 21:01:17 +0000 (14:01 -0700)
committerJakub Kicinski <kuba@kernel.org>
Fri, 27 Aug 2021 01:00:40 +0000 (18:00 -0700)
The TCP_WINDOW_CLAMP socket option is defined in tcp(7) to "Bound the size
of the advertised window to this value."  Window clamping is distributed
across two variables, window_clamp ("Maximal window to advertise" in
tcp.h) and rcv_ssthresh ("Current window clamp").

This patch updates the function where the window clamp is set to also
reduce the current window clamp, rcv_sshthresh, if needed.  With this,
setting the TCP_WINDOW_CLAMP option has the documented effect of limiting
the window.

Signed-off-by: Neil Spring <ntspring@fb.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20210825210117.1668371-1-ntspring@fb.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/tcp.c

index f931def..e8b48df 100644 (file)
@@ -3338,6 +3338,7 @@ int tcp_set_window_clamp(struct sock *sk, int val)
        } else {
                tp->window_clamp = val < SOCK_MIN_RCVBUF / 2 ?
                        SOCK_MIN_RCVBUF / 2 : val;
+               tp->rcv_ssthresh = min(tp->rcv_wnd, tp->window_clamp);
        }
        return 0;
 }