From cc7c88e529eb3a2ca0934f27eb048c8ca3788f95 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Tue, 15 Sep 2020 15:56:51 -0700 Subject: vcl: refactor bapi client index for sapi reuse Type: refactor Signed-off-by: Florin Coras Change-Id: Ibebb6f7d4e610570693e213acd2f6d9332c563c6 --- src/vcl/vcl_bapi.c | 18 +++++++++--------- src/vcl/vcl_private.h | 7 +++++-- src/vcl/vcl_sapi.c | 3 ++- src/vcl/vppcom.c | 20 ++++++++++---------- src/vnet/session/application_interface.h | 1 + src/vnet/session/session_api.c | 3 ++- 6 files changed, 29 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/vcl/vcl_bapi.c b/src/vcl/vcl_bapi.c index 900fb966242..81311774538 100644 --- a/src/vcl/vcl_bapi.c +++ b/src/vcl/vcl_bapi.c @@ -287,7 +287,7 @@ vcl_bapi_send_session_enable_disable (u8 is_enable) 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); @@ -309,7 +309,7 @@ vcl_bapi_send_attach (void) 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 | @@ -345,7 +345,7 @@ vcl_bapi_send_detach (void) 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); } @@ -360,7 +360,7 @@ vcl_bapi_send_app_worker_add_del (u8 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 = is_add; @@ -380,7 +380,7 @@ vcl_bapi_send_child_worker_del (vcl_worker_t * child_wrk) 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; @@ -399,7 +399,7 @@ vcl_bapi_send_application_tls_cert_add (vcl_session_t * session, char *cert, 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); @@ -416,7 +416,7 @@ vcl_bapi_send_application_tls_key_add (vcl_session_t * session, char *key, 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); @@ -518,7 +518,7 @@ vcl_bapi_connect_to_vpp (void) 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); @@ -758,7 +758,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; } } diff --git a/src/vcl/vcl_private.h b/src/vcl/vcl_private.h index bbcc3fabedb..51bdd65a102 100644 --- a/src/vcl/vcl_private.h +++ b/src/vcl/vcl_private.h @@ -252,8 +252,11 @@ typedef struct vcl_worker_ /** Worker index in vpp*/ u32 vpp_wrk_index; - /** VPP bapi client handle */ - u32 bapi_client_index; + /** + * Generic api client handle. When binary api is in used, it stores + * the "client_index" and when socket api is use, it stores the sapi + * client handle */ + u32 api_client_handle; /** VPP binary api input queue */ svm_queue_t *vl_input_queue; diff --git a/src/vcl/vcl_sapi.c b/src/vcl/vcl_sapi.c index f160786e262..9258f7927a0 100644 --- a/src/vcl/vcl_sapi.c +++ b/src/vcl/vcl_sapi.c @@ -56,7 +56,7 @@ vcl_api_attach_reply_handler (app_sapi_attach_reply_msg_t * mp, int *fds) goto failed; } - wrk->bapi_client_index = mp->api_client_handle; + wrk->api_client_handle = mp->api_client_handle; 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); @@ -201,6 +201,7 @@ vcl_api_add_del_worker_reply_handler (app_sapi_worker_add_del_reply_msg_t * goto failed; wrk = vcl_worker_get_current (); + wrk->api_client_handle = mp->api_client_handle; wrk->vpp_wrk_index = mp->wrk_index; wrk->app_event_queue = uword_to_pointer (mp->app_event_queue_address, svm_msg_q_t *); diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index dcf8ba2aa72..7286882adac 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -202,7 +202,7 @@ vcl_send_session_listen (vcl_worker_t * wrk, vcl_session_t * s) app_alloc_ctrl_evt_to_vpp (mq, app_evt, SESSION_CTRL_EVT_LISTEN); mp = (session_listen_msg_t *) app_evt->evt->data; memset (mp, 0, sizeof (*mp)); - mp->client_index = wrk->bapi_client_index; + mp->client_index = wrk->api_client_handle; mp->context = s->session_index; mp->wrk_index = wrk->vpp_wrk_index; mp->is_ip4 = s->transport.is_ip4; @@ -225,7 +225,7 @@ vcl_send_session_connect (vcl_worker_t * wrk, vcl_session_t * s) app_alloc_ctrl_evt_to_vpp (mq, app_evt, SESSION_CTRL_EVT_CONNECT); mp = (session_connect_msg_t *) app_evt->evt->data; memset (mp, 0, sizeof (*mp)); - mp->client_index = wrk->bapi_client_index; + mp->client_index = wrk->api_client_handle; mp->context = s->session_index; mp->wrk_index = wrk->vpp_wrk_index; mp->is_ip4 = s->transport.is_ip4; @@ -251,7 +251,7 @@ vcl_send_session_unlisten (vcl_worker_t * wrk, vcl_session_t * s) app_alloc_ctrl_evt_to_vpp (mq, app_evt, SESSION_CTRL_EVT_UNLISTEN); mp = (session_unlisten_msg_t *) app_evt->evt->data; memset (mp, 0, sizeof (*mp)); - mp->client_index = wrk->bapi_client_index; + mp->client_index = wrk->api_client_handle; mp->wrk_index = wrk->vpp_wrk_index; mp->handle = s->vpp_handle; mp->context = wrk->wrk_index; @@ -270,7 +270,7 @@ vcl_send_session_disconnect (vcl_worker_t * wrk, vcl_session_t * s) app_alloc_ctrl_evt_to_vpp (mq, app_evt, SESSION_CTRL_EVT_DISCONNECT); mp = (session_disconnect_msg_t *) app_evt->evt->data; memset (mp, 0, sizeof (*mp)); - mp->client_index = wrk->bapi_client_index; + mp->client_index = wrk->api_client_handle; mp->handle = s->vpp_handle; app_send_ctrl_evt_to_vpp (mq, app_evt); } @@ -286,7 +286,7 @@ vcl_send_app_detach (vcl_worker_t * wrk) app_alloc_ctrl_evt_to_vpp (mq, app_evt, SESSION_CTRL_EVT_APP_DETACH); mp = (session_app_detach_msg_t *) app_evt->evt->data; memset (mp, 0, sizeof (*mp)); - mp->client_index = wrk->bapi_client_index; + mp->client_index = wrk->api_client_handle; app_send_ctrl_evt_to_vpp (mq, app_evt); } @@ -344,7 +344,7 @@ vcl_send_session_worker_update (vcl_worker_t * wrk, vcl_session_t * s, mq = vcl_session_vpp_evt_q (wrk, s); app_alloc_ctrl_evt_to_vpp (mq, app_evt, SESSION_CTRL_EVT_WORKER_UPDATE); mp = (session_worker_update_msg_t *) app_evt->evt->data; - mp->client_index = wrk->bapi_client_index; + mp->client_index = wrk->api_client_handle; mp->handle = s->vpp_handle; mp->req_wrk_index = wrk->vpp_wrk_index; mp->wrk_index = wrk_index; @@ -373,7 +373,7 @@ vcl_send_worker_rpc (u32 dst_wrk_index, void *data, u32 data_len) mq = vcl_worker_ctrl_mq (wrk); app_alloc_ctrl_evt_to_vpp (mq, app_evt, SESSION_CTRL_EVT_APP_WRK_RPC); mp = (session_app_wrk_rpc_msg_t *) app_evt->evt->data; - mp->client_index = wrk->bapi_client_index; + mp->client_index = wrk->api_client_handle; mp->wrk_index = dst_wrk->vpp_wrk_index; clib_memcpy (mp->data, data, data_len); app_send_ctrl_evt_to_vpp (mq, app_evt); @@ -1145,7 +1145,7 @@ vppcom_session_disconnect (u32 session_handle) if (state & STATE_VPP_CLOSING) { vpp_evt_q = vcl_session_vpp_evt_q (wrk, session); - vcl_send_session_disconnected_reply (vpp_evt_q, wrk->bapi_client_index, + vcl_send_session_disconnected_reply (vpp_evt_q, wrk->api_client_handle, vpp_handle, 0); VDBG (1, "session %u [0x%llx]: sending disconnect REPLY...", session->session_index, vpp_handle); @@ -1245,7 +1245,7 @@ vppcom_app_create (const char *app_name) return rv; VDBG (0, "app_name '%s', my_client_index %d (0x%x)", app_name, - vcm->workers[0].bapi_client_index, vcm->workers[0].bapi_client_index); + vcm->workers[0].api_client_handle, vcm->workers[0].api_client_handle); return VPPCOM_OK; } @@ -1381,7 +1381,7 @@ vcl_session_cleanup (vcl_worker_t * wrk, vcl_session_t * session, else if (state == STATE_DISCONNECT) { svm_msg_q_t *mq = vcl_session_vpp_evt_q (wrk, session); - vcl_send_session_reset_reply (mq, wrk->bapi_client_index, + vcl_send_session_reset_reply (mq, wrk->api_client_handle, session->vpp_handle, 0); } else if (state == STATE_DETACHED) diff --git a/src/vnet/session/application_interface.h b/src/vnet/session/application_interface.h index a36008a1e71..1f3e181953b 100644 --- a/src/vnet/session/application_interface.h +++ b/src/vnet/session/application_interface.h @@ -825,6 +825,7 @@ typedef struct app_sapi_worker_add_del_reply_msg_ u32 wrk_index; u64 app_event_queue_address; u64 segment_handle; + u32 api_client_handle; u8 n_fds; u8 fd_flags; u8 is_add; diff --git a/src/vnet/session/session_api.c b/src/vnet/session/session_api.c index 988d3e26138..89a30d2626d 100644 --- a/src/vnet/session/session_api.c +++ b/src/vnet/session/session_api.c @@ -1434,8 +1434,8 @@ sapi_add_del_worker_handler (app_namespace_t * app_ns, app_ns_api_handle_t *handle; app_sapi_msg_t msg = { 0 }; app_worker_t *app_wrk; + u32 sapi_handle = -1; application_t *app; - u32 sapi_handle; u8 fd_flags = 0; app = application_get_if_valid (mp->app_index); @@ -1486,6 +1486,7 @@ done: rmp = &msg.worker_add_del_reply; rmp->retval = rv; rmp->is_add = mp->is_add; + rmp->api_client_handle = sapi_handle; rmp->wrk_index = args.wrk_map_index; rmp->segment_handle = args.segment_handle; if (!rv && mp->is_add) -- cgit 1.2.3-korg