session: lcl transport info on accept
[vpp.git] / src / vnet / session / session_api.c
index f54a46b..fe9ebc1 100644 (file)
@@ -163,6 +163,7 @@ mq_send_session_accepted_cb (session_t * s)
       m.handle = session_handle (s);
 
       session_get_endpoint (s, &m.rmt, 0 /* is_lcl */);
+      session_get_endpoint (s, &m.lcl, 1 /* is_lcl */);
     }
   else
     {
@@ -173,6 +174,7 @@ mq_send_session_accepted_cb (session_t * s)
       m.listener_handle = app_listen_session_handle (listener);
       m.rmt.is_ip4 = session_type_is_ip4 (listener->session_type);
       m.rmt.port = ct->c_rmt_port;
+      m.lcl.port = ct->c_lcl_port;
       m.handle = session_handle (s);
       m.vpp_event_queue_address =
        fifo_segment_msg_q_offset (eq_seg, s->thread_index);
@@ -303,8 +305,6 @@ mq_send_session_connected_cb (u32 app_wrk_index, u32 api_context,
       m.server_rx_fifo = fifo_segment_fifo_offset (s->rx_fifo);
       m.server_tx_fifo = fifo_segment_fifo_offset (s->tx_fifo);
       m.segment_handle = session_segment_handle (s);
-      s->rx_fifo->shr->client_session_index = api_context;
-      s->tx_fifo->shr->client_session_index = api_context;
     }
   else
     {
@@ -326,6 +326,11 @@ mq_send_session_connected_cb (u32 app_wrk_index, u32 api_context,
       m.ct_segment_handle = session_segment_handle (ss);
     }
 
+  /* Setup client session index in advance, in case data arrives
+   * before the app processes message and updates it */
+  s->rx_fifo->shr->client_session_index = api_context;
+  s->tx_fifo->shr->client_session_index = api_context;
+
 snd_msg:
 
   app_mq = app_wrk->event_queue;