session vcl: explit mq indices in ctrl messages 29/33229/3
authorFlorin Coras <fcoras@cisco.com>
Thu, 22 Jul 2021 01:17:20 +0000 (18:17 -0700)
committerDave Barach <openvpp@barachs.net>
Thu, 22 Jul 2021 16:50:46 +0000 (16:50 +0000)
Type: improvement

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

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

index 6d1145b..8f8ebf9 100644 (file)
@@ -409,8 +409,8 @@ vcl_segment_detach (u64 segment_handle)
 
 int
 vcl_segment_attach_session (uword segment_handle, uword rxf_offset,
-                           uword txf_offset, uword mq_offset, u8 is_ct,
-                           vcl_session_t *s)
+                           uword txf_offset, uword mq_offset, u32 mq_index,
+                           u8 is_ct, vcl_session_t *s)
 {
   u32 fs_index, eqs_index;
   svm_fifo_t *rxf, *txf;
@@ -443,8 +443,7 @@ vcl_segment_attach_session (uword segment_handle, uword rxf_offset,
   if (!is_ct && mq_offset != (uword) ~0)
     {
       fs = fifo_segment_get_segment (&vcm->segment_main, eqs_index);
-      s->vpp_evt_q =
-       fifo_segment_msg_q_attach (fs, mq_offset, rxf->shr->slice_index);
+      s->vpp_evt_q = fifo_segment_msg_q_attach (fs, mq_offset, mq_index);
     }
 
   clib_rwlock_reader_unlock (&vcm->segment_table_lock);
index fdc4ff8..3233aec 100644 (file)
@@ -721,8 +721,8 @@ void vcl_segment_detach (u64 segment_handle);
 void vcl_send_session_unlisten (vcl_worker_t * wrk, vcl_session_t * s);
 
 int vcl_segment_attach_session (uword segment_handle, uword rxf_offset,
-                               uword txf_offset, uword mq_offset, u8 is_ct,
-                               vcl_session_t *s);
+                               uword txf_offset, uword mq_offset,
+                               u32 mq_index, u8 is_ct, vcl_session_t *s);
 int vcl_segment_attach_mq (uword segment_handle, uword mq_offset, u32 mq_index,
                           svm_msg_q_t **mq);
 int vcl_segment_discover_mqs (uword segment_handle, int *fds, u32 n_fds);
index 3847bf2..940a8b9 100644 (file)
@@ -455,9 +455,9 @@ vcl_session_accepted_handler (vcl_worker_t * wrk, session_accepted_msg_t * mp,
       goto error;
     }
 
-  if (vcl_segment_attach_session (mp->segment_handle, mp->server_rx_fifo,
-                                 mp->server_tx_fifo,
-                                 mp->vpp_event_queue_address, 0, session))
+  if (vcl_segment_attach_session (
+       mp->segment_handle, mp->server_rx_fifo, mp->server_tx_fifo,
+       mp->vpp_event_queue_address, mp->mq_index, 0, session))
     {
       VDBG (0, "failed to attach fifos for %u", session->session_index);
       goto error;
@@ -525,9 +525,9 @@ vcl_session_connected_handler (vcl_worker_t * wrk,
 
   session->vpp_handle = mp->handle;
 
-  if (vcl_segment_attach_session (mp->segment_handle, mp->server_rx_fifo,
-                                 mp->server_tx_fifo,
-                                 mp->vpp_event_queue_address, 0, session))
+  if (vcl_segment_attach_session (
+       mp->segment_handle, mp->server_rx_fifo, mp->server_tx_fifo,
+       mp->vpp_event_queue_address, mp->mq_index, 0, session))
     {
       VDBG (0, "failed to attach fifos for %u", session->session_index);
       session->session_state = VCL_STATE_DETACHED;
@@ -538,7 +538,8 @@ vcl_session_connected_handler (vcl_worker_t * wrk,
   if (mp->ct_rx_fifo)
     {
       if (vcl_segment_attach_session (mp->ct_segment_handle, mp->ct_rx_fifo,
-                                     mp->ct_tx_fifo, (uword) ~0, 1, session))
+                                     mp->ct_tx_fifo, (uword) ~0, ~0, 1,
+                                     session))
        {
          VDBG (0, "failed to attach ct fifos for %u", session->session_index);
          session->session_state = VCL_STATE_DETACHED;
@@ -654,7 +655,8 @@ vcl_session_bound_handler (vcl_worker_t * wrk, session_bound_msg_t * mp)
   if (vcl_session_is_cl (session))
     {
       if (vcl_segment_attach_session (mp->segment_handle, mp->rx_fifo,
-                                     mp->tx_fifo, mp->vpp_evt_q, 0, session))
+                                     mp->tx_fifo, mp->vpp_evt_q, mp->mq_index,
+                                     0, session))
        {
          VDBG (0, "failed to attach fifos for %u", session->session_index);
          session->session_state = VCL_STATE_DETACHED;
@@ -984,7 +986,7 @@ vcl_session_worker_update_reply_handler (vcl_worker_t * wrk, void *data)
   if (s->rx_fifo)
     {
       if (vcl_segment_attach_session (msg->segment_handle, msg->rx_fifo,
-                                     msg->tx_fifo, (uword) ~0, 0, s))
+                                     msg->tx_fifo, (uword) ~0, ~0, 0, s))
        {
          VDBG (0, "failed to attach fifos for %u", s->session_index);
          return;
index 7d8b8ce..b10dd6c 100644 (file)
@@ -352,6 +352,7 @@ typedef struct session_bound_msg_
   uword tx_fifo;
   uword vpp_evt_q;
   u64 segment_handle;
+  u32 mq_index;
 } __clib_packed session_bound_msg_t;
 
 typedef struct session_unlisten_msg_
@@ -435,10 +436,8 @@ typedef struct session_connected_msg_
   uword ct_tx_fifo;
   u64 ct_segment_handle;
   uword vpp_event_queue_address;
-  u32 segment_size;
-  u8 segment_name_length;
-  u8 segment_name[64];
   transport_endpoint_t lcl;
+  u32 mq_index;
 } __clib_packed session_connected_msg_t;
 
 typedef struct session_shutdown_msg_
index 3102229..75c4700 100644 (file)
@@ -282,6 +282,7 @@ mq_send_session_connected_cb (u32 app_wrk_index, u32 api_context,
       m.server_rx_fifo = fifo_segment_fifo_offset (s->rx_fifo);
       m.server_tx_fifo = fifo_segment_fifo_offset (s->tx_fifo);
       m.segment_handle = session_segment_handle (s);
+      m.mq_index = s->thread_index;
     }
   else
     {
@@ -301,6 +302,7 @@ mq_send_session_connected_cb (u32 app_wrk_index, u32 api_context,
       m.ct_rx_fifo = fifo_segment_fifo_offset (ss->tx_fifo);
       m.ct_tx_fifo = fifo_segment_fifo_offset (ss->rx_fifo);
       m.ct_segment_handle = session_segment_handle (ss);
+      m.mq_index = s->thread_index;
     }
 
   /* Setup client session index in advance, in case data arrives
@@ -361,6 +363,7 @@ mq_send_session_bound_cb (u32 app_wrk_index, u32 api_context,
   app = application_get (app_wrk->app_index);
   eq_seg = application_get_rx_mqs_segment (app);
   m.vpp_evt_q = fifo_segment_msg_q_offset (eq_seg, ls->thread_index);
+  m.mq_index = ls->thread_index;
 
   if (session_transport_service_type (ls) == TRANSPORT_SERVICE_CL &&
       ls->rx_fifo)