diff options
author | Florin Coras <fcoras@cisco.com> | 2019-09-12 18:49:44 -0700 |
---|---|---|
committer | Florin Coras <fcoras@cisco.com> | 2019-09-12 18:54:32 -0700 |
commit | 321cfa5fcb8f347329a5296e2024ef0e6cef319f (patch) | |
tree | 751f7f6bb19dfc2eae8fd4a40c0e718838662f98 /src/vnet | |
parent | 3b2db9002c14f9e0742622f2d503c5801d443827 (diff) |
tcp: cleanup scoreboard after recovery
Type: fix
When recovering from congestion, remove last hole in scoreboard if it
covers all bytes sent above snd_congestion.
Change-Id: I752accd4590cd9bf553c35a1bb40a38c308c04f5
Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vnet')
-rwxr-xr-x | src/vnet/tcp/tcp_input.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c index 7ab7020ee9b..f4e1026e4c5 100755 --- a/src/vnet/tcp/tcp_input.c +++ b/src/vnet/tcp/tcp_input.c @@ -1298,7 +1298,14 @@ tcp_cc_is_spurious_retransmit (tcp_connection_t * tc) static int tcp_cc_recover (tcp_connection_t * tc) { + sack_scoreboard_hole_t *hole; + ASSERT (tcp_in_cong_recovery (tc)); + + hole = scoreboard_first_hole (&tc->sack_sb); + if (hole && hole->start == tc->snd_una && hole->end == tc->snd_nxt) + scoreboard_clear (&tc->sack_sb); + if (tcp_cc_is_spurious_retransmit (tc)) { tcp_cc_congestion_undo (tc); |