VCL: add session namespace support.
[vpp.git] / src / vnet / session / session_api.c
index 432c7ba..e8fa8aa 100755 (executable)
@@ -160,6 +160,7 @@ send_session_connected_callback (u32 app_index, u32 api_context,
   unix_shared_memory_queue_t *q;
   application_t *app;
   unix_shared_memory_queue_t *vpp_queue;
+  transport_connection_t *tc;
 
   app = application_get (app_index);
   q = vl_api_client_index_to_input_queue (app->api_client_index);
@@ -170,20 +171,29 @@ send_session_connected_callback (u32 app_index, u32 api_context,
   mp = vl_msg_api_alloc (sizeof (*mp));
   mp->_vl_msg_id = clib_host_to_net_u16 (VL_API_CONNECT_SESSION_REPLY);
   mp->context = api_context;
-  if (!is_fail)
-    {
-      vpp_queue = session_manager_get_vpp_event_queue (s->thread_index);
-      mp->server_rx_fifo = pointer_to_uword (s->server_rx_fifo);
-      mp->server_tx_fifo = pointer_to_uword (s->server_tx_fifo);
-      mp->handle = session_handle (s);
-      mp->vpp_event_queue_address = pointer_to_uword (vpp_queue);
-      mp->retval = 0;
-    }
-  else
+
+  if (is_fail)
+    goto done;
+
+  tc = session_get_transport (s);
+  if (!tc)
     {
-      mp->retval = clib_host_to_net_u32 (VNET_API_ERROR_SESSION_CONNECT);
+      is_fail = 1;
+      goto done;
     }
 
+  vpp_queue = session_manager_get_vpp_event_queue (s->thread_index);
+  mp->server_rx_fifo = pointer_to_uword (s->server_rx_fifo);
+  mp->server_tx_fifo = pointer_to_uword (s->server_tx_fifo);
+  mp->handle = session_handle (s);
+  mp->vpp_event_queue_address = pointer_to_uword (vpp_queue);
+  clib_memcpy (mp->lcl_ip, &tc->lcl_ip, sizeof (tc->lcl_ip));
+  mp->is_ip4 = tc->is_ip4;
+  mp->lcl_port = tc->lcl_port;
+
+done:
+  mp->retval = is_fail ?
+    clib_host_to_net_u32 (VNET_API_ERROR_SESSION_CONNECT) : 0;
   vl_msg_api_send_shmem (q, (u8 *) & mp);
   return 0;
 }
@@ -312,7 +322,7 @@ vl_api_application_attach_t_handler (vl_api_application_attach_t * mp)
 
   if (mp->namespace_id_len)
     {
-      vec_validate (a->namespace_id, mp->namespace_id_len);
+      vec_validate (a->namespace_id, mp->namespace_id_len - 1);
       clib_memcpy (a->namespace_id, mp->namespace_id, mp->namespace_id_len);
     }