diff options
author | Florin Coras <fcoras@cisco.com> | 2020-05-08 16:23:38 +0000 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2020-05-12 14:06:42 +0000 |
commit | f2fe353cc829f2074d63ebba9bb3b25e5ceb20af (patch) | |
tree | f4e4a5682d1b207fa6de376e4cb70e9ca05eb4b4 | |
parent | 9a244b0a29b3ed517fc3442c9358d79907f67a24 (diff) |
tcp: avoid rcv wnd less than mss
Type: fix
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I84ec1c91a3a7b2195aad58923fa6f17f551444cb
-rw-r--r-- | src/vnet/tcp/tcp_output.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/vnet/tcp/tcp_output.c b/src/vnet/tcp/tcp_output.c index a21c012b5b7..6bcca31ca77 100644 --- a/src/vnet/tcp/tcp_output.c +++ b/src/vnet/tcp/tcp_output.c @@ -143,13 +143,11 @@ tcp_update_rcv_wnd (tcp_connection_t * tc) wnd = available_space; } - /* Make sure we have a multiple of rcv_wscale */ + /* Make sure we have a multiple of 1 << rcv_wscale. We round up to + * avoid advertising a window less than mss which could happen if + * 1 << rcv_wscale < mss */ if (wnd && tc->rcv_wscale) - { - wnd &= ~((1 << tc->rcv_wscale) - 1); - if (wnd == 0) - wnd = 1 << tc->rcv_wscale; - } + wnd = round_pow2 (wnd, 1 << tc->rcv_wscale); tc->rcv_wnd = clib_min (wnd, TCP_WND_MAX << tc->rcv_wscale); } |