+static inline int
+transport_app_rx_evt (transport_proto_t tp, u32 conn_index, u32 thread_index)
+{
+ transport_connection_t *tc;
+ if (!tp_vfts[tp].app_rx_evt)
+ return 0;
+ tc = transport_get_connection (tp, conn_index, thread_index);
+ return tp_vfts[tp].app_rx_evt (tc);
+}
+
+/**
+ * Get send parameters for transport connection
+ *
+ * These include maximum tx burst, mss, tx offset and other flags
+ * transport might want to provide to sessin layer
+ *
+ * @param tc transport connection
+ * @param sp send paramaters
+ *
+ */
+static inline u32
+transport_connection_snd_params (transport_connection_t * tc,
+ transport_send_params_t * sp)
+{
+ return tp_vfts[tc->proto].send_params (tc, sp);
+}
+
+static inline u8
+transport_connection_is_descheduled (transport_connection_t * tc)
+{
+ return ((tc->flags & TRANSPORT_CONNECTION_F_DESCHED) ? 1 : 0);
+}
+
+static inline void
+transport_connection_deschedule (transport_connection_t * tc)
+{
+ tc->flags |= TRANSPORT_CONNECTION_F_DESCHED;
+}
+
+void transport_connection_reschedule (transport_connection_t * tc);
+
+void transport_register_protocol (transport_proto_t transport_proto,
+ const transport_proto_vft_t * vft,
+ fib_protocol_t fib_proto, u32 output_node);
+transport_proto_vft_t *transport_protocol_get_vft (transport_proto_t tp);
+void transport_update_time (clib_time_type_t time_now, u8 thread_index);
+
+int transport_alloc_local_port (u8 proto, ip46_address_t * ip);
+int transport_alloc_local_endpoint (u8 proto, transport_endpoint_cfg_t * rmt,
+ ip46_address_t * lcl_addr,
+ u16 * lcl_port);
+void transport_endpoint_cleanup (u8 proto, ip46_address_t * lcl_ip, u16 port);
+void transport_enable_disable (vlib_main_t * vm, u8 is_en);
+void transport_init (void);
+
+always_inline u32
+transport_elog_track_index (transport_connection_t * tc)
+{
+#if TRANSPORT_DEBUG
+ return tc->elog_track.track_index_plus_one - 1;
+#else
+ return ~0;
+#endif
+}
+
+void transport_connection_tx_pacer_reset (transport_connection_t * tc,
+ u64 rate_bytes_per_sec,
+ u32 initial_bucket,
+ clib_us_time_t rtt);
+/**
+ * Initialize tx pacer for connection
+ *
+ * @param tc transport connection
+ * @param rate_bytes_per_second initial byte rate
+ * @param burst_bytes initial burst size in bytes
+ */
+void transport_connection_tx_pacer_init (transport_connection_t * tc,
+ u64 rate_bytes_per_sec,
+ u32 initial_bucket);
+
+/**
+ * Update tx pacer pacing rate
+ *
+ * @param tc transport connection
+ * @param bytes_per_sec new pacing rate
+ * @param rtt connection rtt that is used to compute
+ * inactivity time after which pacer bucket is
+ * reset to 1 mtu
+ */
+void transport_connection_tx_pacer_update (transport_connection_t * tc,
+ u64 bytes_per_sec,
+ clib_us_time_t rtt);
+
+/**
+ * Get tx pacer max burst
+ *
+ * @param tc transport connection
+ * @param time_now current cpu time
+ * @return max burst for connection
+ */
+u32 transport_connection_tx_pacer_burst (transport_connection_t * tc);
+
+/**
+ * Get tx pacer current rate
+ *
+ * @param tc transport connection
+ * @return rate for connection in bytes/s
+ */
+u64 transport_connection_tx_pacer_rate (transport_connection_t * tc);
+
+/**
+ * Reset tx pacer bucket
+ *
+ * @param tc transport connection
+ * @param bucket value the bucket will be reset to
+ */
+void transport_connection_tx_pacer_reset_bucket (transport_connection_t * tc,
+ u32 bucket);
+
+/**
+ * Check if transport connection is paced
+ */