|
#define | TCP_TICK 0.001 |
| TCP tick period (s) More...
|
|
#define | THZ (u32) (1/TCP_TICK) |
| TCP tick frequency. More...
|
|
#define | TCP_TSTAMP_RESOLUTION TCP_TICK |
| Time stamp resolution. More...
|
|
#define | TCP_PAWS_IDLE 24 * 24 * 60 * 60 * THZ |
| 24 days More...
|
|
#define | TCP_FIB_RECHECK_PERIOD 1 * THZ |
| Recheck every 1s. More...
|
|
#define | TCP_MAX_OPTION_SPACE 40 |
|
#define | TCP_DUPACK_THRESHOLD 3 |
|
#define | TCP_MAX_RX_FIFO_SIZE 4 << 20 |
|
#define | TCP_MIN_RX_FIFO_SIZE 4 << 10 |
|
#define | TCP_IW_N_SEGMENTS 10 |
|
#define | TCP_ALWAYS_ACK 1 |
| On/off delayed acks. More...
|
|
#define | TCP_USE_SACKS 1 |
| Disable only for testing. More...
|
|
#define | foreach_tcp_fsm_state |
| TCP FSM state definitions as per RFC793. More...
|
|
#define | foreach_tcp_timer |
| TCP timers. More...
|
|
#define | TCP_TIMER_HANDLE_INVALID ((u32) ~0) |
|
#define | TCP_TO_TIMER_TICK |
|
#define | TCP_DELACK_TIME 1 /* 0.1s */ |
|
#define | TCP_ESTABLISH_TIME 750 /* 75s */ |
|
#define | TCP_SYN_RCVD_TIME 600 /* 60s */ |
|
#define | TCP_2MSL_TIME 300 /* 30s */ |
|
#define | TCP_CLOSEWAIT_TIME 20 /* 2s */ |
|
#define | TCP_TIMEWAIT_TIME 100 /* 10s */ |
|
#define | TCP_CLEANUP_TIME 10 /* 1s Time to wait before cleanup */ |
|
#define | TCP_TIMER_PERSIST_MIN 2 /* 0.2s */ |
|
#define | TCP_RTO_MAX 60 * THZ /* Min max RTO (60s) as per RFC6298 */ |
|
#define | TCP_RTO_MIN 0.2 * THZ /* Min RTO (200ms) - lower than standard */ |
|
#define | TCP_RTT_MAX 30 * THZ /* 30s (probably too much) */ |
|
#define | TCP_RTO_SYN_RETRIES 3 /* SYN retries without doubling RTO */ |
|
#define | TCP_RTO_INIT 1 * THZ /* Initial retransmit timer */ |
|
#define | foreach_tcp_connection_flag |
| TCP connection flags. More...
|
|
#define | foreach_tcp_buf_flag |
| TCP buffer flags. More...
|
|
#define | TCP_SCOREBOARD_TRACE (0) |
|
#define | TCP_MAX_SACK_BLOCKS 15 |
| Max number of SACK blocks stored. More...
|
|
#define | TCP_INVALID_SACK_HOLE_INDEX ((u32)~0) |
|
#define | tcp_scoreboard_trace_add(_tc, _ack) |
|
#define | tcp_fastrecovery_on(tc) (tc)->flags |= TCP_CONN_FAST_RECOVERY |
|
#define | tcp_fastrecovery_off(tc) (tc)->flags &= ~TCP_CONN_FAST_RECOVERY |
|
#define | tcp_recovery_on(tc) (tc)->flags |= TCP_CONN_RECOVERY |
|
#define | tcp_recovery_off(tc) (tc)->flags &= ~TCP_CONN_RECOVERY |
|
#define | tcp_in_fastrecovery(tc) ((tc)->flags & TCP_CONN_FAST_RECOVERY) |
|
#define | tcp_in_recovery(tc) ((tc)->flags & (TCP_CONN_RECOVERY)) |
|
#define | tcp_in_slowstart(tc) (tc->cwnd < tc->ssthresh) |
|
#define | tcp_fastrecovery_sent_1_smss(tc) ((tc)->flags & TCP_CONN_FR_1_SMSS) |
|
#define | tcp_fastrecovery_1_smss_on(tc) ((tc)->flags |= TCP_CONN_FR_1_SMSS) |
|
#define | tcp_fastrecovery_1_smss_off(tc) ((tc)->flags &= ~TCP_CONN_FR_1_SMSS) |
|
#define | tcp_in_cong_recovery(tc) |
|
#define | tcp_error(n, s) TCP_ERROR_##n, |
|
#define | tcp_trajectory_add_start(b, start) |
|
#define | seq_lt(_s1, _s2) ((i32)((_s1)-(_s2)) < 0) |
|
#define | seq_leq(_s1, _s2) ((i32)((_s1)-(_s2)) <= 0) |
|
#define | seq_gt(_s1, _s2) ((i32)((_s1)-(_s2)) > 0) |
|
#define | seq_geq(_s1, _s2) ((i32)((_s1)-(_s2)) >= 0) |
|
#define | seq_max(_s1, _s2) (seq_gt((_s1), (_s2)) ? (_s1) : (_s2)) |
|
#define | timestamp_lt(_t1, _t2) ((i32)((_t1)-(_t2)) < 0) |
|
#define | timestamp_leq(_t1, _t2) ((i32)((_t1)-(_t2)) <= 0) |
|
#define | tcp_validate_txf_size(_tc, _a) |
|
|
static void | tcp_cong_recovery_off (tcp_connection_t *tc) |
|
static tcp_main_t * | vnet_get_tcp_main () |
|
static tcp_header_t * | tcp_buffer_hdr (vlib_buffer_t *b) |
|
clib_error_t * | vnet_tcp_enable_disable (vlib_main_t *vm, u8 is_en) |
|
void | tcp_punt_unknown (vlib_main_t *vm, u8 is_ip4, u8 is_add) |
|
static tcp_connection_t * | tcp_connection_get (u32 conn_index, u32 thread_index) |
|
static tcp_connection_t * | tcp_connection_get_if_valid (u32 conn_index, u32 thread_index) |
|
static tcp_connection_t * | tcp_get_connection_from_transport (transport_connection_t *tconn) |
|
void | tcp_connection_close (tcp_connection_t *tc) |
| Begin connection closing procedure. More...
|
|
void | tcp_connection_cleanup (tcp_connection_t *tc) |
| Cleans up connection state. More...
|
|
void | tcp_connection_del (tcp_connection_t *tc) |
| Connection removal. More...
|
|
int | tcp_half_open_connection_cleanup (tcp_connection_t *tc) |
| Try to cleanup half-open connection. More...
|
|
tcp_connection_t * | tcp_connection_new (u8 thread_index) |
|
void | tcp_connection_reset (tcp_connection_t *tc) |
| Notify session that connection has been reset. More...
|
|
int | tcp_configure_v4_source_address_range (vlib_main_t *vm, ip4_address_t *start, ip4_address_t *end, u32 table_id) |
| Configure an ipv4 source address range. More...
|
|
int | tcp_configure_v6_source_address_range (vlib_main_t *vm, ip6_address_t *start, ip6_address_t *end, u32 table_id) |
| Configure an ipv6 source address range. More...
|
|
void | tcp_api_reference (void) |
|
u8 * | format_tcp_connection_id (u8 *s, va_list *args) |
|
u8 * | format_tcp_connection (u8 *s, va_list *args) |
|
u8 * | format_tcp_scoreboard (u8 *s, va_list *args) |
|
u8 * | tcp_scoreboard_replay (u8 *s, tcp_connection_t *tc, u8 verbose) |
|
static tcp_connection_t * | tcp_listener_get (u32 tli) |
|
static tcp_connection_t * | tcp_half_open_connection_get (u32 conn_index) |
|
void | tcp_make_ack (tcp_connection_t *ts, vlib_buffer_t *b) |
| Convert buffer to ACK. More...
|
|
void | tcp_make_fin (tcp_connection_t *tc, vlib_buffer_t *b) |
| Convert buffer to FIN-ACK. More...
|
|
void | tcp_make_synack (tcp_connection_t *ts, vlib_buffer_t *b) |
| Convert buffer to SYN-ACK. More...
|
|
void | tcp_send_reset_w_pkt (tcp_connection_t *tc, vlib_buffer_t *pkt, u8 is_ip4) |
| Send reset without reusing existing buffer. More...
|
|
void | tcp_send_reset (tcp_connection_t *tc) |
| Build and set reset packet for connection. More...
|
|
void | tcp_send_syn (tcp_connection_t *tc) |
| Send SYN. More...
|
|
void | tcp_send_fin (tcp_connection_t *tc) |
| Send FIN. More...
|
|
void | tcp_init_mss (tcp_connection_t *tc) |
|
void | tcp_update_snd_mss (tcp_connection_t *tc) |
| Update snd_mss to reflect the effective segment size that we can send by taking into account all TCP options, including SACKs. More...
|
|
void | tcp_update_rto (tcp_connection_t *tc) |
|
void | tcp_flush_frame_to_output (vlib_main_t *vm, u8 thread_index, u8 is_ip4) |
| Flush tx frame populated by retransmits and timer pops. More...
|
|
void | tcp_flush_frames_to_output (u8 thread_index) |
| Flush v4 and v6 tcp and ip-lookup tx frames for thread index. More...
|
|
static u32 | tcp_end_seq (tcp_header_t *th, u32 len) |
|
static u32 | tcp_bytes_out (const tcp_connection_t *tc) |
| Our estimate of the number of bytes that have left the network. More...
|
|
static u32 | tcp_flight_size (const tcp_connection_t *tc) |
| Our estimate of the number of bytes in flight (pipe size) More...
|
|
static u32 | tcp_initial_cwnd (const tcp_connection_t *tc) |
| Initial cwnd as per RFC5681. More...
|
|
static u32 | tcp_loss_wnd (const tcp_connection_t *tc) |
|
static u32 | tcp_available_snd_wnd (const tcp_connection_t *tc) |
|
static u32 | tcp_available_output_snd_space (const tcp_connection_t *tc) |
|
static u32 | tcp_available_snd_space (const tcp_connection_t *tc) |
| Estimate of how many bytes we can still push into the network. More...
|
|
static u8 | tcp_is_lost_fin (tcp_connection_t *tc) |
|
i32 | tcp_rcv_wnd_available (tcp_connection_t *tc) |
|
u32 | tcp_snd_space (tcp_connection_t *tc) |
| Compute tx window session is allowed to fill. More...
|
|
void | tcp_update_rcv_wnd (tcp_connection_t *tc) |
|
void | tcp_retransmit_first_unacked (tcp_connection_t *tc) |
| Retransmit first unacked segment. More...
|
|
void | tcp_fast_retransmit_no_sack (tcp_connection_t *tc) |
| Fast retransmit without SACK info. More...
|
|
void | tcp_fast_retransmit_sack (tcp_connection_t *tc) |
| Do fast retransmit with SACKs. More...
|
|
void | tcp_fast_retransmit (tcp_connection_t *tc) |
| Do fast retransmit. More...
|
|
void | tcp_cc_init_congestion (tcp_connection_t *tc) |
|
int | tcp_cc_recover (tcp_connection_t *tc) |
|
void | tcp_cc_fastrecovery_exit (tcp_connection_t *tc) |
|
fib_node_index_t | tcp_lookup_rmt_in_fib (tcp_connection_t *tc) |
|
void | tcp_update_sack_list (tcp_connection_t *tc, u32 start, u32 end) |
| Build SACK list as per RFC2018. More...
|
|
static u32 | tcp_time_now (void) |
|
static u32 | tcp_set_time_now (u32 thread_index) |
|
u32 | tcp_push_header (transport_connection_t *tconn, vlib_buffer_t *b) |
|
u32 | tcp_prepare_retransmit_segment (tcp_connection_t *tc, u32 offset, u32 max_bytes, vlib_buffer_t **b) |
| Build a retransmit segment. More...
|
|
void | tcp_connection_timers_init (tcp_connection_t *tc) |
| Initialize all connection timers as invalid. More...
|
|
void | tcp_connection_timers_reset (tcp_connection_t *tc) |
| Stop all connection timers. More...
|
|
void | tcp_init_snd_vars (tcp_connection_t *tc) |
| Initialize connection send variables. More...
|
|
void | tcp_connection_init_vars (tcp_connection_t *tc) |
| Initialize tcp connection variables. More...
|
|
static void | tcp_connection_force_ack (tcp_connection_t *tc, vlib_buffer_t *b) |
|
static void | tcp_timer_set (tcp_connection_t *tc, u8 timer_id, u32 interval) |
|
static void | tcp_timer_reset (tcp_connection_t *tc, u8 timer_id) |
|
static void | tcp_timer_update (tcp_connection_t *tc, u8 timer_id, u32 interval) |
|
static void | tcp_retransmit_timer_set (tcp_connection_t *tc) |
|
static void | tcp_retransmit_timer_reset (tcp_connection_t *tc) |
|
static void | tcp_retransmit_timer_force_update (tcp_connection_t *tc) |
|
static void | tcp_persist_timer_set (tcp_connection_t *tc) |
|
static void | tcp_persist_timer_update (tcp_connection_t *tc) |
|
static void | tcp_persist_timer_reset (tcp_connection_t *tc) |
|
static void | tcp_retransmit_timer_update (tcp_connection_t *tc) |
|
static u8 | tcp_timer_is_active (tcp_connection_t *tc, tcp_timers_e timer) |
|
void | scoreboard_remove_hole (sack_scoreboard_t *sb, sack_scoreboard_hole_t *hole) |
|
void | scoreboard_update_lost (tcp_connection_t *tc, sack_scoreboard_t *sb) |
|
sack_scoreboard_hole_t * | scoreboard_insert_hole (sack_scoreboard_t *sb, u32 prev_index, u32 start, u32 end) |
|
sack_scoreboard_hole_t * | scoreboard_next_rxt_hole (sack_scoreboard_t *sb, sack_scoreboard_hole_t *start, u8 have_sent_1_smss, u8 *can_rescue, u8 *snd_limited) |
| Figure out the next hole to retransmit. More...
|
|
void | scoreboard_init_high_rxt (sack_scoreboard_t *sb, u32 seq) |
|
static sack_scoreboard_hole_t * | scoreboard_get_hole (sack_scoreboard_t *sb, u32 index) |
|
static sack_scoreboard_hole_t * | scoreboard_next_hole (sack_scoreboard_t *sb, sack_scoreboard_hole_t *hole) |
|
static sack_scoreboard_hole_t * | scoreboard_prev_hole (sack_scoreboard_t *sb, sack_scoreboard_hole_t *hole) |
|
static sack_scoreboard_hole_t * | scoreboard_first_hole (sack_scoreboard_t *sb) |
|
static sack_scoreboard_hole_t * | scoreboard_last_hole (sack_scoreboard_t *sb) |
|
static void | scoreboard_clear (sack_scoreboard_t *sb) |
|
static u32 | scoreboard_hole_bytes (sack_scoreboard_hole_t *hole) |
|
static u32 | scoreboard_hole_index (sack_scoreboard_t *sb, sack_scoreboard_hole_t *hole) |
|
static void | scoreboard_init (sack_scoreboard_t *sb) |
|
void | tcp_rcv_sacks (tcp_connection_t *tc, u32 ack) |
|
static void | tcp_cc_algo_register (tcp_cc_algorithm_type_e type, const tcp_cc_algorithm_t *vft) |
|
static tcp_cc_algorithm_t * | tcp_cc_algo_get (tcp_cc_algorithm_type_e type) |
|
void | tcp_cc_init (tcp_connection_t *tc) |
|
static void * | vlib_buffer_push_tcp_net_order (vlib_buffer_t *b, u16 sp, u16 dp, u32 seq, u32 ack, u8 tcp_hdr_opts_len, u8 flags, u16 wnd) |
| Push TCP header to buffer. More...
|
|
static void * | vlib_buffer_push_tcp (vlib_buffer_t *b, u16 sp_net, u16 dp_net, u32 seq, u32 ack, u8 tcp_hdr_opts_len, u8 flags, u16 wnd) |
| Push TCP header to buffer. More...
|
|