return;
}
- fs_index = vcl_segment_table_lookup (mp->segment_handle);
- if (fs_index == VCL_INVALID_SEGMENT_INDEX)
+ /* Only validate if a value is provided */
+ if (mp->segment_handle != SESSION_INVALID_HANDLE)
{
- VDBG (0, "segment for session %u is not mounted!", s->session_index);
- s->session_state = VCL_STATE_DETACHED;
- return;
+ fs_index = vcl_segment_table_lookup (mp->segment_handle);
+ if (fs_index == VCL_INVALID_SEGMENT_INDEX)
+ {
+ VDBG (0, "segment %lx for session %u is not mounted!",
+ mp->segment_handle, s->session_index);
+ s->session_state = VCL_STATE_DETACHED;
+ return;
+ }
}
s->vpp_handle = mp->new_handle;
s->vep.et_mask = VEP_DEFAULT_ET_MASK;
s->vep.ev = *event;
txf = vcl_session_is_ct (s) ? s->ct_tx_fifo : s->tx_fifo;
- if (event->events & EPOLLOUT)
- svm_fifo_add_want_deq_ntf (txf, SVM_FIFO_WANT_DEQ_NOTIF_IF_FULL);
- else
- svm_fifo_del_want_deq_ntf (txf, SVM_FIFO_WANT_DEQ_NOTIF_IF_FULL);
+ if (txf)
+ {
+ if (event->events & EPOLLOUT)
+ svm_fifo_add_want_deq_ntf (txf, SVM_FIFO_WANT_DEQ_NOTIF_IF_FULL);
+ else
+ svm_fifo_del_want_deq_ntf (txf, SVM_FIFO_WANT_DEQ_NOTIF_IF_FULL);
+ }
VDBG (1, "EPOLL_CTL_MOD: vep_sh %u, sh %u, events 0x%x, data 0x%llx!",
vep_handle, session_handle, event->events, event->data.u64);
break;
}
vec_reset_length (wrk->unhandled_evts_vector);
}
+ /* Request to only drain unhandled */
+ if ((int) wait_for_time == -2)
+ return n_evts;
if (vcm->cfg.use_mq_eventfd)
return vppcom_epoll_wait_eventfd (wrk, events, maxevents, n_evts,
*buflen = sizeof (u32);
break;
+ case VPPCOM_ATTR_GET_DOMAIN:
+ if (!(buffer && buflen && (*buflen >= sizeof (int))))
+ {
+ rv = VPPCOM_EINVAL;
+ break;
+ }
+
+ if (session->transport.is_ip4)
+ *(int *) buffer = AF_INET;
+ else
+ *(int *) buffer = AF_INET6;
+ *buflen = sizeof (int);
+
+ VDBG (2, "VPPCOM_ATTR_GET_DOMAIN: %d, buflen %u", *(int *) buffer,
+ *buflen);
+ break;
+
default:
rv = VPPCOM_EINVAL;
break;