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]);
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 ();