session: Add session_sapi_enable_disable 00/33300/5
authorNathan Skrzypczak <nathan.skrzypczak@gmail.com>
Wed, 28 Jul 2021 12:09:50 +0000 (14:09 +0200)
committerFlorin Coras <florin.coras@gmail.com>
Tue, 5 Oct 2021 19:13:13 +0000 (19:13 +0000)
Type: feature

This adds an API message to do the switch
at runtime.

Change-Id: Ice6b69c57f0bfbf5668182e25593362ff4133615
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
src/vnet/session/application_namespace.c
src/vnet/session/application_namespace.h
src/vnet/session/session.api
src/vnet/session/session.c
src/vnet/session/session_api.c

index bece746..cd2636c 100644 (file)
@@ -222,10 +222,15 @@ app_namespace_get_local_table (app_namespace_t * app_ns)
   return session_table_get (app_ns->local_table_index);
 }
 
-void
-appns_sapi_enable (void)
+int
+appns_sapi_enable_disable (int is_enable)
 {
-  app_sapi_enabled = 1;
+  /* This cannot be called with active sockets */
+  if (pool_elts (app_namespace_pool))
+    return -1;
+
+  app_sapi_enabled = is_enable;
+  return 0;
 }
 
 u8
index 14e6a65..1750d41 100644 (file)
@@ -162,7 +162,7 @@ appns_sapi_handle_sock_index (u32 sapi_sock_handle)
 int appns_sapi_add_ns_socket (app_namespace_t * app_ns);
 void appns_sapi_del_ns_socket (app_namespace_t *app_ns);
 u8 appns_sapi_enabled (void);
-void appns_sapi_enable (void);
+int appns_sapi_enable_disable (int is_enable);
 
 #endif /* SRC_VNET_SESSION_APPLICATION_NAMESPACE_H_ */
 
index 0eb773c..d2a942f 100644 (file)
@@ -203,6 +203,18 @@ autoreply define session_enable_disable {
   bool is_enable [default=true];
 };
 
+/** \brief enable/disable session layer socket api
+    @param client_index - opaque cookie to identify the sender
+                          client to vpp direction only
+    @param context - sender context, to match reply w/ request
+    @param is_enable - disable session layer if 0, enable otherwise
+*/
+autoreply define session_sapi_enable_disable {
+  u32 client_index;
+  u32 context;
+  bool is_enable [default=true];
+};
+
 /** \brief add/del application namespace
     @param client_index - opaque cookie to identify the sender
                           client to vpp direction only
index 0571218..f33dbea 100644 (file)
@@ -2069,7 +2069,7 @@ session_config_fn (vlib_main_t * vm, unformat_input_t * input)
       else if (unformat (input, "segment-baseva 0x%lx", &smm->session_baseva))
        ;
       else if (unformat (input, "use-app-socket-api"))
-       appns_sapi_enable ();
+       (void) appns_sapi_enable_disable (1 /* is_enable */);
       else if (unformat (input, "poll-main"))
        smm->poll_main = 1;
       else if (unformat (input, "use-private-rx-mqs"))
index c031545..2121d20 100644 (file)
@@ -601,6 +601,17 @@ vl_api_session_enable_disable_t_handler (vl_api_session_enable_disable_t * mp)
   REPLY_MACRO (VL_API_SESSION_ENABLE_DISABLE_REPLY);
 }
 
+static void
+vl_api_session_sapi_enable_disable_t_handler (
+  vl_api_session_sapi_enable_disable_t *mp)
+{
+  vl_api_session_sapi_enable_disable_reply_t *rmp;
+  int rv = 0;
+
+  rv = appns_sapi_enable_disable (mp->is_enable);
+  REPLY_MACRO (VL_API_SESSION_SAPI_ENABLE_DISABLE_REPLY);
+}
+
 static void
 vl_api_app_attach_t_handler (vl_api_app_attach_t * mp)
 {