diff options
author | Florin Coras <fcoras@cisco.com> | 2019-02-16 20:47:32 -0800 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2019-02-18 20:43:33 +0000 |
commit | 222e1f4160a5828bb2b5bf62716cd76664f6100b (patch) | |
tree | eeb8b47fa94dc23152f1652e9dbd14c384d910ff /src/vnet/tcp/tcp.c | |
parent | a333795d1c425877645754a384af47755a80712e (diff) |
tcp: harden for high scale scenarios
- Better handle buffer starvation scenarios
- Handle case when both peers enter recovery due to packet loss.
- Fix passive open establish cleanup
Change-Id: I2f28baa2ff0383bb8f5f6d2452b49aa38ce69bce
Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vnet/tcp/tcp.c')
-rw-r--r-- | src/vnet/tcp/tcp.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/vnet/tcp/tcp.c b/src/vnet/tcp/tcp.c index 81f209b5d7c..c51224447fc 100644 --- a/src/vnet/tcp/tcp.c +++ b/src/vnet/tcp/tcp.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Cisco and/or its affiliates. + * Copyright (c) 2016-2019 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -1244,11 +1244,13 @@ tcp_timer_establish_handler (u32 conn_index) if (PREDICT_FALSE (tc == 0)) return; ASSERT (tc->state == TCP_STATE_SYN_RCVD); + tc->timers[TCP_TIMER_ESTABLISH] = TCP_TIMER_HANDLE_INVALID; + tcp_connection_set_state (tc, TCP_STATE_CLOSED); /* Start cleanup. App wasn't notified yet so use delete notify as * opposed to delete to cleanup session layer state. */ + tcp_connection_timers_reset (tc); session_transport_delete_notify (&tc->connection); - tc->timers[TCP_TIMER_ESTABLISH] = TCP_TIMER_HANDLE_INVALID; - tcp_connection_cleanup (tc); + tcp_timer_update (tc, TCP_TIMER_WAITCLOSE, TCP_CLEANUP_TIME); } static void |