- vl_msg_api_send_shmem (reg->vl_input_queue, (u8 *) & mp);
- return 0;
-}
-
-static session_cb_vft_t session_cb_vft = {
- .session_accept_callback = send_session_accept_callback,
- .session_disconnect_callback = send_session_disconnect_callback,
- .session_connected_callback = send_session_connected_callback,
- .session_reset_callback = send_session_reset_callback,
- .add_segment_callback = send_add_segment_callback,
- .del_segment_callback = send_del_segment_callback,
-};
-
-static int
-mq_send_session_accepted_cb (stream_session_t * s)
-{
- app_worker_t *app_wrk = app_worker_get (s->app_wrk_index);
- svm_msg_q_msg_t _msg, *msg = &_msg;
- svm_msg_q_t *vpp_queue, *app_mq;
- transport_proto_vft_t *tp_vft;
- transport_connection_t *tc;
- stream_session_t *listener;
- session_accepted_msg_t *mp;
- session_event_t *evt;
- application_t *app;
-
- app = application_get (app_wrk->app_index);
- app_mq = app_wrk->event_queue;
- svm_msg_q_lock_and_alloc_msg_w_ring (app_mq, SESSION_MQ_CTRL_EVT_RING,
- SVM_Q_WAIT, msg);
- svm_msg_q_unlock (app_mq);
-
- evt = svm_msg_q_msg_data (app_mq, msg);
- memset (evt, 0, sizeof (*evt));
- evt->event_type = SESSION_CTRL_EVT_ACCEPTED;
- mp = (session_accepted_msg_t *) evt->data;
- mp->context = app_wrk->wrk_index;
- mp->server_rx_fifo = pointer_to_uword (s->server_rx_fifo);
- mp->server_tx_fifo = pointer_to_uword (s->server_tx_fifo);
-
- if (session_has_transport (s))
- {
- listener = listen_session_get (s->listener_index);
- mp->listener_handle = listen_session_get_handle (listener);
- if (application_is_proxy (app))
- {
- listener =
- app_worker_first_listener (app_wrk, session_get_fib_proto (s),
- session_get_transport_proto (s));
- if (listener)
- mp->listener_handle = listen_session_get_handle (listener);
- }
- vpp_queue = session_manager_get_vpp_event_queue (s->thread_index);
- mp->vpp_event_queue_address = pointer_to_uword (vpp_queue);
- mp->handle = session_handle (s);
- tp_vft = transport_protocol_get_vft (session_get_transport_proto (s));
- tc = tp_vft->get_connection (s->connection_index, s->thread_index);
- mp->port = tc->rmt_port;
- mp->is_ip4 = tc->is_ip4;
- clib_memcpy (&mp->ip, &tc->rmt_ip, sizeof (tc->rmt_ip));
- }
- else
- {
- local_session_t *ls = (local_session_t *) s;
- local_session_t *ll;
- u8 main_thread = vlib_num_workers ()? 1 : 0;
-
- send_app_cut_through_registration_add (app->api_client_index,
- ls->server_evt_q,
- ls->client_evt_q);
-
- if (application_local_session_listener_has_transport (ls))
- {
- listener = listen_session_get (ls->listener_index);
- mp->listener_handle = listen_session_get_handle (listener);
- mp->is_ip4 = session_type_is_ip4 (listener->session_type);
- }
- else
- {
- ll =
- application_get_local_listen_session (app_wrk,
- ls->listener_index);
- if (ll->transport_listener_index != ~0)
- {
- listener = listen_session_get (ll->transport_listener_index);
- mp->listener_handle = listen_session_get_handle (listener);
- }
- else
- {
- mp->listener_handle = application_local_session_handle (ll);
- }
- mp->is_ip4 = session_type_is_ip4 (ll->listener_session_type);
- }
- mp->handle = application_local_session_handle (ls);
- mp->port = ls->port;
- vpp_queue = session_manager_get_vpp_event_queue (main_thread);
- mp->vpp_event_queue_address = pointer_to_uword (vpp_queue);
- mp->client_event_queue_address = ls->client_evt_q;
- mp->server_event_queue_address = ls->server_evt_q;
- }
- svm_msg_q_add (app_mq, msg, SVM_Q_WAIT);