X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fsession_api.c;h=f9fddea61481307a11d1e80fc813969aa28dc42c;hb=refs%2Fchanges%2F58%2F13358%2F24;hp=9236b19a5d06ecea956d6c0fb47d2ef5f3e4e4d9;hpb=5090c57c4d1778b40ed77d31d1dd85eb3123c528;p=vpp.git diff --git a/src/vnet/session/session_api.c b/src/vnet/session/session_api.c index 9236b19a5d0..f9fddea6148 100755 --- a/src/vnet/session/session_api.c +++ b/src/vnet/session/session_api.c @@ -155,7 +155,7 @@ send_session_accept_callback (stream_session_t * s) vl_api_registration_t *reg; transport_connection_t *tc; stream_session_t *listener; - svm_queue_t *vpp_queue; + svm_msg_q_t *vpp_queue; reg = vl_mem_api_client_index_to_registration (server->api_client_index); if (!reg) @@ -174,7 +174,7 @@ send_session_accept_callback (stream_session_t * s) if (session_has_transport (s)) { - listener = listen_session_get (s->session_type, s->listener_index); + listener = listen_session_get (s->listener_index); mp->listener_handle = listen_session_get_handle (listener); if (application_is_proxy (server)) { @@ -199,8 +199,7 @@ send_session_accept_callback (stream_session_t * s) local_session_t *ll; if (application_local_session_listener_has_transport (ls)) { - listener = listen_session_get (ls->listener_session_type, - ls->listener_index); + 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); } @@ -210,8 +209,7 @@ send_session_accept_callback (stream_session_t * s) ls->listener_index); if (ll->transport_listener_index != ~0) { - listener = listen_session_get (ll->listener_session_type, - ll->transport_listener_index); + listener = listen_session_get (ll->transport_listener_index); mp->listener_handle = listen_session_get_handle (listener); } else @@ -302,7 +300,7 @@ send_session_connected_callback (u32 app_index, u32 api_context, vl_api_connect_session_reply_t *mp; transport_connection_t *tc; vl_api_registration_t *reg; - svm_queue_t *vpp_queue; + svm_msg_q_t *vpp_queue; application_t *app; app = application_get (app_index); @@ -482,9 +480,12 @@ done: static void vl_api_bind_uri_t_handler (vl_api_bind_uri_t * mp) { - vl_api_bind_uri_reply_t *rmp; + transport_connection_t *tc = 0; vnet_bind_args_t _a, *a = &_a; - application_t *app; + vl_api_bind_uri_reply_t *rmp; + stream_session_t *s; + application_t *app = 0; + svm_msg_q_t *vpp_evt_q; int rv; if (session_manager_is_enabled () == 0) @@ -507,7 +508,30 @@ vl_api_bind_uri_t_handler (vl_api_bind_uri_t * mp) } done: - REPLY_MACRO (VL_API_BIND_URI_REPLY); + + /* *INDENT-OFF* */ + REPLY_MACRO2 (VL_API_BIND_URI_REPLY, ({ + if (!rv) + { + rmp->handle = a->handle; + if (app && application_has_global_scope (app)) + { + s = listen_session_get_from_handle (a->handle); + tc = listen_session_get_transport (s); + rmp->lcl_is_ip4 = tc->is_ip4; + rmp->lcl_port = tc->lcl_port; + clib_memcpy (rmp->lcl_ip, &tc->lcl_ip, sizeof(tc->lcl_ip)); + if (session_transport_service_type (s) == TRANSPORT_SERVICE_CL) + { + rmp->rx_fifo = pointer_to_uword (s->server_rx_fifo); + rmp->tx_fifo = pointer_to_uword (s->server_tx_fifo); + vpp_evt_q = session_manager_get_vpp_event_queue (0); + rmp->vpp_evt_q = pointer_to_uword (vpp_evt_q); + } + } + } + })); + /* *INDENT-ON* */ } static void @@ -735,6 +759,7 @@ vl_api_bind_sock_t_handler (vl_api_bind_sock_t * mp) stream_session_t *s; transport_connection_t *tc = 0; ip46_address_t *ip46; + svm_msg_q_t *vpp_evt_q; if (session_manager_is_enabled () == 0) { @@ -777,8 +802,14 @@ done: { s = listen_session_get_from_handle (a->handle); tc = listen_session_get_transport (s); - rmp->lcl_is_ip4 = tc->is_ip4; clib_memcpy (rmp->lcl_ip, &tc->lcl_ip, sizeof (tc->lcl_ip)); + if (session_transport_service_type (s) == TRANSPORT_SERVICE_CL) + { + rmp->rx_fifo = pointer_to_uword (s->server_rx_fifo); + rmp->tx_fifo = pointer_to_uword (s->server_tx_fifo); + vpp_evt_q = session_manager_get_vpp_event_queue (0); + rmp->vpp_evt_q = pointer_to_uword (vpp_evt_q); + } } } }));