-} 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)
-{
- v4_connection_key_t key;
- memset (&key, 0, sizeof (v4_connection_key_t));
-
- key.src.as_u32 = lcl->as_u32;
- key.dst.as_u32 = rmt->as_u32;
- key.src_port = lcl_port;
- key.dst_port = rmt_port;
- key.proto = proto;
-
- kv->key[0] = key.as_u64[0];
- kv->key[1] = key.as_u64[1];
- kv->value = ~0ULL;
-}
-
-always_inline void
-make_v4_listener_kv (session_kv4_t * kv, ip4_address_t * lcl, u16 lcl_port,
- u8 proto)