X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fvcl%2Fvcl_bapi.c;h=724409897279d7e87176a6b5921730f5bfdf573d;hb=36217e3ca;hp=900fb96624247ff323a926157d3881f779b2ed56;hpb=935ce75cb060da34991e6b02bec5680445f85323;p=vpp.git diff --git a/src/vcl/vcl_bapi.c b/src/vcl/vcl_bapi.c index 900fb966242..72440989727 100644 --- a/src/vcl/vcl_bapi.c +++ b/src/vcl/vcl_bapi.c @@ -15,23 +15,14 @@ #include #include -#include -#define vl_typedefs /* define message structures */ -#include -#undef vl_typedefs +#include +#include +#include -/* declare message handlers for each api */ +#define REPLY_MSG_ID_BASE msg_id_base -#define vl_endianfun /* define message structures */ -#include -#undef vl_endianfun - -/* instantiate all the print functions we know about */ -#define vl_print(handle, ...) -#define vl_printfun -#include -#undef vl_printfun +static u16 msg_id_base; static u8 * format_api_error (u8 * s, va_list * args) @@ -52,20 +43,21 @@ static void vl_api_session_enable_disable_reply_t_handler (vl_api_session_enable_disable_reply_t * mp) { + vcl_worker_t *wrk = vcl_worker_get (0); + if (mp->retval) { clib_warning ("VCL<%d>: session_enable_disable failed: %U", getpid (), format_api_error, ntohl (mp->retval)); } else - vcm->bapi_app_state = STATE_APP_ENABLED; + wrk->bapi_app_state = STATE_APP_ENABLED; } static void 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; @@ -77,11 +69,8 @@ vl_api_app_attach_reply_t_handler (vl_api_app_attach_reply_t * mp) 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; + vcl_set_worker_index (0); + segment_handle = clib_net_to_host_u64 (mp->segment_handle); if (segment_handle == VCL_INVALID_SEGMENT_HANDLE) { @@ -113,14 +102,23 @@ vl_api_app_attach_reply_t_handler (vl_api_app_attach_reply_t * mp) 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) { - svm_msg_q_set_consumer_eventfd (wrk->app_event_queue, fds[n_fds]); + svm_msg_q_set_eventfd (wrk->app_event_queue, fds[n_fds]); vcl_mq_epoll_add_evfd (wrk, wrk->app_event_queue); n_fds++; } + vcl_segment_discover_mqs (vcl_vpp_worker_segment_handle (0), fds + n_fds, + mp->n_fds - n_fds); + 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; + vec_free (fds); } else @@ -135,11 +133,11 @@ vl_api_app_attach_reply_t_handler (vl_api_app_attach_reply_t * mp) } vcm->app_index = clib_net_to_host_u32 (mp->app_index); - vcm->bapi_app_state = STATE_APP_ATTACHED; + wrk->bapi_app_state = STATE_APP_ATTACHED; return; failed: - vcm->bapi_app_state = STATE_APP_FAILED; + wrk->bapi_app_state = STATE_APP_FAILED; for (i = clib_max (n_fds - 1, 0); i < vec_len (fds); i++) close (fds[i]); vec_free (fds); @@ -155,13 +153,6 @@ vl_api_app_worker_add_del_reply_t_handler (vl_api_app_worker_add_del_reply_t * u32 wrk_index; char *segment_name = 0; - if (mp->retval) - { - clib_warning ("VCL<%d>: add/del worker failed: %U", getpid (), - format_api_error, ntohl (mp->retval)); - goto failed; - } - if (!mp->is_add) return; @@ -170,9 +161,15 @@ vl_api_app_worker_add_del_reply_t_handler (vl_api_app_worker_add_del_reply_t * if (!wrk) return; + if (mp->retval) + { + clib_warning ("VCL<%d>: add/del worker failed: %U", getpid (), + format_api_error, ntohl (mp->retval)); + goto failed; + } + + vcl_set_worker_index (wrk_index); 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); @@ -206,9 +203,12 @@ vl_api_app_worker_add_del_reply_t_handler (vl_api_app_worker_add_del_reply_t * 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]); + svm_msg_q_set_eventfd (wrk->app_event_queue, fds[n_fds]); vcl_mq_epoll_add_evfd (wrk, wrk->app_event_queue); n_fds++; } @@ -225,52 +225,85 @@ vl_api_app_worker_add_del_reply_t_handler (vl_api_app_worker_add_del_reply_t * if (rv != 0) goto failed; } - vcm->bapi_app_state = STATE_APP_READY; + wrk->bapi_app_state = STATE_APP_READY; VDBG (0, "worker %u vpp-worker %u added", wrk_index, wrk->vpp_wrk_index); return; failed: - vcm->bapi_app_state = STATE_APP_FAILED; + wrk->bapi_app_state = STATE_APP_FAILED; for (i = clib_max (n_fds - 1, 0); i < vec_len (fds); i++) close (fds[i]); vec_free (fds); } static void - vl_api_application_tls_cert_add_reply_t_handler - (vl_api_application_tls_cert_add_reply_t * mp) +vl_api_app_add_cert_key_pair_reply_t_handler ( + vl_api_app_add_cert_key_pair_reply_t *mp) { + vcl_worker_t *wrk = vcl_worker_get_current (); + if (mp->retval) - VDBG (0, "add cert failed: %U", format_api_error, ntohl (mp->retval)); - vcm->bapi_app_state = STATE_APP_READY; + { + VDBG (0, "Adding cert and key failed: %U", format_api_error, + ntohl (mp->retval)); + return; + } + wrk->bapi_return = clib_net_to_host_u32 (mp->index); + wrk->bapi_app_state = STATE_APP_READY; } static void - vl_api_application_tls_key_add_reply_t_handler - (vl_api_application_tls_key_add_reply_t * mp) +vl_api_app_del_cert_key_pair_reply_t_handler ( + vl_api_app_del_cert_key_pair_reply_t *mp) { if (mp->retval) - VDBG (0, "add key failed: %U", format_api_error, ntohl (mp->retval)); - vcm->bapi_app_state = STATE_APP_READY; + { + VDBG (0, "Deleting cert and key failed: %U", format_api_error, + ntohl (mp->retval)); + return; + } } -#define foreach_sock_msg \ -_(SESSION_ENABLE_DISABLE_REPLY, session_enable_disable_reply) \ -_(APP_ATTACH_REPLY, app_attach_reply) \ -_(APPLICATION_TLS_CERT_ADD_REPLY, application_tls_cert_add_reply) \ -_(APPLICATION_TLS_KEY_ADD_REPLY, application_tls_key_add_reply) \ -_(APP_WORKER_ADD_DEL_REPLY, app_worker_add_del_reply) \ +#define foreach_sock_msg \ + _ (SESSION_ENABLE_DISABLE_REPLY, session_enable_disable_reply) \ + _ (APP_ATTACH_REPLY, app_attach_reply) \ + _ (APP_ADD_CERT_KEY_PAIR_REPLY, app_add_cert_key_pair_reply) \ + _ (APP_DEL_CERT_KEY_PAIR_REPLY, app_del_cert_key_pair_reply) \ + _ (APP_WORKER_ADD_DEL_REPLY, app_worker_add_del_reply) + +#define vl_print(handle, ...) fformat (handle, __VA_ARGS__) +#define vl_endianfun /* define message structures */ +#include +#undef vl_endianfun + +/* instantiate all the print functions we know about */ +#define vl_printfun +#include +#undef vl_printfun + +#define vl_api_version(n, v) static u32 api_version = v; +#include +#undef vl_api_version static void vcl_bapi_hookup (void) { -#define _(N, n) \ - vl_msg_api_set_handlers(VL_API_##N, #n, \ - vl_api_##n##_t_handler, \ - vl_noop_handler, \ - vl_api_##n##_t_endian, \ - vl_api_##n##_t_print, \ - sizeof(vl_api_##n##_t), 1); + u8 *msg_base_lookup_name = format (0, "session_%08x%c", api_version, 0); + + REPLY_MSG_ID_BASE = + vl_client_get_first_plugin_msg_id ((char *) msg_base_lookup_name); + + vec_free (msg_base_lookup_name); + + if (REPLY_MSG_ID_BASE == (u16) ~0) + return; + +#define _(N, n) \ + vl_msg_api_set_handlers ( \ + REPLY_MSG_ID_BASE + VL_API_##N, #n, vl_api_##n##_t_handler, \ + vl_noop_handler, vl_api_##n##_t_endian, vl_api_##n##_t_print, \ + sizeof (vl_api_##n##_t), 1, vl_api_##n##_t_print_json, \ + vl_api_##n##_t_tojson, vl_api_##n##_t_fromjson); foreach_sock_msg; #undef _ } @@ -286,8 +319,8 @@ vcl_bapi_send_session_enable_disable (u8 is_enable) bmp = vl_msg_api_alloc (sizeof (*bmp)); memset (bmp, 0, sizeof (*bmp)); - bmp->_vl_msg_id = ntohs (VL_API_SESSION_ENABLE_DISABLE); - bmp->client_index = wrk->bapi_client_index; + bmp->_vl_msg_id = ntohs (REPLY_MSG_ID_BASE + VL_API_SESSION_ENABLE_DISABLE); + 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); @@ -308,8 +341,8 @@ vcl_bapi_send_attach (void) bmp = vl_msg_api_alloc (sizeof (*bmp)); memset (bmp, 0, sizeof (*bmp)); - bmp->_vl_msg_id = ntohs (VL_API_APP_ATTACH); - bmp->client_index = wrk->bapi_client_index; + bmp->_vl_msg_id = ntohs (REPLY_MSG_ID_BASE + VL_API_APP_ATTACH); + 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 | @@ -344,8 +377,8 @@ vcl_bapi_send_detach (void) bmp = vl_msg_api_alloc (sizeof (*bmp)); memset (bmp, 0, sizeof (*bmp)); - bmp->_vl_msg_id = ntohs (VL_API_APPLICATION_DETACH); - bmp->client_index = wrk->bapi_client_index; + bmp->_vl_msg_id = ntohs (REPLY_MSG_ID_BASE + VL_API_APPLICATION_DETACH); + bmp->client_index = wrk->api_client_handle; bmp->context = htonl (0xfeedface); vl_msg_api_send_shmem (wrk->vl_input_queue, (u8 *) & bmp); } @@ -359,8 +392,8 @@ vcl_bapi_send_app_worker_add_del (u8 is_add) mp = vl_msg_api_alloc (sizeof (*mp)); memset (mp, 0, sizeof (*mp)); - mp->_vl_msg_id = ntohs (VL_API_APP_WORKER_ADD_DEL); - mp->client_index = wrk->bapi_client_index; + mp->_vl_msg_id = ntohs (REPLY_MSG_ID_BASE + VL_API_APP_WORKER_ADD_DEL); + 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; @@ -379,8 +412,8 @@ vcl_bapi_send_child_worker_del (vcl_worker_t * child_wrk) mp = vl_msg_api_alloc (sizeof (*mp)); memset (mp, 0, sizeof (*mp)); - mp->_vl_msg_id = ntohs (VL_API_APP_WORKER_ADD_DEL); - mp->client_index = wrk->bapi_client_index; + mp->_vl_msg_id = ntohs (REPLY_MSG_ID_BASE + VL_API_APP_WORKER_ADD_DEL); + 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; @@ -389,38 +422,41 @@ vcl_bapi_send_child_worker_del (vcl_worker_t * child_wrk) vl_msg_api_send_shmem (wrk->vl_input_queue, (u8 *) & mp); } -void -vcl_bapi_send_application_tls_cert_add (vcl_session_t * session, char *cert, - u32 cert_len) +static void +vcl_bapi_send_app_add_cert_key_pair (vppcom_cert_key_pair_t *ckpair) { vcl_worker_t *wrk = vcl_worker_get_current (); - vl_api_application_tls_cert_add_t *cert_mp; - - 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->context = session->session_index; - cert_mp->cert_len = clib_host_to_net_u16 (cert_len); - clib_memcpy_fast (cert_mp->cert, cert, cert_len); - vl_msg_api_send_shmem (wrk->vl_input_queue, (u8 *) & cert_mp); + u32 cert_len = ckpair->cert_len; + u32 key_len = ckpair->key_len; + vl_api_app_add_cert_key_pair_t *bmp; + + bmp = vl_msg_api_alloc (sizeof (*bmp) + cert_len + key_len); + clib_memset (bmp, 0, sizeof (*bmp) + cert_len + key_len); + + bmp->_vl_msg_id = ntohs (REPLY_MSG_ID_BASE + VL_API_APP_ADD_CERT_KEY_PAIR); + bmp->client_index = wrk->api_client_handle; + bmp->context = wrk->wrk_index; + bmp->cert_len = clib_host_to_net_u16 (cert_len); + bmp->certkey_len = clib_host_to_net_u16 (key_len + cert_len); + clib_memcpy_fast (bmp->certkey, ckpair->cert, cert_len); + clib_memcpy_fast (bmp->certkey + cert_len, ckpair->key, key_len); + + vl_msg_api_send_shmem (wrk->vl_input_queue, (u8 *) &bmp); } -void -vcl_bapi_send_application_tls_key_add (vcl_session_t * session, char *key, - u32 key_len) +static void +vcl_bapi_send_app_del_cert_key_pair (u32 ckpair_index) { vcl_worker_t *wrk = vcl_worker_get_current (); - vl_api_application_tls_key_add_t *key_mp; - - 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->context = session->session_index; - key_mp->key_len = clib_host_to_net_u16 (key_len); - clib_memcpy_fast (key_mp->key, key, key_len); - vl_msg_api_send_shmem (wrk->vl_input_queue, (u8 *) & key_mp); + vl_api_app_del_cert_key_pair_t *bmp; + bmp = vl_msg_api_alloc (sizeof (*bmp)); + clib_memset (bmp, 0, sizeof (*bmp)); + + bmp->_vl_msg_id = ntohs (REPLY_MSG_ID_BASE + VL_API_APP_DEL_CERT_KEY_PAIR); + bmp->client_index = wrk->api_client_handle; + bmp->context = wrk->wrk_index; + bmp->index = clib_host_to_net_u32 (ckpair_index); + vl_msg_api_send_shmem (wrk->vl_input_queue, (u8 *) &bmp); } u32 @@ -466,59 +502,43 @@ vcl_bapi_connect_to_vpp (void) 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 (); + vlibapi_set_memory_client_main (&wrk->bapi_mem_ctx); - 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; } + vcl_bapi_hookup (); 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); @@ -572,20 +592,20 @@ vcl_bapi_app_state_str (vcl_bapi_app_state_t state) } static int -vcl_bapi_wait_for_app_state_change (vcl_bapi_app_state_t app_state) +vcl_bapi_wait_for_wrk_state_change (vcl_bapi_app_state_t app_state) { vcl_worker_t *wrk = vcl_worker_get_current (); f64 timeout = clib_time_now (&wrk->clib_time) + vcm->cfg.app_timeout; while (clib_time_now (&wrk->clib_time) < timeout) { - if (vcm->bapi_app_state == app_state) + if (wrk->bapi_app_state == app_state) return VPPCOM_OK; - if (vcm->bapi_app_state == STATE_APP_FAILED) + if (wrk->bapi_app_state == STATE_APP_FAILED) return VPPCOM_ECONNABORTED; } - VDBG (0, "timeout waiting for state %s (%d)", - vcl_bapi_app_state_str (app_state), app_state); + VDBG (0, "timeout waiting for state %s, current state %d", + vcl_bapi_app_state_str (app_state), wrk->bapi_app_state); vcl_evt (VCL_EVT_SESSION_TIMEOUT, vcm, bapi_app_state); return VPPCOM_ETIMEDOUT; @@ -594,12 +614,13 @@ vcl_bapi_wait_for_app_state_change (vcl_bapi_app_state_t app_state) static int vcl_bapi_session_enable (void) { + vcl_worker_t *wrk = vcl_worker_get_current (); int rv; - if (vcm->bapi_app_state != STATE_APP_ENABLED) + if (wrk->bapi_app_state != STATE_APP_ENABLED) { vcl_bapi_send_session_enable_disable (1 /* is_enabled == TRUE */ ); - rv = vcl_bapi_wait_for_app_state_change (STATE_APP_ENABLED); + rv = vcl_bapi_wait_for_wrk_state_change (STATE_APP_ENABLED); if (PREDICT_FALSE (rv)) { VDBG (0, "application session enable timed out! returning %d (%s)", @@ -613,9 +634,10 @@ vcl_bapi_session_enable (void) static int vcl_bapi_init (void) { + vcl_worker_t *wrk = vcl_worker_get_current (); int rv; - vcm->bapi_app_state = STATE_APP_START; + wrk->bapi_app_state = STATE_APP_START; vcl_bapi_init_error_string_table (); rv = vcl_bapi_connect_to_vpp (); if (rv) @@ -644,7 +666,7 @@ vcl_bapi_attach (void) return rv; vcl_bapi_send_attach (); - rv = vcl_bapi_wait_for_app_state_change (STATE_APP_ATTACHED); + rv = vcl_bapi_wait_for_wrk_state_change (STATE_APP_ATTACHED); if (PREDICT_FALSE (rv)) { VDBG (0, "application attach timed out! returning %d (%s)", rv, @@ -658,12 +680,14 @@ vcl_bapi_attach (void) int vcl_bapi_app_worker_add (void) { + vcl_worker_t *wrk = vcl_worker_get_current (); + if (vcl_bapi_connect_to_vpp ()) return -1; - vcm->bapi_app_state = STATE_APP_ADDING_WORKER; + wrk->bapi_app_state = STATE_APP_ADDING_WORKER; vcl_bapi_send_app_worker_add_del (1 /* is_add */ ); - if (vcl_bapi_wait_for_app_state_change (STATE_APP_READY)) + if (vcl_bapi_wait_for_wrk_state_change (STATE_APP_READY)) return -1; return 0; } @@ -700,48 +724,27 @@ vcl_bapi_recv_fds (vcl_worker_t * wrk, int *fds, int n_fds) } int -vppcom_session_tls_add_cert (uint32_t session_handle, char *cert, - uint32_t cert_len) +vcl_bapi_add_cert_key_pair (vppcom_cert_key_pair_t *ckpair) { - vcl_worker_t *wrk = vcl_worker_get_current (); - vcl_session_t *session = 0; - session = vcl_session_get_w_handle (wrk, session_handle); - if (!session) - return VPPCOM_EBADFD; + if (ckpair->key_len == 0 || ckpair->key_len == ~0) + return VPPCOM_EINVAL; - if (cert_len == 0 || cert_len == ~0) - return VPPCOM_EBADFD; - - /* - * Send listen request to vpp and wait for reply - */ - vcl_bapi_send_application_tls_cert_add (session, cert, cert_len); - vcm->bapi_app_state = STATE_APP_ADDING_TLS_DATA; - vcl_bapi_wait_for_app_state_change (STATE_APP_READY); - return VPPCOM_OK; + vcl_bapi_send_app_add_cert_key_pair (ckpair); + wrk->bapi_app_state = STATE_APP_ADDING_TLS_DATA; + vcl_bapi_wait_for_wrk_state_change (STATE_APP_READY); + if (wrk->bapi_app_state == STATE_APP_READY) + return wrk->bapi_return; + return VPPCOM_EFAULT; } int -vppcom_session_tls_add_key (uint32_t session_handle, char *key, - uint32_t key_len) +vcl_bapi_del_cert_key_pair (u32 ckpair_index) { - - vcl_worker_t *wrk = vcl_worker_get_current (); - vcl_session_t *session = 0; - - session = vcl_session_get_w_handle (wrk, session_handle); - if (!session) - return VPPCOM_EBADFD; - - if (key_len == 0 || key_len == ~0) - return VPPCOM_EBADFD; - - vcl_bapi_send_application_tls_key_add (session, key, key_len); - vcm->bapi_app_state = STATE_APP_ADDING_TLS_DATA; - vcl_bapi_wait_for_app_state_change (STATE_APP_READY); - return VPPCOM_OK; + /* Don't wait for reply */ + vcl_bapi_send_app_del_cert_key_pair (ckpair_index); + return 0; } int @@ -758,7 +761,7 @@ vcl_bapi_worker_set (void) 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; } }