+ case SESSION_IO_EVT_RX:
+ case SESSION_IO_EVT_TX:
+ s = vcl_session_get (wrk, e->session_index);
+ if (!s || !vcl_session_is_open (s))
+ break;
+ vec_add1 (wrk->unhandled_evts_vector, *e);
+ break;
+ case SESSION_CTRL_EVT_BOUND:
+ /* We can only wait for only one listen so not postponed */
+ vcl_session_bound_handler (wrk, (session_bound_msg_t *) e->data);
+ break;
+ case SESSION_CTRL_EVT_ACCEPTED:
+ s = vcl_session_accepted (wrk, (session_accepted_msg_t *) e->data);
+ if (vcl_session_has_attr (s, VCL_SESS_ATTR_NONBLOCK))
+ {
+ vec_add2 (wrk->unhandled_evts_vector, ecpy, 1);
+ *ecpy = *e;
+ ecpy->postponed = 1;
+ ecpy->session_index = s->session_index;
+ }
+ break;
+ case SESSION_CTRL_EVT_CONNECTED:
+ connected_msg = (session_connected_msg_t *) e->data;
+ sid = vcl_session_connected_handler (wrk, connected_msg);
+ if (!(s = vcl_session_get (wrk, sid)))
+ break;
+ if (vcl_session_has_attr (s, VCL_SESS_ATTR_NONBLOCK))
+ {
+ vec_add2 (wrk->unhandled_evts_vector, ecpy, 1);
+ *ecpy = *e;
+ ecpy->postponed = 1;
+ ecpy->session_index = s->session_index;
+ }
+ break;
+ case SESSION_CTRL_EVT_DISCONNECTED:
+ disconnected_msg = (session_disconnected_msg_t *) e->data;
+ if (!(s = vcl_session_get_w_vpp_handle (wrk, disconnected_msg->handle)))
+ break;
+ if (vcl_session_has_attr (s, VCL_SESS_ATTR_NONBLOCK))
+ {
+ vec_add1 (wrk->unhandled_evts_vector, *e);
+ break;
+ }
+ if (!(s = vcl_session_disconnected_handler (wrk, disconnected_msg)))
+ break;
+ VDBG (0, "disconnected session %u [0x%llx]", s->session_index,
+ s->vpp_handle);
+ break;
+ case SESSION_CTRL_EVT_RESET:
+ reset_msg = (session_reset_msg_t *) e->data;
+ if (!(s = vcl_session_get_w_vpp_handle (wrk, reset_msg->handle)))
+ break;
+ if (vcl_session_has_attr (s, VCL_SESS_ATTR_NONBLOCK))
+ {
+ vec_add1 (wrk->unhandled_evts_vector, *e);
+ break;
+ }
+ vcl_session_reset_handler (wrk, (session_reset_msg_t *) e->data);
+ break;
+ case SESSION_CTRL_EVT_UNLISTEN_REPLY:
+ vcl_session_unlisten_reply_handler (wrk, e->data);
+ break;
+ case SESSION_CTRL_EVT_MIGRATED:
+ vcl_session_migrated_handler (wrk, e->data);
+ break;
+ case SESSION_CTRL_EVT_CLEANUP:
+ vcl_session_cleanup_handler (wrk, e->data);
+ break;
+ case SESSION_CTRL_EVT_REQ_WORKER_UPDATE:
+ vcl_session_req_worker_update_handler (wrk, e->data);
+ break;
+ case SESSION_CTRL_EVT_WORKER_UPDATE_REPLY:
+ vcl_session_worker_update_reply_handler (wrk, e->data);
+ break;
+ case SESSION_CTRL_EVT_APP_ADD_SEGMENT:
+ vcl_session_app_add_segment_handler (wrk, e->data);
+ break;
+ case SESSION_CTRL_EVT_APP_DEL_SEGMENT:
+ vcl_session_app_del_segment_handler (wrk, e->data);
+ break;
+ case SESSION_CTRL_EVT_APP_WRK_RPC:
+ vcl_worker_rpc_handler (wrk, e->data);
+ break;
+ case SESSION_CTRL_EVT_TRANSPORT_ATTR_REPLY:
+ vcl_session_transport_attr_reply_handler (wrk, e->data);
+ break;
+ default:
+ clib_warning ("unhandled %u", e->event_type);