|
FD.io VPP
v21.10.1-2-g0a485f517
Vector Packet Processing
|
Go to the documentation of this file.
16 #ifndef SRC_VNET_SESSION_TRANSPORT_H_
17 #define SRC_VNET_SESSION_TRANSPORT_H_
22 #define TRANSPORT_PACER_MIN_MSS 1460
23 #define TRANSPORT_PACER_MIN_BURST TRANSPORT_PACER_MIN_MSS
24 #define TRANSPORT_PACER_MAX_BURST (43 * TRANSPORT_PACER_MIN_MSS)
25 #define TRANSPORT_PACER_MAX_BURST_PKTS 43
26 #define TRANSPORT_PACER_BURSTS_PER_RTT 20
27 #define TRANSPORT_PACER_MIN_IDLE 100
28 #define TRANSPORT_PACER_IDLE_FACTOR 0.05
30 typedef struct _transport_options_t
69 typedef struct _transport_proto_vft
75 u32 (*stop_listen) (
u32 conn_index);
81 void (*cleanup_ho) (
u32 conn_index);
106 u8 *(*format_connection) (
u8 * s, va_list * args);
107 u8 *(*format_listener) (
u8 * s, va_list * args);
108 u8 *(*format_half_open) (
u8 * s, va_list * args);
115 void (*get_transport_listener_endpoint) (
u32 conn_index,
130 #define transport_proto_foreach(VAR, VAR_ALLOW_BM) \
131 for (VAR = 0; VAR < vec_len (tp_vfts); VAR++) \
132 if (tp_vfts[VAR].push_header != 0) \
133 if (VAR_ALLOW_BM & (1 << VAR))
165 return tp_vfts[tp].get_listener (conn_index);
171 return tp_vfts[tp].get_half_open (conn_index);
178 return tp_vfts[tp].custom_tx (s, sp);
188 return tp_vfts[tp].app_rx_evt (tc);
205 return tp_vfts[tc->proto].send_params (tc, sp);
249 ip46_address_t * lcl_addr,
261 return tc->elog_track.track_index_plus_one - 1;
268 u64 rate_bytes_per_sec,
279 u64 rate_bytes_per_sec,
@ TRANSPORT_SND_F_POSTPONE
void transport_register_protocol(transport_proto_t transport_proto, const transport_proto_vft_t *vft, fib_protocol_t fib_proto, u32 output_node)
Register transport virtual function table.
void transport_half_close(transport_proto_t tp, u32 conn_index, u8 thread_index)
void transport_get_endpoint(transport_proto_t tp, u32 conn_index, u32 thread_index, transport_endpoint_t *tep, u8 is_lcl)
void transport_update_time(clib_time_type_t time_now, u8 thread_index)
int transport_alloc_local_port(u8 proto, ip46_address_t *ip)
Allocate local port and add if successful add entry to local endpoint table to mark the pair as used.
static u8 transport_connection_is_tx_paced(transport_connection_t *tc)
Check if transport connection is paced.
enum transport_service_type_ transport_service_type_t
struct _transport_proto_vft transport_proto_vft_t
void transport_reset(transport_proto_t tp, u32 conn_index, u8 thread_index)
transport_proto_t transport_register_new_protocol(const transport_proto_vft_t *vft, fib_protocol_t fib_proto, u32 output_node)
u8 * format_transport_pacer(u8 *s, va_list *args)
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
struct _transport_connection transport_connection_t
void transport_enable_disable(vlib_main_t *vm, u8 is_en)
transport_proto_vft_t * tp_vfts
Per-type vector of transport protocol virtual function tables.
void transport_connection_update_tx_bytes(transport_connection_t *tc, u32 bytes)
Update tx bytes for paced transport connection.
u64 transport_connection_tx_pacer_rate(transport_connection_t *tc)
Get tx pacer current rate.
enum transport_dequeue_type_ transport_tx_fn_type_t
@ TRANSPORT_SND_F_DESCHED
@ TRANSPORT_CONNECTION_F_CLESS
Connection is "connection less".
int transport_connect(transport_proto_t tp, transport_endpoint_cfg_t *tep)
void transport_connection_tx_pacer_update_bytes(transport_connection_t *tc, u32 bytes)
static u32 transport_connection_snd_params(transport_connection_t *tc, transport_send_params_t *sp)
Get send parameters for transport connection.
@ TRANSPORT_CONNECTION_F_IS_TX_PACED
void transport_fifos_init_ooo(transport_connection_t *tc)
void transport_connection_tx_pacer_reset_bucket(transport_connection_t *tc, u32 bucket)
Reset tx pacer bucket.
static int transport_custom_tx(transport_proto_t tp, void *s, transport_send_params_t *sp)
void transport_cleanup_half_open(transport_proto_t tp, u32 conn_index)
void transport_update_pacer_time(u32 thread_index, clib_time_type_t now)
Request pacer time update.
static int transport_app_rx_evt(transport_proto_t tp, u32 conn_index, u32 thread_index)
enum transport_snd_flags_ transport_snd_flags_t
enum fib_protocol_t_ fib_protocol_t
Protocol Type.
u32 transport_start_listen(transport_proto_t tp, u32 session_index, transport_endpoint_t *tep)
void transport_connection_tx_pacer_reset(transport_connection_t *tc, u64 rate_bytes_per_sec, u32 initial_bucket, clib_us_time_t rtt)
struct transport_send_params_ transport_send_params_t
u32 transport_stop_listen(transport_proto_t tp, u32 conn_index)
enum _transport_proto transport_proto_t
int transport_alloc_local_endpoint(u8 proto, transport_endpoint_cfg_t *rmt, ip46_address_t *lcl_addr, u16 *lcl_port)
void transport_connection_reschedule(transport_connection_t *tc)
transport_proto_vft_t * transport_protocol_get_vft(transport_proto_t tp)
Get transport virtual function table.
static u8 transport_connection_is_descheduled(transport_connection_t *tc)
static u8 transport_connection_is_cless(transport_connection_t *tc)
struct _transport_options_t transport_options_t
u32 transport_connection_tx_pacer_burst(transport_connection_t *tc)
Get tx pacer max burst.
static transport_connection_t * transport_get_connection(transport_proto_t tp, u32 conn_index, u8 thread_index)
void transport_endpoint_cleanup(u8 proto, ip46_address_t *lcl_ip, u16 port)
int transport_connection_attribute(transport_proto_t tp, u32 conn_index, u8 thread_index, u8 is_get, transport_endpt_attr_t *attr)
static transport_connection_t * transport_get_half_open(transport_proto_t tp, u32 conn_index)
void transport_close(transport_proto_t tp, u32 conn_index, u8 thread_index)
static u32 transport_elog_track_index(transport_connection_t *tc)
void transport_connection_tx_pacer_init(transport_connection_t *tc, u64 rate_bytes_per_sec, u32 initial_bucket)
Initialize tx pacer for connection.
transport_snd_flags_t flags
static void cleanup(void)
void transport_cleanup(transport_proto_t tp, u32 conn_index, u8 thread_index)
static transport_connection_t * transport_get_listener(transport_proto_t tp, u32 conn_index)
void transport_get_listener_endpoint(transport_proto_t tp, u32 conn_index, transport_endpoint_t *tep, u8 is_lcl)
void transport_init(void)
void transport_share_local_endpoint(u8 proto, ip46_address_t *lcl_ip, u16 port)
static int start_listen(u16 port)
@ TRANSPORT_CONNECTION_F_DESCHED
Connection descheduled by the session layer.
void transport_connection_tx_pacer_update(transport_connection_t *tc, u64 bytes_per_sec, clib_us_time_t rtt)
Update tx pacer pacing rate.
VLIB buffer representation.
static void transport_connection_deschedule(transport_connection_t *tc)