X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Ftransport_types.h;h=6a223546dfeaf07439fa9bd08879d4520f0e0896;hb=ec5c40b83acae400a8cc1a18ad897b6365774559;hp=e065ed1fa5968787d93d8103fc3a7861827811bf;hpb=d85666fdfd49a2b0a3ce5166c22c9efadf6ca239;p=vpp.git diff --git a/src/vnet/session/transport_types.h b/src/vnet/session/transport_types.h index e065ed1fa59..6a223546dfe 100644 --- a/src/vnet/session/transport_types.h +++ b/src/vnet/session/transport_types.h @@ -19,10 +19,10 @@ #include #include #include +#include #define TRANSPORT_MAX_HDRS_LEN 140 /* Max number of bytes for headers */ - typedef enum transport_dequeue_type_ { TRANSPORT_TX_PEEK, /**< reliable transport protos */ @@ -63,10 +63,10 @@ typedef enum transport_connection_flags_ 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 @@ -104,6 +104,7 @@ typedef struct _transport_connection u32 c_index; /**< Connection index in transport pool */ u32 thread_index; /**< Worker-thread index */ u8 flags; /**< Transport specific flags */ + u8 dscp; /**< Differentiated Services Code Point */ /*fib_node_index_t rmt_fei; dpo_id_t rmt_dpo; */ @@ -112,7 +113,7 @@ typedef struct _transport_connection #if TRANSPORT_DEBUG elog_track_t elog_track; /**< Event logging */ - u32 cc_stat_tstamp; /**< CC stats timestamp */ + f64 cc_stat_tstamp; /**< CC stats timestamp */ #endif /** @@ -144,6 +145,8 @@ typedef struct _transport_connection #define c_stats connection.stats #define c_pacer connection.pacer #define c_flags connection.flags +#define c_dscp connection.dscp +#define s_ho_handle pacer.bytes_per_sec } transport_connection_t; STATIC_ASSERT (STRUCT_OFFSET_OF (transport_connection_t, s_index) @@ -154,13 +157,15 @@ 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") \ - _(UDPC, "udpc", "U") \ - _(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") \ + _ (SRTP, "srtp", "R") \ + _ (HTTP, "http", "H") typedef enum _transport_proto { @@ -198,11 +203,16 @@ typedef enum transport_endpt_cfg_flags_ TRANSPORT_CFG_F_UNIDIRECTIONAL = 1 << 1, } transport_endpt_cfg_flags_t; +/* clang-format off */ #define foreach_transport_endpoint_cfg_fields \ foreach_transport_endpoint_fields \ - _(transport_endpoint_t, peer) \ - _(u16, mss) \ - _(u8, transport_flags) \ + _ (transport_endpoint_t, peer) \ + _ (u32, next_node_index) \ + _ (u32, next_node_opaque) \ + _ (u16, mss) \ + _ (u8, dscp) \ + _ (u8, transport_flags) \ +/* clang-format on */ typedef struct transport_endpoint_pair_ { @@ -211,6 +221,74 @@ typedef struct transport_endpoint_pair_ #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 enum transport_endpt_ext_cfg_type_ +{ + TRANSPORT_ENDPT_EXT_CFG_NONE, + TRANSPORT_ENDPT_EXT_CFG_CRYPTO, +} transport_endpt_ext_cfg_type_t; + +typedef struct transport_endpt_crypto_cfg_ +{ + u32 ckpair_index; + u8 crypto_engine; + u8 hostname[256]; /**< full domain len is 255 as per rfc 3986 */ +} transport_endpt_crypto_cfg_t; + +typedef struct transport_endpt_ext_cfg_ +{ + u16 type; + u16 len; + union + { + transport_endpt_crypto_cfg_t crypto; + u8 data[0]; + }; +} transport_endpt_ext_cfg_t; + typedef clib_bihash_24_8_t transport_endpoint_table_t; #define ENDPOINT_INVALID_INDEX ((u32)~0) @@ -228,7 +306,6 @@ transport_endpoint_fib_proto (transport_endpoint_t * tep) } u8 transport_protocol_is_cl (transport_proto_t tp); -u8 transport_half_open_has_fifos (transport_proto_t tp); transport_service_type_t transport_protocol_service_type (transport_proto_t); transport_tx_fn_type_t transport_protocol_tx_fn_type (transport_proto_t tp);