-/*
- * Transport protocol virtual function table
- */
-typedef struct _transport_proto_vft
-{
- /*
- * Setup
- */
- u32 (*bind) (vlib_main_t *, u32, ip46_address_t *, u16);
- u32 (*unbind) (vlib_main_t *, u32);
- int (*open) (ip46_address_t * addr, u16 port_host_byte_order);
- void (*close) (u32 conn_index, u32 thread_index);
- void (*cleanup) (u32 conn_index, u32 thread_index);
-
- /*
- * Transmission
- */
- 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 (*rx_fifo_offset) (transport_connection_t * tc);
-
- /*
- * 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);
-
-} transport_proto_vft_t;
-
-/* 16 octets */
-typedef CLIB_PACKED (struct
- {
- union
- {
- struct
- {
- ip4_address_t src; ip4_address_t dst;
- u16 src_port;
- u16 dst_port;
- /* align by making this 4 octets even though its a 1-bit field
- * NOTE: avoid key overlap with other transports that use 5 tuples for
- * session identification.
- */
- u32 proto;
- };
- u64 as_u64[2];
- };
- }) v4_connection_key_t;
-
-typedef CLIB_PACKED (struct
- {
- union
- {
- struct
- {
- /* 48 octets */
- ip6_address_t src; ip6_address_t dst;
- u16 src_port;
- u16 dst_port; u32 proto; u8 unused_for_now[8];
- }; u64 as_u64[6];
- };
- }) v6_connection_key_t;
-
-typedef clib_bihash_kv_16_8_t session_kv4_t;
-typedef clib_bihash_kv_48_8_t session_kv6_t;
-
-always_inline void
-make_v4_ss_kv (session_kv4_t * kv, ip4_address_t * lcl, ip4_address_t * rmt,
- u16 lcl_port, u16 rmt_port, u8 proto)