typedef struct _spacer
{
u64 bytes_per_sec;
- u64 bucket;
+ i64 bucket;
clib_us_time_t last_update;
f32 tokens_per_period;
- u32 idle_timeout_us;
+ u32 max_burst;
} spacer_t;
#define TRANSPORT_CONN_ID_LEN 44
#define c_stats connection.stats
#define c_pacer connection.pacer
#define c_flags connection.flags
-#define s_ho_handle pacer.bucket
-#define c_s_ho_handle connection.pacer.bucket
+#define s_ho_handle pacer.bytes_per_sec
+#define c_s_ho_handle connection.pacer.bytes_per_sec
} transport_connection_t;
STATIC_ASSERT (STRUCT_OFFSET_OF (transport_connection_t, s_index)
STATIC_ASSERT (sizeof (transport_connection_t) <= 128,
"moved into 3rd cache line");
-#define foreach_transport_proto \
- _(TCP, "tcp", "T") \
- _(UDP, "udp", "U") \
- _(NONE, "ct", "C") \
- _(TLS, "tls", "J") \
- _(QUIC, "quic", "Q") \
+#define foreach_transport_proto \
+ _ (TCP, "tcp", "T") \
+ _ (UDP, "udp", "U") \
+ _ (NONE, "ct", "C") \
+ _ (TLS, "tls", "J") \
+ _ (QUIC, "quic", "Q") \
+ _ (DTLS, "dtls", "D")
typedef enum _transport_proto
{
#undef _
} transport_endpoint_cfg_t;
+#define foreach_transport_endpt_cfg_flags \
+ _ (CSUM_OFFLOAD) \
+ _ (GSO) \
+ _ (RATE_SAMPLING)
+
+typedef enum transport_endpt_attr_flag_bit_
+{
+#define _(name) TRANSPORT_ENDPT_ATTR_F_BIT_##name,
+ foreach_transport_endpt_cfg_flags
+#undef _
+} __clib_packed transport_endpt_attr_flag_bit_t;
+
+typedef enum transport_endpt_attr_flag_
+{
+#define _(name) \
+ TRANSPORT_ENDPT_ATTR_F_##name = 1 << TRANSPORT_ENDPT_ATTR_F_BIT_##name,
+ foreach_transport_endpt_cfg_flags
+#undef _
+} __clib_packed transport_endpt_attr_flag_t;
+
+#define foreach_transport_attr_fields \
+ _ (u64, next_output_node, NEXT_OUTPUT_NODE) \
+ _ (u16, mss, MSS) \
+ _ (u8, flags, FLAGS) \
+ _ (u8, cc_algo, CC_ALGO)
+
+typedef enum transport_endpt_attr_type_
+{
+#define _(type, name, str) TRANSPORT_ENDPT_ATTR_##str,
+ foreach_transport_attr_fields
+#undef _
+} __clib_packed transport_endpt_attr_type_t;
+
+typedef struct transport_endpt_attr_
+{
+ transport_endpt_attr_type_t type;
+ union
+ {
+#define _(type, name, str) type name;
+ foreach_transport_attr_fields
+#undef _
+ };
+} transport_endpt_attr_t;
+
+typedef struct transport_endpt_ext_cfg_
+{
+ u16 type;
+ u16 len;
+ u8 data[0];
+} transport_endpt_ext_cfg_t;
+
typedef clib_bihash_24_8_t transport_endpoint_table_t;
#define ENDPOINT_INVALID_INDEX ((u32)~0)