vcl: refactor bapi client index for sapi reuse 54/28854/4
authorFlorin Coras <fcoras@cisco.com>
Tue, 15 Sep 2020 22:56:51 +0000 (15:56 -0700)
committerDave Barach <openvpp@barachs.net>
Wed, 16 Sep 2020 15:18:35 +0000 (15:18 +0000)
Type: refactor

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ibebb6f7d4e610570693e213acd2f6d9332c563c6

src/vcl/vcl_bapi.c
src/vcl/vcl_private.h
src/vcl/vcl_sapi.c
src/vcl/vppcom.c
src/vnet/session/application_interface.h
src/vnet/session/session_api.c

index 900fb96..8131177 100644 (file)
@@ -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;
        }
     }
index bbcc3fa..51bdd65 100644 (file)
@@ -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;
index f160786..9258f79 100644 (file)
@@ -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 *);
index dcf8ba2..7286882 100644 (file)
@@ -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)
index a36008a..1f3e181 100644 (file)
@@ -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;
index 988d3e2..89a30d2 100644 (file)
@@ -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)