diff options
Diffstat (limited to 'src/vlibmemory')
-rw-r--r-- | src/vlibmemory/memory_client.c | 10 | ||||
-rw-r--r-- | src/vlibmemory/memory_client.h | 3 | ||||
-rw-r--r-- | src/vlibmemory/socket_client.c | 19 | ||||
-rw-r--r-- | src/vlibmemory/socket_client.h | 5 |
4 files changed, 33 insertions, 4 deletions
diff --git a/src/vlibmemory/memory_client.c b/src/vlibmemory/memory_client.c index 3add39a4328..fb117340662 100644 --- a/src/vlibmemory/memory_client.c +++ b/src/vlibmemory/memory_client.c @@ -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) { diff --git a/src/vlibmemory/memory_client.h b/src/vlibmemory/memory_client.h index 6aaf6d7e569..8400d963dcf 100644 --- a/src/vlibmemory/memory_client.h +++ b/src/vlibmemory/memory_client.h @@ -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); diff --git a/src/vlibmemory/socket_client.c b/src/vlibmemory/socket_client.c index 38bcc2a5156..ca1e53538ae 100644 --- a/src/vlibmemory/socket_client.c +++ b/src/vlibmemory/socket_client.c @@ -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)); diff --git a/src/vlibmemory/socket_client.h b/src/vlibmemory/socket_client.h index 46e2c865250..68cd0f21994 100644 --- a/src/vlibmemory/socket_client.h +++ b/src/vlibmemory/socket_client.h @@ -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_ */ |