+transport_proto_t session_add_transport_proto (void);
+int session_tx_fifo_peek_bytes (transport_connection_t * tc, u8 * buffer,
+ u32 offset, u32 max_bytes);
+u32 session_tx_fifo_dequeue_drop (transport_connection_t * tc, u32 max_bytes);
+
+always_inline u32
+transport_max_rx_enqueue (transport_connection_t * tc)
+{
+ session_t *s = session_get (tc->s_index, tc->thread_index);
+ return svm_fifo_max_enqueue_prod (s->rx_fifo);
+}
+
+always_inline u32
+transport_max_tx_dequeue (transport_connection_t * tc)
+{
+ session_t *s = session_get (tc->s_index, tc->thread_index);
+ return svm_fifo_max_dequeue_cons (s->tx_fifo);
+}
+
+always_inline u32
+transport_max_rx_dequeue (transport_connection_t * tc)
+{
+ session_t *s = session_get (tc->s_index, tc->thread_index);
+ return svm_fifo_max_dequeue (s->rx_fifo);
+}
+
+always_inline u32
+transport_rx_fifo_size (transport_connection_t * tc)
+{
+ session_t *s = session_get (tc->s_index, tc->thread_index);
+ return svm_fifo_size (s->rx_fifo);
+}
+
+always_inline u32
+transport_tx_fifo_size (transport_connection_t * tc)
+{
+ session_t *s = session_get (tc->s_index, tc->thread_index);
+ return svm_fifo_size (s->tx_fifo);
+}
+
+always_inline u8
+transport_rx_fifo_has_ooo_data (transport_connection_t * tc)
+{
+ session_t *s = session_get (tc->c_index, tc->thread_index);
+ return svm_fifo_has_ooo_data (s->rx_fifo);
+}
+
+always_inline void
+transport_rx_fifo_req_deq_ntf (transport_connection_t *tc)
+{
+ session_t *s = session_get (tc->s_index, tc->thread_index);
+ svm_fifo_add_want_deq_ntf (s->rx_fifo, SVM_FIFO_WANT_DEQ_NOTIF);
+}
+
+always_inline clib_time_type_t
+transport_time_now (u32 thread_index)
+{
+ return session_main.wrk[thread_index].last_vlib_time;
+}
+
+always_inline clib_us_time_t
+transport_us_time_now (u32 thread_index)
+{
+ return session_main.wrk[thread_index].last_vlib_us_time;
+}
+
+always_inline clib_time_type_t
+transport_seconds_per_loop (u32 thread_index)
+{
+ return session_main.wrk[thread_index].vm->seconds_per_loop;
+}