+ /**
+ * Client data
+ */
+ u32 client_index;
+ u32 client_opaque;
+
+ u64 server_evt_q;
+ u64 client_evt_q;
+
+ CLIB_CACHE_LINE_ALIGN_MARK (pad);
+} local_session_t;
+
+#define foreach_session_endpoint_fields \
+ foreach_transport_connection_fields \
+ _(u8, transport_proto) \
+
+typedef struct _session_endpoint
+{
+#define _(type, name) type name;
+ foreach_session_endpoint_fields
+#undef _
+} session_endpoint_t;
+
+typedef struct _session_endpoint_extended
+{
+#define _(type, name) type name;
+ foreach_session_endpoint_fields
+#undef _
+ u32 app_index;
+ u32 opaque;
+ u8 *hostname;
+} session_endpoint_extended_t;
+
+#define SESSION_IP46_ZERO \
+{ \
+ .ip6 = { \
+ { 0, 0, }, \
+ }, \
+}
+#define SESSION_ENDPOINT_NULL \
+{ \
+ .sw_if_index = ENDPOINT_INVALID_INDEX, \
+ .ip = SESSION_IP46_ZERO, \
+ .fib_index = ENDPOINT_INVALID_INDEX, \
+ .is_ip4 = 0, \
+ .port = 0, \
+ .transport_proto = 0, \
+}
+#define SESSION_ENDPOINT_EXT_NULL \
+{ \
+ .sw_if_index = ENDPOINT_INVALID_INDEX, \
+ .ip = SESSION_IP46_ZERO, \
+ .fib_index = ENDPOINT_INVALID_INDEX, \
+ .is_ip4 = 0, \
+ .port = 0, \
+ .transport_proto = 0, \
+ .app_index = ENDPOINT_INVALID_INDEX, \
+ .opaque = ENDPOINT_INVALID_INDEX, \
+ .hostname = 0, \
+}
+
+#define session_endpoint_to_transport(_sep) ((transport_endpoint_t *)_sep)
+
+always_inline u8
+session_endpoint_fib_proto (session_endpoint_t * sep)
+{
+ return sep->is_ip4 ? FIB_PROTOCOL_IP4 : FIB_PROTOCOL_IP6;
+}