diff options
author | Florin Coras <fcoras@cisco.com> | 2020-12-11 13:58:12 -0800 |
---|---|---|
committer | Florin Coras <fcoras@cisco.com> | 2020-12-29 12:11:07 -0800 |
commit | b462418890240b2e38dbf522f9dd0196b79e0fa8 (patch) | |
tree | 3ae26a22edb23da8d40f2c2b54eb96b056bca565 /src/vcl/vppcom.c | |
parent | 04943b4c42db300d0d895644f32da79a6d411c51 (diff) |
svm: allow mq attachments at random offsets
Type: feature
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ic373cd2c11272da539eb4b0db27227f36f2f9688
Diffstat (limited to 'src/vcl/vppcom.c')
-rw-r--r-- | src/vcl/vppcom.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index 734d062669e..dbb2cd59a3b 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -374,11 +374,9 @@ vcl_session_accepted_handler (vcl_worker_t * wrk, session_accepted_msg_t * mp, goto error; } - session->vpp_evt_q = - uword_to_pointer (mp->vpp_event_queue_address, svm_msg_q_t *); - if (vcl_segment_attach_session (mp->segment_handle, mp->server_rx_fifo, - mp->server_tx_fifo, 0, session)) + mp->server_tx_fifo, + mp->vpp_event_queue_address, 0, session)) { VDBG (0, "failed to attach fifos for %u", session->session_index); goto error; @@ -412,7 +410,8 @@ vcl_session_accepted_handler (vcl_worker_t * wrk, session_accepted_msg_t * mp, return session->session_index; error: - evt_q = uword_to_pointer (mp->vpp_event_queue_address, svm_msg_q_t *); + vcl_segment_attach_mq (vcl_vpp_worker_segment_handle (0), + mp->vpp_event_queue_address, mp->mq_index, &evt_q); vcl_send_session_accepted_reply (evt_q, mp->context, mp->handle, VNET_API_ERROR_INVALID_ARGUMENT); vcl_session_free (wrk, session); @@ -444,11 +443,10 @@ vcl_session_connected_handler (vcl_worker_t * wrk, } session->vpp_handle = mp->handle; - session->vpp_evt_q = uword_to_pointer (mp->vpp_event_queue_address, - svm_msg_q_t *); if (vcl_segment_attach_session (mp->segment_handle, mp->server_rx_fifo, - mp->server_tx_fifo, 0, session)) + mp->server_tx_fifo, + mp->vpp_event_queue_address, 0, session)) { VDBG (0, "failed to attach fifos for %u", session->session_index); session->session_state = VCL_STATE_DETACHED; @@ -459,7 +457,7 @@ 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, 1, session)) + mp->ct_tx_fifo, (uword) ~0, 1, session)) { VDBG (0, "failed to attach ct fifos for %u", session->session_index); session->session_state = VCL_STATE_DETACHED; @@ -571,12 +569,11 @@ vcl_session_bound_handler (vcl_worker_t * wrk, session_bound_msg_t * mp) session->transport.lcl_port = mp->lcl_port; vcl_session_table_add_listener (wrk, mp->handle, sid); session->session_state = VCL_STATE_LISTEN; - session->vpp_evt_q = uword_to_pointer (mp->vpp_evt_q, svm_msg_q_t *); if (vcl_session_is_cl (session)) { if (vcl_segment_attach_session (mp->segment_handle, mp->rx_fifo, - mp->tx_fifo, 0, session)) + mp->tx_fifo, mp->vpp_evt_q, 0, session)) { VDBG (0, "failed to attach fifos for %u", session->session_index); session->session_state = VCL_STATE_DETACHED; @@ -645,7 +642,9 @@ vcl_session_migrated_handler (vcl_worker_t * wrk, void *data) } s->vpp_handle = mp->new_handle; - s->vpp_evt_q = uword_to_pointer (mp->vpp_evt_q, svm_msg_q_t *); + + vcl_segment_attach_mq (vcl_vpp_worker_segment_handle (0), mp->vpp_evt_q, + mp->vpp_thread_index, &s->vpp_evt_q); vcl_session_table_del_vpp_handle (wrk, mp->handle); vcl_session_table_add_vpp_handle (wrk, mp->new_handle, s->session_index); @@ -856,7 +855,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, 0, s)) + msg->tx_fifo, (uword) ~0, 0, s)) { VDBG (0, "failed to attach fifos for %u", s->session_index); return; |