-
- if (!q)
- return -1;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- mp->_vl_msg_id = clib_host_to_net_u16 (VL_API_ACCEPT_SOCK);
-
- /* Note: session_type is the first octet in all types of sessions */
-
- mp->accept_cookie = server->accept_cookie;
- mp->server_rx_fifo = (u64) s->server_rx_fifo;
- mp->server_tx_fifo = (u64) s->server_tx_fifo;
- mp->handle = make_session_handle (s);
- mp->vpp_event_queue_address = (u64) vpp_queue;
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-
- return 0;
-}
-
-static int
-send_session_connected_callback (u32 api_client_index, stream_session_t * s,
- u8 is_fail)
-{
- vl_api_connect_sock_reply_t *mp;
- unix_shared_memory_queue_t *q;
- application_t *app = application_lookup (api_client_index);
- u8 *seg_name;
- unix_shared_memory_queue_t *vpp_queue;
-
- q = vl_api_client_index_to_input_queue (app->api_client_index);
-
- if (!q)
- return -1;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- mp->_vl_msg_id = clib_host_to_net_u16 (VL_API_CONNECT_SOCK_REPLY);
- mp->context = app->api_context;
- mp->retval = is_fail;
- if (!is_fail)
- {
- vpp_queue = session_manager_get_vpp_event_queue (s->thread_index);
- mp->server_rx_fifo = (u64) s->server_rx_fifo;
- mp->server_tx_fifo = (u64) s->server_tx_fifo;
- mp->handle = make_session_handle (s);
- mp->vpp_event_queue_address = (u64) vpp_queue;
- mp->client_event_queue_address = (u64) app->event_queue;
-
- session_manager_get_segment_info (s->server_segment_index, &seg_name,
- &mp->segment_size);
- mp->segment_name_length = vec_len (seg_name);
- if (mp->segment_name_length)
- clib_memcpy (mp->segment_name, seg_name, mp->segment_name_length);
- }
-
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-
- /* Remove client if connect failed */
- if (is_fail)
- application_del (app);
-
+ mp->server_rx_fifo = pointer_to_uword (s->server_rx_fifo);
+ mp->server_tx_fifo = pointer_to_uword (s->server_tx_fifo);
+ mp->handle = session_handle (s);
+ mp->vpp_event_queue_address = pointer_to_uword (vpp_queue);
+ clib_memcpy (mp->lcl_ip, &tc->lcl_ip, sizeof (tc->lcl_ip));
+ mp->is_ip4 = tc->is_ip4;
+ mp->lcl_port = tc->lcl_port;
+
+done:
+ mp->retval = is_fail ?
+ clib_host_to_net_u32 (VNET_API_ERROR_SESSION_CONNECT) : 0;
+ vl_msg_api_send_shmem (reg->vl_input_queue, (u8 *) & mp);