FD.io VPP  v17.10-9-gd594711
Vector Packet Processing
tcp.h File Reference
+ Include dependency graph for tcp.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#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   20 /* 2s */
 
#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 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)
 

Typedefs

typedef enum _tcp_state tcp_state_t
 
typedef enum _tcp_timers tcp_timers_e
 
typedef void( timer_expiration_handler) (u32 index)
 
typedef enum _tcp_connection_flag_bits tcp_connection_flag_bits_e
 
typedef enum _tcp_connection_flag tcp_connection_flags_e
 
typedef struct _scoreboard_trace_elt scoreboard_trace_elt_t
 
typedef struct _sack_scoreboard_hole sack_scoreboard_hole_t
 
typedef struct _sack_scoreboard sack_scoreboard_t
 
typedef enum _tcp_cc_algorithm_type tcp_cc_algorithm_type_e
 
typedef struct _tcp_cc_algorithm tcp_cc_algorithm_t
 
typedef enum _tcp_cc_ack_t tcp_cc_ack_t
 
typedef struct _tcp_connection tcp_connection_t
 
typedef enum _tcp_error tcp_error_t
 
typedef struct _tcp_lookup_dispatch tcp_lookup_dispatch_t
 
typedef struct _tcp_main tcp_main_t
 

Enumerations

enum  { TCP_N_BUF_BITS }
 
enum  { foreach_tcp_buf_flag }
 
enum  tcp_af_t { TCP_IP4, TCP_IP6, TCP_N_AF }
 

Functions

static void tcp_cong_recovery_off (tcp_connection_t *tc)
 
static tcp_main_tvnet_get_tcp_main ()
 
static tcp_header_ttcp_buffer_hdr (vlib_buffer_t *b)
 
clib_error_tvnet_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_ttcp_connection_get (u32 conn_index, u32 thread_index)
 
static tcp_connection_ttcp_connection_get_if_valid (u32 conn_index, u32 thread_index)
 
static tcp_connection_ttcp_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_ttcp_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)
 
u8format_tcp_connection_id (u8 *s, va_list *args)
 
u8format_tcp_connection (u8 *s, va_list *args)
 
u8format_tcp_scoreboard (u8 *s, va_list *args)
 
u8tcp_scoreboard_replay (u8 *s, tcp_connection_t *tc, u8 verbose)
 
static tcp_connection_ttcp_listener_get (u32 tli)
 
static tcp_connection_ttcp_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)
 
static void tcp_update_time (f64 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_tscoreboard_insert_hole (sack_scoreboard_t *sb, u32 prev_index, u32 start, u32 end)
 
sack_scoreboard_hole_tscoreboard_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_tscoreboard_get_hole (sack_scoreboard_t *sb, u32 index)
 
static sack_scoreboard_hole_tscoreboard_next_hole (sack_scoreboard_t *sb, sack_scoreboard_hole_t *hole)
 
static sack_scoreboard_hole_tscoreboard_prev_hole (sack_scoreboard_t *sb, sack_scoreboard_hole_t *hole)
 
static sack_scoreboard_hole_tscoreboard_first_hole (sack_scoreboard_t *sb)
 
static sack_scoreboard_hole_tscoreboard_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_ttcp_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...
 

Variables

format_function_t format_tcp_state
 
format_function_t format_tcp_flags
 
format_function_t format_tcp_sacks
 
format_function_t format_tcp_rcv_sacks
 
timer_expiration_handler tcp_timer_delack_handler
 
timer_expiration_handler tcp_timer_retransmit_handler
 
timer_expiration_handler tcp_timer_persist_handler
 
timer_expiration_handler tcp_timer_retransmit_syn_handler
 
tcp_main_t tcp_main
 
vlib_node_registration_t tcp4_input_node
 (constructor) VLIB_REGISTER_NODE (tcp4_input_node) More...
 
vlib_node_registration_t tcp6_input_node
 (constructor) VLIB_REGISTER_NODE (tcp6_input_node) More...
 
vlib_node_registration_t tcp4_output_node
 (constructor) VLIB_REGISTER_NODE (tcp4_output_node) More...
 
vlib_node_registration_t tcp6_output_node
 (constructor) VLIB_REGISTER_NODE (tcp6_output_node) More...
 

Macro Definition Documentation

#define foreach_tcp_buf_flag
Value:
_ (ACK) /**< Sending ACK. */ \
_ (DUPACK)

TCP buffer flags.

Sending DUPACK.

Definition at line 141 of file tcp.h.

#define foreach_tcp_connection_flag
Value:
_(SNDACK, "Send ACK") \
_(FINSNT, "FIN sent") \
_(SENT_RCV_WND0, "Sent 0 receive window") \
_(RECOVERY, "Recovery on") \
_(FAST_RECOVERY, "Fast Recovery on") \
_(FR_1_SMSS, "Sent 1 SMSS") \
_(HALF_OPEN_DONE, "Half-open completed") \
_(FINPNDG, "FIN pending")

TCP connection flags.

Definition at line 114 of file tcp.h.

#define foreach_tcp_fsm_state
Value:
_(CLOSED, "CLOSED") \
_(LISTEN, "LISTEN") \
_(SYN_SENT, "SYN_SENT") \
_(SYN_RCVD, "SYN_RCVD") \
_(ESTABLISHED, "ESTABLISHED") \
_(CLOSE_WAIT, "CLOSE_WAIT") \
_(FIN_WAIT_1, "FIN_WAIT_1") \
_(LAST_ACK, "LAST_ACK") \
_(CLOSING, "CLOSING") \
_(FIN_WAIT_2, "FIN_WAIT_2") \
_(TIME_WAIT, "TIME_WAIT")

TCP FSM state definitions as per RFC793.

Definition at line 42 of file tcp.h.

#define foreach_tcp_timer
Value:
_(RETRANSMIT, "RETRANSMIT") \
_(DELACK, "DELAYED ACK") \
_(PERSIST, "PERSIST") \
_(KEEP, "KEEP") \
_(WAITCLOSE, "WAIT CLOSE") \
_(RETRANSMIT_SYN, "RETRANSMIT SYN") \
_(ESTABLISH, "ESTABLISH")

TCP timers.

Definition at line 69 of file tcp.h.

#define seq_geq (   _s1,
  _s2 
)    ((i32)((_s1)-(_s2)) >= 0)

Definition at line 535 of file tcp.h.

#define seq_gt (   _s1,
  _s2 
)    ((i32)((_s1)-(_s2)) > 0)

Definition at line 534 of file tcp.h.

#define seq_leq (   _s1,
  _s2 
)    ((i32)((_s1)-(_s2)) <= 0)

Definition at line 533 of file tcp.h.

#define seq_lt (   _s1,
  _s2 
)    ((i32)((_s1)-(_s2)) < 0)

Definition at line 532 of file tcp.h.

#define seq_max (   _s1,
  _s2 
)    (seq_gt((_s1), (_s2)) ? (_s1) : (_s2))

Definition at line 536 of file tcp.h.

#define TCP_2MSL_TIME   300 /* 30s */

Definition at line 101 of file tcp.h.

#define TCP_ALWAYS_ACK   1

On/off delayed acks.

Definition at line 38 of file tcp.h.

#define TCP_CLEANUP_TIME   10 /* 1s Time to wait before cleanup */

Definition at line 104 of file tcp.h.

#define TCP_CLOSEWAIT_TIME   20 /* 2s */

Definition at line 102 of file tcp.h.

#define TCP_DELACK_TIME   1 /* 0.1s */

Definition at line 98 of file tcp.h.

#define TCP_DUPACK_THRESHOLD   3

Definition at line 34 of file tcp.h.

#define tcp_error (   n,
 
)    TCP_ERROR_##n,

Definition at line 349 of file tcp.h.

#define TCP_ESTABLISH_TIME   750 /* 75s */

Definition at line 99 of file tcp.h.

#define tcp_fastrecovery_1_smss_off (   tc)    ((tc)->flags &= ~TCP_CONN_FR_1_SMSS)

Definition at line 328 of file tcp.h.

#define tcp_fastrecovery_1_smss_on (   tc)    ((tc)->flags |= TCP_CONN_FR_1_SMSS)

Definition at line 327 of file tcp.h.

#define tcp_fastrecovery_off (   tc)    (tc)->flags &= ~TCP_CONN_FAST_RECOVERY

Definition at line 320 of file tcp.h.

#define tcp_fastrecovery_on (   tc)    (tc)->flags |= TCP_CONN_FAST_RECOVERY

Definition at line 319 of file tcp.h.

#define tcp_fastrecovery_sent_1_smss (   tc)    ((tc)->flags & TCP_CONN_FR_1_SMSS)

Definition at line 326 of file tcp.h.

#define TCP_FIB_RECHECK_PERIOD   1 * THZ

Recheck every 1s.

Definition at line 31 of file tcp.h.

#define tcp_in_cong_recovery (   tc)
Value:
((tc)->flags & \
(TCP_CONN_FAST_RECOVERY | TCP_CONN_RECOVERY))
u32 flags
Definition: vhost-user.h:77

Definition at line 330 of file tcp.h.

#define tcp_in_fastrecovery (   tc)    ((tc)->flags & TCP_CONN_FAST_RECOVERY)

Definition at line 323 of file tcp.h.

#define tcp_in_recovery (   tc)    ((tc)->flags & (TCP_CONN_RECOVERY))

Definition at line 324 of file tcp.h.

#define tcp_in_slowstart (   tc)    (tc->cwnd < tc->ssthresh)

Definition at line 325 of file tcp.h.

#define TCP_INVALID_SACK_HOLE_INDEX   ((u32)~0)

Definition at line 163 of file tcp.h.

#define TCP_IW_N_SEGMENTS   10

Definition at line 37 of file tcp.h.

#define TCP_MAX_OPTION_SPACE   40

Definition at line 32 of file tcp.h.

#define TCP_MAX_RX_FIFO_SIZE   4 << 20

Definition at line 35 of file tcp.h.

#define TCP_MAX_SACK_BLOCKS   15

Max number of SACK blocks stored.

Definition at line 162 of file tcp.h.

#define TCP_MIN_RX_FIFO_SIZE   4 << 10

Definition at line 36 of file tcp.h.

#define TCP_PAWS_IDLE   24 * 24 * 60 * 60 * THZ

24 days

Definition at line 30 of file tcp.h.

#define tcp_recovery_off (   tc)    (tc)->flags &= ~TCP_CONN_RECOVERY

Definition at line 322 of file tcp.h.

#define tcp_recovery_on (   tc)    (tc)->flags |= TCP_CONN_RECOVERY

Definition at line 321 of file tcp.h.

#define TCP_RTO_INIT   1 * THZ /* Initial retransmit timer */

Definition at line 111 of file tcp.h.

#define TCP_RTO_MAX   60 * THZ /* Min max RTO (60s) as per RFC6298 */

Definition at line 107 of file tcp.h.

#define TCP_RTO_MIN   0.2 * THZ /* Min RTO (200ms) - lower than standard */

Definition at line 108 of file tcp.h.

#define TCP_RTO_SYN_RETRIES   3 /* SYN retries without doubling RTO */

Definition at line 110 of file tcp.h.

#define TCP_RTT_MAX   30 * THZ /* 30s (probably too much) */

Definition at line 109 of file tcp.h.

#define TCP_SCOREBOARD_TRACE   (0)

Definition at line 161 of file tcp.h.

#define tcp_scoreboard_trace_add (   _tc,
  _ack 
)

Definition at line 226 of file tcp.h.

#define TCP_SYN_RCVD_TIME   600 /* 60s */

Definition at line 100 of file tcp.h.

#define TCP_TICK   0.001

TCP tick period (s)

Definition at line 27 of file tcp.h.

#define TCP_TIMER_HANDLE_INVALID   ((u32) ~0)

Definition at line 93 of file tcp.h.

#define TCP_TIMER_PERSIST_MIN   2 /* 0.2s */

Definition at line 105 of file tcp.h.

#define TCP_TIMEWAIT_TIME   20 /* 2s */

Definition at line 103 of file tcp.h.

#define TCP_TO_TIMER_TICK
Value:
TCP_TICK*10 /* Period for converting from TCP
* ticks to timer units */
#define TCP_TICK
TCP tick period (s)
Definition: tcp.h:27

Definition at line 96 of file tcp.h.

#define TCP_TSTAMP_RESOLUTION   TCP_TICK

Time stamp resolution.

Definition at line 29 of file tcp.h.

#define TCP_USE_SACKS   1

Disable only for testing.

Definition at line 39 of file tcp.h.

#define tcp_validate_txf_size (   _tc,
  _a 
)
Value:
ASSERT(_tc->state != TCP_STATE_ESTABLISHED \
|| stream_session_tx_fifo_max_dequeue (&_tc->connection) >= _a)
u32 stream_session_tx_fifo_max_dequeue(transport_connection_t *tc)
Definition: session.c:290
#define ASSERT(truth)

Definition at line 797 of file tcp.h.

#define THZ   (u32) (1/TCP_TICK)

TCP tick frequency.

Definition at line 28 of file tcp.h.

#define timestamp_leq (   _t1,
  _t2 
)    ((i32)((_t1)-(_t2)) <= 0)

Definition at line 540 of file tcp.h.

#define timestamp_lt (   _t1,
  _t2 
)    ((i32)((_t1)-(_t2)) < 0)

Definition at line 539 of file tcp.h.

Typedef Documentation

typedef struct _sack_scoreboard_hole sack_scoreboard_hole_t
typedef struct _sack_scoreboard sack_scoreboard_t
typedef struct _scoreboard_trace_elt scoreboard_trace_elt_t
typedef enum _tcp_cc_ack_t tcp_cc_ack_t
typedef struct _tcp_cc_algorithm tcp_cc_algorithm_t

Definition at line 234 of file tcp.h.

typedef enum _tcp_cc_algorithm_type tcp_cc_algorithm_type_e
typedef enum _tcp_connection_flag_bits tcp_connection_flag_bits_e
typedef enum _tcp_connection_flag tcp_connection_flags_e
typedef struct _tcp_connection tcp_connection_t
typedef enum _tcp_error tcp_error_t
typedef struct _tcp_lookup_dispatch tcp_lookup_dispatch_t
typedef struct _tcp_main tcp_main_t
typedef enum _tcp_state tcp_state_t
typedef enum _tcp_timers tcp_timers_e
typedef void( timer_expiration_handler) (u32 index)

Definition at line 86 of file tcp.h.

Enumeration Type Documentation

anonymous enum
Enumerator
TCP_N_BUF_BITS 

Definition at line 146 of file tcp.h.

anonymous enum
Enumerator
foreach_tcp_buf_flag 

Definition at line 154 of file tcp.h.

enum tcp_af_t
Enumerator
TCP_IP4 
TCP_IP6 
TCP_N_AF 

Definition at line 340 of file tcp.h.

Function Documentation

u8* format_tcp_connection ( u8 s,
va_list *  args 
)

Definition at line 865 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8* format_tcp_connection_id ( u8 s,
va_list *  args 
)

Definition at line 841 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8* format_tcp_scoreboard ( u8 s,
va_list *  args 
)

Definition at line 976 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void scoreboard_clear ( sack_scoreboard_t sb)
inlinestatic

Definition at line 856 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static sack_scoreboard_hole_t* scoreboard_first_hole ( sack_scoreboard_t sb)
inlinestatic

Definition at line 840 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static sack_scoreboard_hole_t* scoreboard_get_hole ( sack_scoreboard_t sb,
u32  index 
)
inlinestatic

Definition at line 816 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 scoreboard_hole_bytes ( sack_scoreboard_hole_t hole)
inlinestatic

Definition at line 876 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 scoreboard_hole_index ( sack_scoreboard_t sb,
sack_scoreboard_hole_t hole 
)
inlinestatic

Definition at line 882 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void scoreboard_init ( sack_scoreboard_t sb)
inlinestatic

Definition at line 889 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void scoreboard_init_high_rxt ( sack_scoreboard_t sb,
u32  seq 
)

Definition at line 693 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

sack_scoreboard_hole_t* scoreboard_insert_hole ( sack_scoreboard_t sb,
u32  prev_index,
u32  start,
u32  end 
)

Definition at line 557 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static sack_scoreboard_hole_t* scoreboard_last_hole ( sack_scoreboard_t sb)
inlinestatic

Definition at line 848 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static sack_scoreboard_hole_t* scoreboard_next_hole ( sack_scoreboard_t sb,
sack_scoreboard_hole_t hole 
)
inlinestatic

Definition at line 824 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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.

Follows logic proposed in RFC6675 Sec. 4, NextSeg()

Definition at line 638 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static sack_scoreboard_hole_t* scoreboard_prev_hole ( sack_scoreboard_t sb,
sack_scoreboard_hole_t hole 
)
inlinestatic

Definition at line 832 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void scoreboard_remove_hole ( sack_scoreboard_t sb,
sack_scoreboard_hole_t hole 
)

Definition at line 522 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void scoreboard_update_lost ( tcp_connection_t tc,
sack_scoreboard_t sb 
)
void tcp_api_reference ( void  )

Definition at line 109 of file tcp_api.c.

+ Here is the caller graph for this function:

static u32 tcp_available_output_snd_space ( const tcp_connection_t tc)
inlinestatic

Definition at line 606 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 tcp_available_snd_space ( const tcp_connection_t tc)
inlinestatic

Estimate of how many bytes we can still push into the network.

Definition at line 621 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 tcp_available_snd_wnd ( const tcp_connection_t tc)
inlinestatic

Definition at line 600 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static tcp_header_t* tcp_buffer_hdr ( vlib_buffer_t b)
inlinestatic

Definition at line 439 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 tcp_bytes_out ( const tcp_connection_t tc)
inlinestatic

Our estimate of the number of bytes that have left the network.

Definition at line 546 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static tcp_cc_algorithm_t* tcp_cc_algo_get ( tcp_cc_algorithm_type_e  type)
inlinestatic

Definition at line 909 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_cc_algo_register ( tcp_cc_algorithm_type_e  type,
const tcp_cc_algorithm_t vft 
)
inlinestatic

Definition at line 899 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_cc_fastrecovery_exit ( tcp_connection_t tc)

Definition at line 946 of file tcp_input.c.

+ Here is the caller graph for this function:

void tcp_cc_init ( tcp_connection_t tc)

Definition at line 1200 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_cc_init_congestion ( tcp_connection_t tc)

Definition at line 925 of file tcp_input.c.

+ Here is the caller graph for this function:

int tcp_cc_recover ( tcp_connection_t tc)

Definition at line 981 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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.

Parameters
vmvlib_main_t pointer
startfirst ipv4 address in the source address range
endlast ipv4 address in the source address range
table_idVRF / table ID, 0 for the default FIB
Returns
0 if all OK, else an error indication from api_errno.h

Definition at line 1478 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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.

Parameters
vmvlib_main_t pointer
startfirst ipv6 address in the source address range
endlast ipv6 address in the source address range
table_idVRF / table ID, 0 for the default FIB
Returns
0 if all OK, else an error indication from api_errno.h

Definition at line 1570 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_cong_recovery_off ( tcp_connection_t tc)
inlinestatic

Definition at line 334 of file tcp.h.

void tcp_connection_cleanup ( tcp_connection_t tc)

Cleans up connection state.

No notifications.

Definition at line 176 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_connection_close ( tcp_connection_t tc)

Begin connection closing procedure.

If at the end the connection is not in CLOSED state, it is not removed. Instead, we rely on on TCP to advance through state machine to either 1) LAST_ACK (passive close) whereby when the last ACK is received tcp_connection_del is called. This notifies session of the delete and calls cleanup. 2) TIME_WAIT (active close) whereby after 2MSL the 2MSL timer triggers and cleanup is called.

N.B. Half-close connections are not supported

Definition at line 295 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_connection_del ( tcp_connection_t tc)

Connection removal.

This should be called only once connection enters CLOSED state. Note that it notifies the session of the removal event, so if the goal is to just remove the connection, call tcp_connection_cleanup instead.

Definition at line 222 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_connection_force_ack ( tcp_connection_t tc,
vlib_buffer_t b 
)
inlinestatic

Definition at line 692 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static tcp_connection_t* tcp_connection_get ( u32  conn_index,
u32  thread_index 
)
inlinestatic

Definition at line 451 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static tcp_connection_t* tcp_connection_get_if_valid ( u32  conn_index,
u32  thread_index 
)
inlinestatic

Definition at line 460 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_connection_init_vars ( tcp_connection_t tc)

Initialize tcp connection variables.

Should be called after having received a msg from the peer, i.e., a SYN or a SYNACK, such that connection options have already been exchanged.

Definition at line 593 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

tcp_connection_t* tcp_connection_new ( u8  thread_index)

Definition at line 230 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_connection_reset ( tcp_connection_t tc)

Notify session that connection has been reset.

Switch state to closed and wait for session to call cleanup.

Definition at line 247 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_connection_timers_init ( tcp_connection_t tc)

Initialize all connection timers as invalid.

Definition at line 442 of file tcp.c.

+ Here is the caller graph for this function:

void tcp_connection_timers_reset ( tcp_connection_t tc)

Stop all connection timers.

Definition at line 459 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 tcp_end_seq ( tcp_header_t th,
u32  len 
)
inlinestatic

Definition at line 526 of file tcp.h.

+ Here is the caller graph for this function:

void tcp_fast_retransmit ( tcp_connection_t tc)

Do fast retransmit.

Definition at line 1721 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_fast_retransmit_no_sack ( tcp_connection_t tc)

Fast retransmit without SACK info.

Definition at line 1684 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_fast_retransmit_sack ( tcp_connection_t tc)

Do fast retransmit with SACKs.

Definition at line 1607 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 tcp_flight_size ( const tcp_connection_t tc)
inlinestatic

Our estimate of the number of bytes in flight (pipe size)

Definition at line 558 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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.

Definition at line 1004 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_flush_frames_to_output ( u8  thread_index)

Flush v4 and v6 tcp and ip-lookup tx frames for thread index.

Definition at line 1037 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static tcp_connection_t* tcp_get_connection_from_transport ( transport_connection_t tconn)
inlinestatic

Definition at line 470 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int tcp_half_open_connection_cleanup ( tcp_connection_t tc)

Try to cleanup half-open connection.

If called from a thread that doesn't own tc, the call won't have any effect.

Parameters
tc- connection to be cleaned up
Returns
non-zero if cleanup failed.

Definition at line 147 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static tcp_connection_t* tcp_half_open_connection_get ( u32  conn_index)
inlinestatic

Definition at line 501 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_init_mss ( tcp_connection_t tc)

Definition at line 415 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_init_snd_vars ( tcp_connection_t tc)

Initialize connection send variables.

Definition at line 569 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 tcp_initial_cwnd ( const tcp_connection_t tc)
inlinestatic

Initial cwnd as per RFC5681.

Definition at line 583 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u8 tcp_is_lost_fin ( tcp_connection_t tc)
inlinestatic

Definition at line 633 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static tcp_connection_t* tcp_listener_get ( u32  tli)
inlinestatic

Definition at line 495 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

fib_node_index_t tcp_lookup_rmt_in_fib ( tcp_connection_t tc)

+ Here is the caller graph for this function:

static u32 tcp_loss_wnd ( const tcp_connection_t tc)
inlinestatic

Definition at line 594 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_make_ack ( tcp_connection_t ts,
vlib_buffer_t b 
)

Convert buffer to ACK.

Definition at line 541 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_make_fin ( tcp_connection_t tc,
vlib_buffer_t b 
)

Convert buffer to FIN-ACK.

Definition at line 556 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_make_synack ( tcp_connection_t ts,
vlib_buffer_t b 
)

Convert buffer to SYN-ACK.

Definition at line 602 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_persist_timer_reset ( tcp_connection_t tc)
inlinestatic

Definition at line 772 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_persist_timer_set ( tcp_connection_t tc)
inlinestatic

Definition at line 755 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_persist_timer_update ( tcp_connection_t tc)
inlinestatic

Definition at line 764 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u32 tcp_prepare_retransmit_segment ( tcp_connection_t tc,
u32  offset,
u32  max_deq_bytes,
vlib_buffer_t **  b 
)

Build a retransmit segment.

Returns
the number of bytes in the segment or 0 if there's nothing to retransmit

Definition at line 1193 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_punt_unknown ( vlib_main_t vm,
u8  is_ip4,
u8  is_add 
)

Definition at line 1410 of file tcp.c.

+ Here is the caller graph for this function:

u32 tcp_push_header ( transport_connection_t tconn,
vlib_buffer_t b 
)

Definition at line 1955 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_rcv_sacks ( tcp_connection_t tc,
u32  ack 
)

Definition at line 720 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

i32 tcp_rcv_wnd_available ( tcp_connection_t tc)

Definition at line 1120 of file tcp.c.

+ Here is the caller graph for this function:

void tcp_retransmit_first_unacked ( tcp_connection_t tc)

Retransmit first unacked segment.

Definition at line 1584 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_retransmit_timer_force_update ( tcp_connection_t tc)
inlinestatic

Definition at line 748 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_retransmit_timer_reset ( tcp_connection_t tc)
inlinestatic

Definition at line 742 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_retransmit_timer_set ( tcp_connection_t tc)
inlinestatic

Definition at line 734 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_retransmit_timer_update ( tcp_connection_t tc)
inlinestatic

Definition at line 778 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8* tcp_scoreboard_replay ( u8 s,
tcp_connection_t tc,
u8  verbose 
)

Definition at line 1794 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_send_fin ( tcp_connection_t tc)

Send FIN.

Definition at line 1050 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_send_reset ( tcp_connection_t tc)

Build and set reset packet for connection.

Definition at line 896 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_send_reset_w_pkt ( tcp_connection_t tc,
vlib_buffer_t pkt,
u8  is_ip4 
)

Send reset without reusing existing buffer.

It extracts connection info out of original packet

Definition at line 821 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_send_syn ( tcp_connection_t tc)

Send SYN.

Builds a SYN packet for a half-open connection and sends it to ipx_lookup. The packet is not forwarded through tcpx_output to avoid doing lookups in the half_open pool.

Definition at line 973 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 tcp_set_time_now ( u32  thread_index)
inlinestatic

Definition at line 664 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u32 tcp_snd_space ( tcp_connection_t tc)

Compute tx window session is allowed to fill.

Takes into account available send space, snd_mss and the congestion state of the connection. If possible, the value returned is a multiple of snd_mss.

Parameters
tctcp connection
Returns
number of bytes session is allowed to write

Definition at line 1063 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 tcp_time_now ( void  )
inlinestatic

Definition at line 658 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u8 tcp_timer_is_active ( tcp_connection_t tc,
tcp_timers_e  timer 
)
inlinestatic

Definition at line 792 of file tcp.h.

+ Here is the caller graph for this function:

static void tcp_timer_reset ( tcp_connection_t tc,
u8  timer_id 
)
inlinestatic

Definition at line 710 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_timer_set ( tcp_connection_t tc,
u8  timer_id,
u32  interval 
)
inlinestatic

Definition at line 700 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_timer_update ( tcp_connection_t tc,
u8  timer_id,
u32  interval 
)
inlinestatic

Definition at line 722 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_update_rcv_wnd ( tcp_connection_t tc)

Definition at line 152 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tcp_update_rto ( tcp_connection_t tc)

Definition at line 415 of file tcp_input.c.

+ Here is the caller graph for this function:

void tcp_update_sack_list ( tcp_connection_t tc,
u32  start,
u32  end 
)

Build SACK list as per RFC2018.

Makes sure the first block contains the segment that generated the current ACK and the following ones are the ones most recently reported in SACK blocks.

Parameters
tcTCP connection for which the SACK list is updated
startStart sequence number of the newest SACK block
endEnd sequence of the newest SACK block

Definition at line 1323 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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.

Definition at line 402 of file tcp_output.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_update_time ( f64  now,
u32  thread_index 
)
inlinestatic

Definition at line 672 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 
)
inlinestatic

Push TCP header to buffer.

Parameters
b- buffer to write the header to
sp_net- source port net order
dp_net- destination port net order
seq- sequence number host order
ack- ack number host order
tcp_hdr_opts_len- header and options length in bytes
flags- header flags
wnd- window size
Returns
- pointer to start of TCP header

Definition at line 968 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 
)
inlinestatic

Push TCP header to buffer.

Parameters
vm- vlib_main
b- buffer to write the header to
sp_net- source port net order
dp_net- destination port net order
seq- sequence number net order
ack- ack number net order
tcp_hdr_opts_len- header and options length in bytes
flags- header flags
wnd- window size
Returns
- pointer to start of TCP header

Definition at line 933 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static tcp_main_t* vnet_get_tcp_main ( )
inlinestatic

Definition at line 433 of file tcp.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* vnet_tcp_enable_disable ( vlib_main_t vm,
u8  is_en 
)

Definition at line 1392 of file tcp.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Variable Documentation

format_function_t format_tcp_flags

Definition at line 64 of file tcp.h.

format_function_t format_tcp_rcv_sacks

Definition at line 66 of file tcp.h.

format_function_t format_tcp_sacks

Definition at line 65 of file tcp.h.

format_function_t format_tcp_state

Definition at line 63 of file tcp.h.

vlib_node_registration_t tcp4_input_node
Initial value:
=
{
.function = tcp4_input,
.name = "tcp4-input",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_INPUT_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
.format_buffer = format_tcp_header,
.format_trace = format_tcp_rx_trace,
}
u8 * format_tcp_rx_trace(u8 *s, va_list *args)
Definition: tcp_input.c:1626
#define foreach_tcp4_input_next
Definition: tcp_input.c:2881
format_function_t format_tcp_header
Definition: format.h:102
unsigned int u32
Definition: types.h:88
static uword tcp4_input(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_input.c:3055
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp4_input_node)

Definition at line 3069 of file tcp_input.c.

vlib_node_registration_t tcp4_output_node
Initial value:
=
{
.function = tcp4_output,.name = "tcp4-output",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_OUTPUT_N_NEXT,
.next_nodes = {
#define _(s,n)
},
.format_buffer = format_tcp_header,
.format_trace = format_tcp_tx_trace,
}
u8 * format_tcp_tx_trace(u8 *s, va_list *args)
Definition: tcp_output.c:53
#define foreach_tcp4_output_next
Definition: tcp_output.c:30
format_function_t format_tcp_header
Definition: format.h:102
unsigned int u32
Definition: types.h:88
static uword tcp4_output(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_output.c:1898
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp4_output_node)

Definition at line 1912 of file tcp_output.c.

vlib_node_registration_t tcp6_input_node
Initial value:
=
{
.function = tcp6_input,
.name = "tcp6-input",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_INPUT_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
.format_buffer = format_tcp_header,
.format_trace = format_tcp_rx_trace,
}
static uword tcp6_input(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_input.c:3062
u8 * format_tcp_rx_trace(u8 *s, va_list *args)
Definition: tcp_input.c:1626
#define foreach_tcp6_input_next
Definition: tcp_input.c:2890
format_function_t format_tcp_header
Definition: format.h:102
unsigned int u32
Definition: types.h:88
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp6_input_node)

Definition at line 3092 of file tcp_input.c.

vlib_node_registration_t tcp6_output_node
Initial value:
=
{
.function = tcp6_output,
.name = "tcp6-output",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_OUTPUT_N_NEXT,
.next_nodes = {
#define _(s,n)
},
.format_buffer = format_tcp_header,
.format_trace = format_tcp_tx_trace,
}
u8 * format_tcp_tx_trace(u8 *s, va_list *args)
Definition: tcp_output.c:53
#define foreach_tcp6_output_next
Definition: tcp_output.c:34
format_function_t format_tcp_header
Definition: format.h:102
unsigned int u32
Definition: types.h:88
static uword tcp6_output(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_output.c:1905
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp6_output_node)

Definition at line 1933 of file tcp_output.c.

tcp_main_t tcp_main

Definition at line 29 of file tcp.c.

timer_expiration_handler tcp_timer_delack_handler
timer_expiration_handler tcp_timer_persist_handler
timer_expiration_handler tcp_timer_retransmit_handler
timer_expiration_handler tcp_timer_retransmit_syn_handler