aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2020-09-15 15:56:51 -0700
committerDave Barach <openvpp@barachs.net>2020-09-16 15:18:35 +0000
commitcc7c88e529eb3a2ca0934f27eb048c8ca3788f95 (patch)
tree644a69e7885a4b1993a3eb463d31326c04d89d52 /src
parent8b0cd69d31a50e7f4a454d45e903c6cdaf23fbfe (diff)
vcl: refactor bapi client index for sapi reuse
Type: refactor Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Ibebb6f7d4e610570693e213acd2f6d9332c563c6
Diffstat (limited to 'src')
-rw-r--r--src/vcl/vcl_bapi.c18
-rw-r--r--src/vcl/vcl_private.h7
-rw-r--r--src/vcl/vcl_sapi.c3
-rw-r--r--src/vcl/vppcom.c20
-rw-r--r--src/vnet/session/application_interface.h1
-rw-r--r--src/vnet/session/session_api.c3
6 files changed, 29 insertions, 23 deletions
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)