session: basic fifo-tuning-logic
[vpp.git] / src / vnet / session / application.c
index 7c3293a..7777c72 100644 (file)
@@ -115,7 +115,7 @@ app_listener_lookup (application_t * app, session_endpoint_cfg_t * sep_ext)
     }
 
   fib_proto = session_endpoint_fib_proto (sep);
-  table_index = application_session_table (app, fib_proto);
+  table_index = session_lookup_get_index_for_fib (fib_proto, sep->fib_index);
   handle = session_lookup_endpoint_listener (table_index, sep, 1);
   if (handle != SESSION_INVALID_HANDLE)
     {
@@ -133,10 +133,10 @@ app_listener_alloc_and_init (application_t * app,
 {
   app_listener_t *app_listener;
   transport_connection_t *tc;
+  u32 al_index, table_index;
   session_handle_t lh;
   session_type_t st;
   session_t *ls = 0;
-  u32 al_index;
   int rv;
 
   app_listener = app_listener_alloc (app);
@@ -151,7 +151,6 @@ app_listener_alloc_and_init (application_t * app,
       && session_endpoint_is_local ((session_endpoint_t *) sep))
     {
       session_type_t local_st;
-      u32 table_index;
 
       local_st = session_type_from_proto_and_ip (TRANSPORT_PROTO_NONE,
                                                 sep->is_ip4);
@@ -213,7 +212,16 @@ app_listener_alloc_and_init (application_t * app,
        * connections */
       tc = session_get_transport (ls);
       if (!(tc->flags & TRANSPORT_CONNECTION_F_NO_LOOKUP))
-       session_lookup_add_connection (tc, lh);
+       {
+         fib_protocol_t fib_proto;
+         fib_proto = session_endpoint_fib_proto ((session_endpoint_t *) sep);
+         table_index = session_lookup_get_index_for_fib (fib_proto,
+                                                         sep->fib_index);
+         ASSERT (table_index != SESSION_TABLE_INVALID_INDEX);
+         session_lookup_add_session_endpoint (table_index,
+                                              (session_endpoint_t *) sep,
+                                              lh);
+       }
     }
 
   if (!ls)
@@ -542,6 +550,12 @@ application_alloc_and_init (app_init_args_t * a)
     props->use_mq_eventfd = 1;
   if (options[APP_OPTIONS_TLS_ENGINE])
     app->tls_engine = options[APP_OPTIONS_TLS_ENGINE];
+  if (options[APP_OPTIONS_MAX_FIFO_SIZE])
+    props->max_fifo_size = options[APP_OPTIONS_MAX_FIFO_SIZE];
+  if (options[APP_OPTIONS_HIGH_WATERMARK])
+    props->high_watermark = options[APP_OPTIONS_HIGH_WATERMARK];
+  if (options[APP_OPTIONS_LOW_WATERMARK])
+    props->low_watermark = options[APP_OPTIONS_LOW_WATERMARK];
   props->segment_type = seg_type;
 
   /* Add app to lookup by api_client_index table */
@@ -690,8 +704,7 @@ application_alloc_worker_and_init (application_t * app, app_worker_t ** wrk)
   sm = segment_manager_alloc ();
   sm->app_wrk_index = app_wrk->wrk_index;
 
-  if ((rv = segment_manager_init (sm, app->sm_properties.segment_size,
-                                 app->sm_properties.prealloc_fifos)))
+  if ((rv = segment_manager_init (sm)))
     {
       app_worker_free (app_wrk);
       return rv;
@@ -1379,9 +1392,8 @@ format_cert_key_pair (u8 * s, va_list * args)
   if (ckpair->cert_key_index == 0)
     s = format (s, "DEFAULT (cert:%d, key:%d)", cert_len, key_len);
   else
-    s =
-      format (s, "%d (cert:%d, key:%d)", ckpair->cert_key_index, cert_len,
-             key_len);
+    s = format (s, "%d (cert:%d, key:%d)", ckpair->cert_key_index,
+               cert_len, key_len);
   return s;
 }
 
@@ -1428,12 +1440,9 @@ u8 *
 format_crypto_context (u8 * s, va_list * args)
 {
   crypto_context_t *crctx = va_arg (*args, crypto_context_t *);
-  s =
-    format (s, "[0x%x][sub%d,ckpair%x]", crctx->ctx_index,
-           crctx->n_subscribers, crctx->ckpair_index);
+  s = format (s, "[0x%x][sub%d,ckpair%x]", crctx->ctx_index,
+             crctx->n_subscribers, crctx->ckpair_index);
   s = format (s, "[%U]", format_crypto_engine, crctx->crypto_engine);
-  if (crctx->stale)
-    s = format (s, " -- DELETED");
   return s;
 }
 
@@ -1536,11 +1545,48 @@ show_certificate_command_fn (vlib_main_t * vm, unformat_input_t * input,
   return 0;
 }
 
+static inline void
+appliction_format_app_mq (vlib_main_t * vm, application_t * app)
+{
+  app_worker_map_t *map;
+  app_worker_t *wrk;
+  /* *INDENT-OFF* */
+  pool_foreach (map, app->worker_maps, ({
+    wrk = app_worker_get (map->wrk_index);
+    vlib_cli_output (vm, "[A%d][%d]%U", app->app_index,
+                    map->wrk_index, format_svm_msg_q,
+                    wrk->event_queue);
+  }));
+  /* *INDENT-ON* */
+}
+
+static clib_error_t *
+appliction_format_all_app_mq (vlib_main_t * vm)
+{
+  application_t *app;
+  int i, n_threads;
+
+  n_threads = vec_len (vlib_mains);
+
+  for (i = 0; i < n_threads; i++)
+    {
+      vlib_cli_output (vm, "[Ctrl%d]%U", i, format_svm_msg_q,
+                      session_main_get_vpp_event_queue (i));
+    }
+
+  /* *INDENT-OFF* */
+  pool_foreach (app, app_main.app_pool, ({
+      appliction_format_app_mq (vm, app);
+  }));
+  /* *INDENT-ON* */
+  return 0;
+}
+
 static clib_error_t *
 show_app_command_fn (vlib_main_t * vm, unformat_input_t * input,
                     vlib_cli_command_t * cmd)
 {
-  int do_server = 0, do_client = 0;
+  int do_server = 0, do_client = 0, do_mq = 0;
   application_t *app;
   u32 app_index = ~0;
   int verbose = 0;
@@ -1553,6 +1599,8 @@ show_app_command_fn (vlib_main_t * vm, unformat_input_t * input,
        do_server = 1;
       else if (unformat (input, "client"))
        do_client = 1;
+      else if (unformat (input, "mq"))
+       do_mq = 1;
       else if (unformat (input, "%u", &app_index))
        ;
       else if (unformat (input, "verbose"))
@@ -1562,6 +1610,22 @@ show_app_command_fn (vlib_main_t * vm, unformat_input_t * input,
                                  format_unformat_error, input);
     }
 
+  if (do_mq && app_index != ~0)
+    {
+      app = application_get_if_valid (app_index);
+      if (!app)
+       return clib_error_return (0, "No app with index %u", app_index);
+
+      appliction_format_app_mq (vm, app);
+      return 0;
+    }
+
+  if (do_mq)
+    {
+      appliction_format_all_app_mq (vm);
+      return 0;
+    }
+
   if (do_server)
     {
       application_format_all_listeners (vm, verbose);
@@ -1690,7 +1754,7 @@ VLIB_INIT_FUNCTION (application_init);
 VLIB_CLI_COMMAND (show_app_command, static) =
 {
   .path = "show app",
-  .short_help = "show app [server|client] [verbose]",
+  .short_help = "show app [app_id] [server|client] [mq] [verbose]",
   .function = show_app_command_fn,
 };