X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fvnet%2Fsession%2Ftransport.h;h=3cd64c90995f38871d9ac814be4129def89cca2a;hb=3d6156fed8be0c1e3ffe081be16f82be5be603fd;hp=2cfec06ec940f865cbd6dca563c2d447e296beba;hpb=b3ea73e766013bed70340688ce361d9096045b44;p=vpp.git diff --git a/src/vnet/session/transport.h b/src/vnet/session/transport.h index 2cfec06ec94..3cd64c90995 100644 --- a/src/vnet/session/transport.h +++ b/src/vnet/session/transport.h @@ -57,6 +57,7 @@ typedef struct transport_send_params_ struct { u32 max_burst_size; + u32 bytes_dequeued; }; }; transport_snd_flags_t flags; @@ -71,7 +72,7 @@ typedef struct _transport_proto_vft /* * Setup */ - u32 (*start_listen) (u32 session_index, transport_endpoint_t * lcl); + u32 (*start_listen) (u32 session_index, transport_endpoint_cfg_t *lcl); u32 (*stop_listen) (u32 conn_index); int (*connect) (transport_endpoint_cfg_t * rmt); void (*half_close) (u32 conn_index, u32 thread_index); @@ -85,7 +86,8 @@ typedef struct _transport_proto_vft * Transmission */ - u32 (*push_header) (transport_connection_t * tconn, vlib_buffer_t * b); + u32 (*push_header) (transport_connection_t *tconn, vlib_buffer_t **b, + u32 n_bufs); int (*send_params) (transport_connection_t * tconn, transport_send_params_t *sp); void (*update_time) (f64 time_now, u8 thread_index); @@ -138,7 +140,7 @@ void transport_half_close (transport_proto_t tp, u32 conn_index, void transport_close (transport_proto_t tp, u32 conn_index, u8 thread_index); void transport_reset (transport_proto_t tp, u32 conn_index, u8 thread_index); u32 transport_start_listen (transport_proto_t tp, u32 session_index, - transport_endpoint_t * tep); + transport_endpoint_cfg_t *tep); u32 transport_stop_listen (transport_proto_t tp, u32 conn_index); void transport_cleanup (transport_proto_t tp, u32 conn_index, u8 thread_index); @@ -244,13 +246,14 @@ transport_register_new_protocol (const transport_proto_vft_t * vft, transport_proto_vft_t *transport_protocol_get_vft (transport_proto_t tp); void transport_update_time (clib_time_type_t time_now, u8 thread_index); -int transport_alloc_local_port (u8 proto, ip46_address_t * ip); -int transport_alloc_local_endpoint (u8 proto, transport_endpoint_cfg_t * rmt, - ip46_address_t * lcl_addr, - u16 * lcl_port); +int transport_alloc_local_port (u8 proto, ip46_address_t *ip, + transport_endpoint_cfg_t *rmt); +int transport_alloc_local_endpoint (u8 proto, transport_endpoint_cfg_t *rmt, + ip46_address_t *lcl_addr, u16 *lcl_port); void transport_share_local_endpoint (u8 proto, ip46_address_t * lcl_ip, u16 port); -void transport_endpoint_cleanup (u8 proto, ip46_address_t * lcl_ip, u16 port); +int transport_release_local_endpoint (u8 proto, ip46_address_t *lcl_ip, + u16 port); void transport_enable_disable (vlib_main_t * vm, u8 is_en); void transport_init (void); @@ -327,6 +330,19 @@ transport_connection_is_tx_paced (transport_connection_t * tc) return (tc->flags & TRANSPORT_CONNECTION_F_IS_TX_PACED); } +/** + * Clear descheduled flag and update pacer if needed + * + * To add session to scheduler use @ref transport_connection_reschedule + */ +always_inline void +transport_connection_clear_descheduled (transport_connection_t *tc) +{ + tc->flags &= ~TRANSPORT_CONNECTION_F_DESCHED; + if (transport_connection_is_tx_paced (tc)) + transport_connection_tx_pacer_reset_bucket (tc, 0 /* bucket */); +} + u8 *format_transport_pacer (u8 * s, va_list * args); /**