From f6e284b20c7a5b774ae21934fbf3f07801d61fc2 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Wed, 21 Jul 2021 18:17:20 -0700 Subject: [PATCH] session vcl: explit mq indices in ctrl messages Type: improvement Signed-off-by: Florin Coras Change-Id: I8e80252b85dda9a8f5699109264dc1b913581442 --- src/vcl/vcl_private.c | 7 +++---- src/vcl/vcl_private.h | 4 ++-- src/vcl/vppcom.c | 20 +++++++++++--------- src/vnet/session/application_interface.h | 5 ++--- src/vnet/session/session_api.c | 3 +++ 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/vcl/vcl_private.c b/src/vcl/vcl_private.c index 6d1145bfb9e..8f8ebf9d2e8 100644 --- a/src/vcl/vcl_private.c +++ b/src/vcl/vcl_private.c @@ -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); diff --git a/src/vcl/vcl_private.h b/src/vcl/vcl_private.h index fdc4ff8cdbd..3233aeca4b2 100644 --- a/src/vcl/vcl_private.h +++ b/src/vcl/vcl_private.h @@ -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); diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index 3847bf224a7..940a8b92dc1 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -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; diff --git a/src/vnet/session/application_interface.h b/src/vnet/session/application_interface.h index 7d8b8ce4e1c..b10dd6c150d 100644 --- a/src/vnet/session/application_interface.h +++ b/src/vnet/session/application_interface.h @@ -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_ diff --git a/src/vnet/session/session_api.c b/src/vnet/session/session_api.c index 31022294be5..75c4700361f 100644 --- a/src/vnet/session/session_api.c +++ b/src/vnet/session/session_api.c @@ -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) -- 2.16.6