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 *);
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))
{
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);