From 6e3c1f8ec3faa8f0cad591fada32ad2f506ec0a0 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Wed, 15 Jan 2020 01:30:46 +0000 Subject: vcl: add rx event on epoll ctl if needed Type: fix Signed-off-by: Florin Coras Change-Id: Ib6d0387076a4bb0b52e4cdfdcd62b6060b704fe6 --- src/vcl/vcl_private.h | 8 ++++++++ src/vcl/vppcom.c | 12 ++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) (limited to 'src/vcl') diff --git a/src/vcl/vcl_private.h b/src/vcl/vcl_private.h index db4bcd315b6..30d3774fa93 100644 --- a/src/vcl/vcl_private.h +++ b/src/vcl/vcl_private.h @@ -517,6 +517,14 @@ vcl_session_is_ct (vcl_session_t * s) return (s->ct_tx_fifo != 0); } +static inline u8 +vcl_session_is_cl (vcl_session_t * s) +{ + if (s->session_type == VPPCOM_PROTO_UDP) + return 1; + return 0; +} + static inline u8 vcl_session_is_open (vcl_session_t * s) { diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index 3d54fb8c7aa..5eea71e143f 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -589,7 +589,7 @@ vcl_session_bound_handler (vcl_worker_t * wrk, session_bound_msg_t * mp) vec_validate (wrk->vpp_event_queues, 0); wrk->vpp_event_queues[0] = session->vpp_evt_q; - if (session->is_dgram) + if (vcl_session_is_cl (session)) { svm_fifo_t *rx_fifo, *tx_fifo; session->vpp_evt_q = uword_to_pointer (mp->vpp_evt_q, svm_msg_q_t *); @@ -2518,7 +2518,7 @@ vppcom_epoll_ctl (uint32_t vep_handle, int op, uint32_t session_handle, svm_fifo_add_want_deq_ntf (session->tx_fifo, SVM_FIFO_WANT_DEQ_NOTIF_IF_FULL); - /* Generate EPOLLOUT when tx_fifo/ct_tx_fifo not full */ + /* Generate EPOLLOUT if tx fifo not full */ if ((event->events & EPOLLOUT) && (vcl_session_write_ready (session) > 0)) { @@ -2527,6 +2527,14 @@ vppcom_epoll_ctl (uint32_t vep_handle, int op, uint32_t session_handle, e.session_index = session->session_index; vec_add1 (wrk->unhandled_evts_vector, e); } + /* Generate EPOLLIN if rx fifo has data */ + if ((event->events & EPOLLIN) && (vcl_session_read_ready (session) > 0)) + { + session_event_t e = { 0 }; + e.event_type = SESSION_IO_EVT_RX; + e.session_index = session->session_index; + vec_add1 (wrk->unhandled_evts_vector, e); + } VDBG (1, "EPOLL_CTL_ADD: vep_sh %u, sh %u, events 0x%x, data 0x%llx!", vep_handle, session_handle, event->events, event->data.u64); vcl_evt (VCL_EVT_EPOLL_CTLADD, session, event->events, event->data.u64); -- cgit 1.2.3-korg