- /** Macros for 'derived classes' where base is named "connection" */
-#define c_lcl_ip connection.lcl_ip
-#define c_rmt_ip connection.rmt_ip
-#define c_lcl_ip4 connection.lcl_ip.ip4
-#define c_rmt_ip4 connection.rmt_ip.ip4
-#define c_lcl_ip6 connection.lcl_ip.ip6
-#define c_rmt_ip6 connection.rmt_ip.ip6
-#define c_lcl_port connection.lcl_port
-#define c_rmt_port connection.rmt_port
-#define c_proto connection.proto
-#define c_fib_index connection.fib_index
-#define c_s_index connection.s_index
-#define c_c_index connection.c_index
-#define c_is_ip4 connection.is_ip4
-#define c_thread_index connection.thread_index
-#define c_elog_track connection.elog_track
-#define c_cc_stat_tstamp connection.cc_stat_tstamp
-#define c_rmt_fei connection.rmt_fei
-#define c_rmt_dpo connection.rmt_dpo
-#define c_opaque_id connection.opaque_conn_id
-#define c_stats connection.stats
-#define c_pacer connection.pacer
-#define c_flags connection.flags
-} transport_connection_t;
-
-#define TRANSPORT_CONNECTION_F_IS_TX_PACED 1 << 0
-
-typedef enum _transport_proto
-{
- TRANSPORT_PROTO_TCP,
- TRANSPORT_PROTO_UDP,
- TRANSPORT_PROTO_SCTP,
- TRANSPORT_PROTO_NONE,
- TRANSPORT_PROTO_TLS,
- TRANSPORT_PROTO_UDPC,
- TRANSPORT_N_PROTO
-} transport_proto_t;
-
-u8 *format_transport_proto (u8 * s, va_list * args);
-u8 *format_transport_proto_short (u8 * s, va_list * args);
-u8 *format_transport_connection (u8 * s, va_list * args);
-u8 *format_transport_listen_connection (u8 * s, va_list * args);
-u8 *format_transport_half_open_connection (u8 * s, va_list * args);
-
-uword unformat_transport_proto (unformat_input_t * input, va_list * args);
-
-#define foreach_transport_endpoint_fields \
- _(ip46_address_t, ip) /**< ip address in net order */ \
- _(u16, port) /**< port in net order */ \
- _(u8, is_ip4) /**< set if ip4 */ \
- _(u32, sw_if_index) /**< interface endpoint is associated with */ \
- _(u32, fib_index) /**< fib table endpoint is associated with */ \
-
-typedef struct transport_endpoint_
-{
-#define _(type, name) type name;
- foreach_transport_endpoint_fields
-#undef _
-} transport_endpoint_t;
+ u32 (*push_header) (transport_connection_t * tconn, vlib_buffer_t * b);
+ u16 (*send_mss) (transport_connection_t * tc);
+ u32 (*send_space) (transport_connection_t * tc);
+ u32 (*tx_fifo_offset) (transport_connection_t * tc);
+ void (*update_time) (f64 time_now, u8 thread_index);
+ void (*flush_data) (transport_connection_t *tconn);
+ int (*custom_tx) (void *session, u32 max_burst_size);
+ int (*app_rx_evt) (transport_connection_t *tconn);
+
+ /*
+ * Connection retrieval
+ */
+ transport_connection_t *(*get_connection) (u32 conn_idx, u32 thread_idx);
+ transport_connection_t *(*get_listener) (u32 conn_index);
+ transport_connection_t *(*get_half_open) (u32 conn_index);
+
+ /*
+ * Format
+ */
+ u8 *(*format_connection) (u8 * s, va_list * args);
+ u8 *(*format_listener) (u8 * s, va_list * args);
+ u8 *(*format_half_open) (u8 * s, va_list * args);