From 222e1f4160a5828bb2b5bf62716cd76664f6100b Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Sat, 16 Feb 2019 20:47:32 -0800 Subject: 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 --- src/vnet/session/application.c | 1 + src/vnet/session/session.c | 7 +++++++ src/vnet/session/session_types.h | 1 + 3 files changed, 9 insertions(+) (limited to 'src/vnet/session') diff --git a/src/vnet/session/application.c b/src/vnet/session/application.c index e6292157dfa..ee69cf88c88 100644 --- a/src/vnet/session/application.c +++ b/src/vnet/session/application.c @@ -73,6 +73,7 @@ application_local_listen_session_alloc (application_t * app) ll->session_index = ll - app->local_listen_sessions; ll->session_type = session_type_from_proto_and_ip (TRANSPORT_PROTO_NONE, 0); ll->app_index = app->app_index; + ll->session_state = SESSION_STATE_LISTENING; return ll; } diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c index a94a0c40882..58e085ee29b 100644 --- a/src/vnet/session/session.c +++ b/src/vnet/session/session.c @@ -862,6 +862,12 @@ session_transport_delete_notify (transport_connection_t * tc) switch (s->session_state) { + case SESSION_STATE_CREATED: + /* Session was created but accept notification was not yet sent to the + * app. Cleanup everything. */ + session_lookup_del_session (s); + session_free_w_fifos (s); + break; case SESSION_STATE_ACCEPTING: case SESSION_STATE_TRANSPORT_CLOSING: /* If transport finishes or times out before we get a reply @@ -963,6 +969,7 @@ session_stream_accept (transport_connection_t * tc, u32 listener_index, s->app_wrk_index = app_wrk->wrk_index; s->listener_index = listener_index; + s->session_state = SESSION_STATE_CREATED; /* Shoulder-tap the server */ if (notify) diff --git a/src/vnet/session/session_types.h b/src/vnet/session/session_types.h index 846af25c777..e10dceafa16 100644 --- a/src/vnet/session/session_types.h +++ b/src/vnet/session/session_types.h @@ -113,6 +113,7 @@ typedef u64 session_handle_t; */ typedef enum { + SESSION_STATE_CREATED, SESSION_STATE_LISTENING, SESSION_STATE_CONNECTING, SESSION_STATE_ACCEPTING, -- cgit 1.2.3-korg