X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fsession.c;h=2697c26381ec53c7fbbbb8e664c1eca6625c0160;hb=fd542f1085d3a06066168c2d38e7f328b5b26ee3;hp=66cad2acff31a2a6101794c4f69e845e8131b153;hpb=a23b615aa4b7bf1eee6ad099f41c3c8f1c85d723;p=vpp.git diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c index 66cad2acff3..2697c26381e 100644 --- a/src/vnet/session/session.c +++ b/src/vnet/session/session.c @@ -1272,6 +1272,14 @@ listen_session_get_local_session_endpoint (stream_session_t * listener, return 0; } +void +session_flush_frames_main_thread (vlib_main_t * vm) +{ + ASSERT (vlib_get_thread_index () == 0); + vlib_process_signal_event_mt (vm, session_queue_process_node.index, + SESSION_Q_PROCESS_FLUSH_FRAMES, 0); +} + static clib_error_t * session_manager_main_enable (vlib_main_t * vm) { @@ -1366,8 +1374,30 @@ void session_node_enable_disable (u8 is_en) { u8 state = is_en ? VLIB_NODE_STATE_POLLING : VLIB_NODE_STATE_DISABLED; + vlib_thread_main_t *vtm = vlib_get_thread_main (); + u8 have_workers = vtm->n_threads != 0; + /* *INDENT-OFF* */ foreach_vlib_main (({ + if (have_workers && ii == 0) + { + vlib_node_set_state (this_vlib_main, session_queue_process_node.index, + state); + if (is_en) + { + vlib_node_t *n = vlib_get_node (this_vlib_main, + session_queue_process_node.index); + vlib_start_process (this_vlib_main, n->runtime_index); + } + else + { + vlib_process_signal_event_mt (this_vlib_main, + session_queue_process_node.index, + SESSION_Q_PROCESS_STOP, 0); + } + + continue; + } vlib_node_set_state (this_vlib_main, session_queue_node.index, state); }));