session: add api to detach session from app 68/40668/5
authorFlorin Coras <fcoras@cisco.com>
Tue, 9 Apr 2024 20:27:53 +0000 (13:27 -0700)
committerDave Barach <vpp@barachs.net>
Wed, 10 Apr 2024 19:35:48 +0000 (19:35 +0000)
Type: improvement

Change-Id: Ib824d0ca9efc7d8967e043db69017655b2dcf6b5
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vnet/session/session.c
src/vnet/session/session.h
src/vnet/session/session_input.c

index 633aebd..e1a93a6 100644 (file)
@@ -1596,6 +1596,20 @@ session_reset (session_t * s)
   session_program_transport_ctrl_evt (s, SESSION_CTRL_EVT_RESET);
 }
 
+void
+session_detach_app (session_t *s)
+{
+  if (s->session_state < SESSION_STATE_TRANSPORT_CLOSING)
+    session_close (s);
+  else if (s->session_state < SESSION_STATE_TRANSPORT_CLOSED)
+    session_set_state (s, SESSION_STATE_APP_CLOSED);
+  else if (s->session_state < SESSION_STATE_CLOSED)
+    session_set_state (s, SESSION_STATE_CLOSED);
+
+  s->flags |= SESSION_F_APP_CLOSED;
+  s->app_wrk_index = APP_INVALID_INDEX;
+}
+
 /**
  * Notify transport the session can be half-disconnected.
  *
index aa4776b..a5604bf 100644 (file)
@@ -448,6 +448,7 @@ int session_stop_listen (session_t * s);
 void session_half_close (session_t *s);
 void session_close (session_t * s);
 void session_reset (session_t * s);
+void session_detach_app (session_t *s);
 void session_transport_half_close (session_t *s);
 void session_transport_close (session_t * s);
 void session_transport_reset (session_t * s);
index e7a81c3..73b7771 100644 (file)
@@ -154,8 +154,7 @@ app_worker_flush_events_inline (app_worker_t *app_wrk, u32 thread_index,
          old_state = s->session_state;
          if (app->cb_fns.session_accept_callback (s))
            {
-             session_close (s);
-             s->app_wrk_index = APP_INVALID_INDEX;
+             session_detach_app (s);
              break;
            }
          if (is_builtin)
@@ -184,8 +183,7 @@ app_worker_flush_events_inline (app_worker_t *app_wrk, u32 thread_index,
            break;
          if (rv)
            {
-             session_close (s);
-             s->app_wrk_index = APP_INVALID_INDEX;
+             session_detach_app (s);
              break;
            }
          if (old_state >= SESSION_STATE_TRANSPORT_CLOSING)