sock api: allow to start client with no rx_thread 40/17240/6
authorTomasz Kulasek <tomaszx.kulasek@intel.com>
Thu, 31 Jan 2019 17:26:32 +0000 (18:26 +0100)
committerFlorin Coras <florin.coras@gmail.com>
Tue, 5 Feb 2019 21:56:19 +0000 (21:56 +0000)
Change-Id: Ia30ff1e62304e65f27497ce05f8e40631c06d69e
Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com>
src/tests/vnet/session/tcp_echo.c
src/vat/api_format.c
src/vcl/vcl_bapi.c
src/vlibmemory/memory_client.c
src/vlibmemory/memory_client.h
src/vlibmemory/socket_client.c
src/vlibmemory/socket_client.h

index 58e29bd..bd05345 100644 (file)
@@ -482,7 +482,7 @@ connect_to_vpp (char *name)
          return -1;
        }
 
-      if (vl_socket_client_init_shm (0))
+      if (vl_socket_client_init_shm (0, 1 /* want_pthread */ ))
        {
          clib_warning ("init shm api failed");
          return -1;
index d35c19e..5ddbb57 100644 (file)
@@ -22025,7 +22025,7 @@ api_sock_init_shm (vat_main_t * vam)
   config[6].count = 128;
   config[6].size = sizeof (uword);
 
-  rv = vl_socket_client_init_shm (config);
+  rv = vl_socket_client_init_shm (config, 1 /* want_pthread */ );
   if (!rv)
     vam->client_index_invalid = 1;
   return rv;
index debfb8f..b7f47d8 100644 (file)
@@ -679,7 +679,7 @@ vppcom_connect_to_vpp (char *app_name)
          return VPPCOM_ECONNREFUSED;
        }
 
-      if (vl_socket_client_init_shm (0))
+      if (vl_socket_client_init_shm (0, 1 /* want_pthread */ ))
        {
          VERR ("app (%s) init shm failed!", app_name);
          return VPPCOM_ECONNREFUSED;
index 3add39a..fb11734 100644 (file)
@@ -468,6 +468,16 @@ vl_client_connect_to_vlib_no_map (const char *svm_name,
                                   0 /* dont map */ );
 }
 
+int
+vl_client_connect_to_vlib_no_rx_pthread_no_map (const char *svm_name,
+                                               const char *client_name,
+                                               int rx_queue_size)
+{
+  return connect_to_vlib_internal (svm_name, client_name, rx_queue_size,
+                                  0 /* want pthread */ ,
+                                  0 /* dont map */ );
+}
+
 static void
 disconnect_from_vlib_internal (u8 do_unmap)
 {
index 6aaf6d7..8400d96 100644 (file)
@@ -35,6 +35,9 @@ int vl_client_connect_to_vlib_no_rx_pthread (const char *svm_name,
 int vl_client_connect_to_vlib_no_map (const char *svm_name,
                                      const char *client_name,
                                      int rx_queue_size);
+int vl_client_connect_to_vlib_no_rx_pthread_no_map (const char *svm_name,
+                                                   const char *client_name,
+                                                   int rx_queue_size);
 void vl_client_install_client_message_handlers (void);
 u8 vl_mem_client_is_connected (void);
 
index 38bcc2a..ca1e535 100644 (file)
@@ -304,8 +304,18 @@ static void vl_api_sock_init_shm_reply_t_handler
 
   new_name = format (0, "%v[shm]%c", scm->name, 0);
   vl_client_install_client_message_handlers ();
-  vl_client_connect_to_vlib_no_map ("pvt", (char *) new_name,
-                                   32 /* input_queue_length */ );
+  if (scm->want_shm_pthread)
+    {
+      vl_client_connect_to_vlib_no_map ("pvt", (char *) new_name,
+                                       32 /* input_queue_length */ );
+    }
+  else
+    {
+      vl_client_connect_to_vlib_no_rx_pthread_no_map ("pvt",
+                                                     (char *) new_name, 32
+                                                     /* input_queue_length */
+       );
+    }
   vl_socket_client_enable_disable (0);
   vec_free (new_name);
 }
@@ -402,13 +412,16 @@ vl_socket_client_connect (char *socket_path, char *client_name,
 }
 
 int
-vl_socket_client_init_shm (vl_api_shm_elem_config_t * config)
+vl_socket_client_init_shm (vl_api_shm_elem_config_t * config,
+                          int want_pthread)
 {
   socket_client_main_t *scm = &socket_client_main;
   vl_api_sock_init_shm_t *mp;
   int rv, i;
   u64 *cfg;
 
+  scm->want_shm_pthread = want_pthread;
+
   mp = vl_socket_client_msg_alloc (sizeof (*mp) +
                                   vec_len (config) * sizeof (u64));
   clib_memset (mp, 0, sizeof (*mp));
index 46e2c86..68cd0f2 100644 (file)
@@ -40,6 +40,8 @@ typedef struct
   u8 *name;
   clib_time_t clib_time;
   ssvm_private_t memfd_segment;
+
+  int want_shm_pthread;
 } socket_client_main_t;
 
 extern socket_client_main_t socket_client_main;
@@ -53,7 +55,8 @@ int vl_socket_client_read (int wait);
 int vl_socket_client_write (void);
 void vl_socket_client_enable_disable (int enable);
 void *vl_socket_client_msg_alloc (int nbytes);
-int vl_socket_client_init_shm (vl_api_shm_elem_config_t * config);
+int vl_socket_client_init_shm (vl_api_shm_elem_config_t * config,
+                              int want_pthread);
 clib_error_t *vl_socket_client_recv_fd_msg (int fds[], int n_fds, u32 wait);
 
 #endif /* SRC_VLIBMEMORY_SOCKET_CLIENT_H_ */