vl_api_app_attach_reply_t_handler (vl_api_app_attach_reply_t * mp)
{
vcl_worker_t *wrk = vcl_worker_get (0);
- svm_msg_q_t *ctrl_mq;
u64 segment_handle;
int *fds = 0, i, rv;
u32 n_fds = 0;
goto failed;
}
- wrk->app_event_queue = uword_to_pointer (mp->app_mq, svm_msg_q_t *);
- ctrl_mq = uword_to_pointer (mp->vpp_ctrl_mq, svm_msg_q_t *);
- vec_validate (wrk->vpp_event_queues, mp->vpp_ctrl_mq_thread);
- wrk->vpp_event_queues[mp->vpp_ctrl_mq_thread] = ctrl_mq;
- vcm->ctrl_mq = wrk->ctrl_mq = ctrl_mq;
segment_handle = clib_net_to_host_u64 (mp->segment_handle);
if (segment_handle == VCL_INVALID_SEGMENT_HANDLE)
{
fds[n_fds++]))
goto failed;
+ vcl_segment_attach_mq (vcl_vpp_worker_segment_handle (0),
+ mp->vpp_ctrl_mq, mp->vpp_ctrl_mq_thread,
+ &wrk->ctrl_mq);
+ vcm->ctrl_mq = wrk->ctrl_mq;
+
if (mp->fd_flags & SESSION_FD_F_MEMFD_SEGMENT)
{
segment_name = vl_api_from_api_to_new_c_string (&mp->segment_name);
goto failed;
}
+ vcl_segment_attach_mq (segment_handle, mp->app_mq, 0,
+ &wrk->app_event_queue);
if (mp->fd_flags & SESSION_FD_F_MQ_EVENTFD)
{
return;
wrk->vpp_wrk_index = clib_net_to_host_u32 (mp->wrk_index);
- wrk->app_event_queue = uword_to_pointer (mp->app_event_queue_address,
- svm_msg_q_t *);
wrk->ctrl_mq = vcm->ctrl_mq;
segment_handle = clib_net_to_host_u64 (mp->segment_handle);
goto failed;
}
+ vcl_segment_attach_mq (segment_handle, mp->app_event_queue_address, 0,
+ &wrk->app_event_queue);
+
if (mp->fd_flags & SESSION_FD_F_MQ_EVENTFD)
{
svm_msg_q_set_consumer_eventfd (wrk->app_event_queue, fds[n_fds]);
memset (bmp, 0, sizeof (*bmp));
bmp->_vl_msg_id = ntohs (VL_API_SESSION_ENABLE_DISABLE);
- bmp->client_index = wrk->bapi_client_index;
+ bmp->client_index = wrk->api_client_handle;
bmp->context = htonl (0xfeedface);
bmp->is_enable = is_enable;
vl_msg_api_send_shmem (wrk->vl_input_queue, (u8 *) & bmp);
memset (bmp, 0, sizeof (*bmp));
bmp->_vl_msg_id = ntohs (VL_API_APP_ATTACH);
- bmp->client_index = wrk->bapi_client_index;
+ bmp->client_index = wrk->api_client_handle;
bmp->context = htonl (0xfeedface);
bmp->options[APP_OPTIONS_FLAGS] =
APP_OPTIONS_FLAGS_ACCEPT_REDIRECT | APP_OPTIONS_FLAGS_ADD_SEGMENT |
memset (bmp, 0, sizeof (*bmp));
bmp->_vl_msg_id = ntohs (VL_API_APPLICATION_DETACH);
- bmp->client_index = wrk->bapi_client_index;
+ bmp->client_index = wrk->api_client_handle;
bmp->context = htonl (0xfeedface);
vl_msg_api_send_shmem (wrk->vl_input_queue, (u8 *) & bmp);
}
memset (mp, 0, sizeof (*mp));
mp->_vl_msg_id = ntohs (VL_API_APP_WORKER_ADD_DEL);
- mp->client_index = wrk->bapi_client_index;
+ mp->client_index = wrk->api_client_handle;
mp->app_index = clib_host_to_net_u32 (vcm->app_index);
mp->context = wrk->wrk_index;
mp->is_add = is_add;
memset (mp, 0, sizeof (*mp));
mp->_vl_msg_id = ntohs (VL_API_APP_WORKER_ADD_DEL);
- mp->client_index = wrk->bapi_client_index;
+ mp->client_index = wrk->api_client_handle;
mp->app_index = clib_host_to_net_u32 (vcm->app_index);
mp->context = wrk->wrk_index;
mp->is_add = 0;
cert_mp = vl_msg_api_alloc (sizeof (*cert_mp) + cert_len);
clib_memset (cert_mp, 0, sizeof (*cert_mp));
cert_mp->_vl_msg_id = ntohs (VL_API_APPLICATION_TLS_CERT_ADD);
- cert_mp->client_index = wrk->bapi_client_index;
+ cert_mp->client_index = wrk->api_client_handle;
cert_mp->context = session->session_index;
cert_mp->cert_len = clib_host_to_net_u16 (cert_len);
clib_memcpy_fast (cert_mp->cert, cert, cert_len);
key_mp = vl_msg_api_alloc (sizeof (*key_mp) + key_len);
clib_memset (key_mp, 0, sizeof (*key_mp));
key_mp->_vl_msg_id = ntohs (VL_API_APPLICATION_TLS_KEY_ADD);
- key_mp->client_index = wrk->bapi_client_index;
+ key_mp->client_index = wrk->api_client_handle;
key_mp->context = session->session_index;
key_mp->key_len = clib_host_to_net_u16 (key_len);
clib_memcpy_fast (key_mp->key, key, key_len);
api_main_t *am;
u8 *wrk_name;
- wrk_name = format (0, "%s-wrk-%u%c", vcm->app_name, wrk->wrk_index, 0);
+ wrk_name = format (0, "%v-wrk-%u%c", vcm->app_name, wrk->wrk_index, 0);
/* Make sure api is cleaned up in case this is a connect from a
* forked worker */
vcl_bapi_cleanup ();
vlibapi_set_main (&wrk->bapi_api_ctx);
- vlibapi_set_memory_client_main (&wrk->bapi_shm_ctx);
vcl_bapi_hookup ();
- if (vcl_cfg->vpp_bapi_socket_name)
+ if (!vcl_cfg->vpp_bapi_socket_name)
{
- if (vl_socket_client_connect2 (&wrk->bapi_sock_ctx,
- (char *) vcl_cfg->vpp_bapi_socket_name,
- (char *) wrk_name,
- 0 /* default rx/tx buffer */ ))
- {
- VERR ("app (%s) socket connect failed!", wrk_name);
- rv = VPPCOM_ECONNREFUSED;
- goto error;
- }
-
- if (vl_socket_client_init_shm2 (&wrk->bapi_sock_ctx, 0,
- 1 /* want_pthread */ ))
- {
- VERR ("app (%s) init shm failed!", wrk_name);
- rv = VPPCOM_ECONNREFUSED;
- goto error;
- }
+ rv = VPPCOM_EINVAL;
+ goto error;
}
- else
- {
- if (!vcl_cfg->vpp_bapi_filename)
- vcl_cfg->vpp_bapi_filename = format (0, "/vpe-api%c", 0);
- vl_set_memory_root_path ((char *) vcl_cfg->vpp_bapi_chroot);
-
- VDBG (0, "app (%s) connecting to VPP api (%s)...",
- wrk_name, vcl_cfg->vpp_bapi_filename);
+ if (vl_socket_client_connect2 (&wrk->bapi_sock_ctx,
+ (char *) vcl_cfg->vpp_bapi_socket_name,
+ (char *) wrk_name,
+ 0 /* default rx/tx buffer */ ))
+ {
+ VERR ("app (%s) socket connect failed!", wrk_name);
+ rv = VPPCOM_ECONNREFUSED;
+ goto error;
+ }
- if (vl_client_connect_to_vlib ((char *) vcl_cfg->vpp_bapi_filename,
- (char *) wrk_name,
- vcm->cfg.vpp_api_q_length) < 0)
- {
- VERR ("app (%s) connect failed!", wrk_name);
- rv = VPPCOM_ECONNREFUSED;
- goto error;
- }
+ if (vl_socket_client_init_shm2 (&wrk->bapi_sock_ctx, 0,
+ 1 /* want_pthread */ ))
+ {
+ VERR ("app (%s) init shm failed!", wrk_name);
+ rv = VPPCOM_ECONNREFUSED;
+ goto error;
}
am = vlibapi_get_main ();
wrk->vl_input_queue = am->shmem_hdr->vl_input_queue;
- wrk->bapi_client_index = (u32) am->my_client_index;
+ wrk->api_client_handle = (u32) am->my_client_index;
VDBG (0, "app (%s) is connected to VPP!", wrk_name);
vcl_evt (VCL_EVT_INIT, vcm);
if (vcm->workers[i].current_pid == wrk->current_pid)
{
wrk->vl_input_queue = vcm->workers[i].vl_input_queue;
- wrk->bapi_client_index = vcm->workers[i].bapi_client_index;
+ wrk->api_client_handle = vcm->workers[i].api_client_handle;
return 0;
}
}