session: refactor local connects
[vpp.git] / src / vcl / vcl_bapi.c
index 457fc18..95efe00 100644 (file)
@@ -98,6 +98,7 @@ vcl_segment_detach (u64 segment_handle)
   segment = svm_fifo_segment_get_segment (sm, segment_index);
   svm_fifo_segment_delete (sm, segment);
   vcl_segment_table_del (segment_handle);
+  VDBG (0, "detached segment %u handle %u", segment_index, segment_handle);
 }
 
 static u64
@@ -332,19 +333,18 @@ vl_api_bind_sock_reply_t_handler (vl_api_bind_sock_reply_t * mp)
 {
   /* Expecting a similar message on mq. So ignore this */
   VDBG (0, "bapi msg vpp handle 0x%llx, sid %u: bind retval: %u!",
-       getpid (), mp->handle, mp->context, mp->retval);
+       mp->handle, mp->context, mp->retval);
 }
 
 static void
 vl_api_unbind_sock_reply_t_handler (vl_api_unbind_sock_reply_t * mp)
 {
   if (mp->retval)
-    clib_warning ("VCL<%d>: ERROR: sid %u: unbind failed: %U",
-                 getpid (), mp->context, format_api_error,
-                 ntohl (mp->retval));
+    VDBG (0, "ERROR: sid %u: unbind failed: %U", mp->context,
+         format_api_error, ntohl (mp->retval));
+
+  VDBG (1, "sid %u: unbind succeeded!", mp->context);
 
-  else
-    VDBG (1, "VCL<%d>: sid %u: unbind succeeded!", getpid (), mp->context);
 }
 
 static void
@@ -366,6 +366,31 @@ vl_api_connect_session_reply_t_handler (vl_api_connect_sock_reply_t * mp)
                  ntohl (mp->retval));
 }
 
+static void
+  vl_api_application_tls_cert_add_reply_t_handler
+  (vl_api_application_tls_cert_add_reply_t * mp)
+{
+  if (mp->retval)
+    {
+      clib_warning ("VCL<%d>: add cert failed: %U", getpid (),
+                   format_api_error, ntohl (mp->retval));
+      return;
+    }
+}
+
+static void
+  vl_api_application_tls_key_add_reply_t_handler
+  (vl_api_application_tls_key_add_reply_t * mp)
+{
+  if (mp->retval)
+    {
+      clib_warning ("VCL<%d>: add key failed: %U", getpid (),
+                   format_api_error, ntohl (mp->retval));
+      return;
+    }
+
+}
+
 #define foreach_sock_msg                                               \
 _(SESSION_ENABLE_DISABLE_REPLY, session_enable_disable_reply)          \
 _(BIND_SOCK_REPLY, bind_sock_reply)                                    \
@@ -374,6 +399,8 @@ _(CONNECT_SESSION_REPLY, connect_session_reply)                             \
 _(DISCONNECT_SESSION_REPLY, disconnect_session_reply)                  \
 _(APPLICATION_ATTACH_REPLY, application_attach_reply)                  \
 _(APPLICATION_DETACH_REPLY, application_detach_reply)                  \
+_(APPLICATION_TLS_CERT_ADD_REPLY, application_tls_cert_add_reply)      \
+_(APPLICATION_TLS_KEY_ADD_REPLY, application_tls_key_add_reply)        \
 _(MAP_ANOTHER_SEGMENT, map_another_segment)                            \
 _(UNMAP_SEGMENT, unmap_segment)                                                \
 _(APP_CUT_THROUGH_REGISTRATION_ADD, app_cut_through_registration_add)  \
@@ -443,6 +470,7 @@ vppcom_app_send_attach (void)
   bmp->options[APP_OPTIONS_PREALLOC_FIFO_PAIRS] =
     vcm->cfg.preallocated_fifo_pairs;
   bmp->options[APP_OPTIONS_EVT_QUEUE_SIZE] = vcm->cfg.event_queue_size;
+  bmp->options[APP_OPTIONS_TLS_ENGINE] = TLS_ENGINE_OPENSSL;
   if (nsid_len)
     {
       bmp->namespace_id_len = nsid_len;
@@ -565,9 +593,8 @@ vppcom_send_bind_sock (vcl_session_t * session)
 }
 
 void
-vppcom_send_unbind_sock (u64 vpp_handle)
+vppcom_send_unbind_sock (vcl_worker_t * wrk, u64 vpp_handle)
 {
-  vcl_worker_t *wrk = vcl_worker_get_current ();
   vl_api_unbind_sock_t *ump;
 
   ump = vl_msg_api_alloc (sizeof (*ump));
@@ -577,22 +604,44 @@ vppcom_send_unbind_sock (u64 vpp_handle)
   ump->client_index = wrk->my_client_index;
   ump->wrk_index = wrk->vpp_wrk_index;
   ump->handle = vpp_handle;
+  ump->context = wrk->wrk_index;
   vl_msg_api_send_shmem (wrk->vl_input_queue, (u8 *) & ump);
 }
 
 void
-vppcom_send_accept_session_reply (u64 handle, u32 context, int retval)
+vppcom_send_application_tls_cert_add (vcl_session_t * session, char *cert,
+                                     u32 cert_len)
 {
   vcl_worker_t *wrk = vcl_worker_get_current ();
-  vl_api_accept_session_reply_t *rmp;
+  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->my_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);
+
+}
+
+void
+vppcom_send_application_tls_key_add (vcl_session_t * session, char *key,
+                                    u32 key_len)
+{
+  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->my_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);
 
-  rmp = vl_msg_api_alloc (sizeof (*rmp));
-  memset (rmp, 0, sizeof (*rmp));
-  rmp->_vl_msg_id = ntohs (VL_API_ACCEPT_SESSION_REPLY);
-  rmp->retval = htonl (retval);
-  rmp->context = context;
-  rmp->handle = handle;
-  vl_msg_api_send_shmem (wrk->vl_input_queue, (u8 *) & rmp);
 }
 
 u32
@@ -630,7 +679,7 @@ vppcom_connect_to_vpp (char *app_name)
          return VPPCOM_ECONNREFUSED;
        }
 
-      if (vl_socket_client_init_shm (0))
+      if (vl_socket_client_init_shm (0, 1 /* want_pthread */ ))
        {
          VERR ("app (%s) init shm failed!", app_name);
          return VPPCOM_ECONNREFUSED;