Repair vlib API socket server
[vpp.git] / src / vnet / tcp / builtin_client.c
index 938e07b..b48422c 100644 (file)
@@ -21,7 +21,6 @@
 
 #include <vlibapi/api.h>
 #include <vlibmemory/api.h>
-#include <vlibsocket/api.h>
 #include <vpp/app/version.h>
 
 #define TCP_BUILTIN_CLIENT_DBG (0)
@@ -509,6 +508,11 @@ clients_connect (vlib_main_t * vm, u8 * uri, u32 n_clients)
       /* Crude pacing for call setups  */
       if ((i % 4) == 0)
        vlib_process_suspend (vm, 10e-6);
+      ASSERT (i + 1 >= tm->ready_connections);
+      while (i + 1 - tm->ready_connections > 1000)
+       {
+         vlib_process_suspend (vm, 100e-6);
+       }
     }
 }
 
@@ -563,12 +567,14 @@ test_tcp_clients_command_fn (vlib_main_t * vm,
       else if (unformat (input, "private-segment-count %d",
                         &tm->private_segment_count))
        ;
-      else if (unformat (input, "private-segment-size %dm", &tmp))
-       tm->private_segment_size = tmp << 20;
-      else if (unformat (input, "private-segment-size %dg", &tmp))
-       tm->private_segment_size = tmp << 30;
-      else if (unformat (input, "private-segment-size %d", &tmp))
-       tm->private_segment_size = tmp;
+      else if (unformat (input, "private-segment-size %U",
+                        unformat_memory_size, &tmp))
+       {
+         if (tmp >= 0x100000000ULL)
+           return clib_error_return
+             (0, "private segment size %lld (%llu) too large", tmp, tmp);
+         tm->private_segment_size = tmp;
+       }
       else if (unformat (input, "preallocate-fifos"))
        tm->prealloc_fifos = 1;
       else if (unformat (input, "preallocate-sessions"))
@@ -713,6 +719,20 @@ cleanup:
 
   pool_free (tm->sessions);
 
+  /* Detach the application, so we can use different fifo sizes next time */
+  if (tm->test_client_attached)
+    {
+      vnet_app_detach_args_t _da, *da = &_da;
+      int rv;
+
+      da->app_index = tm->app_index;
+
+      rv = vnet_application_detach (da);
+      if (rv)
+       vlib_cli_output (vm, "WARNING: app detach failed...");
+      tm->test_client_attached = 0;
+      tm->app_index = ~0;
+    }
   return 0;
 }
 
@@ -720,8 +740,11 @@ cleanup:
 VLIB_CLI_COMMAND (test_clients_command, static) =
 {
   .path = "test tcp clients",
-  .short_help = "test tcp clients [nclients %d]"
-  "[iterations %d] [bytes %d] [uri tcp://6.0.1.1/1234]",
+  .short_help = "test tcp clients [nclients %d] [[m|g]bytes <bytes>] "
+      "[test-timeout <time>][syn-timeout <time>][no-return][fifo-size <size>]"
+      "[private-segment-count <count>][private-segment-size <bytes>[m|g]]"
+      "[preallocate-fifos][preallocate-sessions][client-batch <batch-size>]"
+      "[uri <tcp://ip/port>]",
   .function = test_tcp_clients_command_fn,
   .is_mp_safe = 1,
 };