FD.io VPP
v17.04.2-2-ga8f93f8
Vector Packet Processing
|
Go to the source code of this file.
Macros | |
#define | TCP_TICK 10e-3 |
TCP tick period (s) More... | |
#define | THZ 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_MAX_OPTION_SPACE 40 |
#define | TCP_DUPACK_THRESHOLD 3 |
#define | TCP_MAX_RX_FIFO_SIZE 2 << 20 |
#define | TCP_IW_N_SEGMENTS 10 |
#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_2MSL_TIME 300 /* 30s */ |
#define | TCP_CLOSEWAIT_TIME 1 /* 0.1s */ |
#define | TCP_CLEANUP_TIME 5 /* 0.5s Time to wait before cleanup */ |
#define | TCP_RTO_MAX 60 * THZ /* Min max RTO (60s) as per RFC6298 */ |
#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_MAX_SACK_BLOCKS 5 |
Max number of SACK blocks stored. More... | |
#define | TCP_INVALID_SACK_HOLE_INDEX ((u32)~0) |
#define | tcp_fastrecovery_on(tc) (tc)->flags |= TCP_CONN_FAST_RECOVERY |
#define | tcp_fastrecovery_off(tc) (tc)->flags &= ~TCP_CONN_FAST_RECOVERY |
#define | tcp_in_fastrecovery(tc) ((tc)->flags & TCP_CONN_FAST_RECOVERY) |
#define | tcp_in_recovery(tc) ((tc)->flags & (TCP_CONN_FAST_RECOVERY | TCP_CONN_RECOVERY)) |
#define | tcp_recovery_off(tc) ((tc)->flags &= ~(TCP_CONN_FAST_RECOVERY | TCP_CONN_RECOVERY)) |
#define | tcp_in_slowstart(tc) (tc->cwnd < tc->ssthresh) |
#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 | timestamp_lt(_t1, _t2) ((i32)((_t1)-(_t2)) < 0) |
#define | timestamp_leq(_t1, _t2) ((i32)((_t1)-(_t2)) <= 0) |
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 _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 } |
Variables | |
format_function_t | format_tcp_state |
timer_expiration_handler | tcp_timer_delack_handler |
timer_expiration_handler | tcp_timer_retransmit_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... | |
#define foreach_tcp_buf_flag |
#define foreach_tcp_connection_flag |
#define foreach_tcp_fsm_state |
TCP FSM state definitions as per RFC793.
#define foreach_tcp_timer |
#define TCP_CLEANUP_TIME 5 /* 0.5s Time to wait before cleanup */ |
#define tcp_fastrecovery_off | ( | tc | ) | (tc)->flags &= ~TCP_CONN_FAST_RECOVERY |
#define tcp_fastrecovery_on | ( | tc | ) | (tc)->flags |= TCP_CONN_FAST_RECOVERY |
#define tcp_in_fastrecovery | ( | tc | ) | ((tc)->flags & TCP_CONN_FAST_RECOVERY) |
#define tcp_in_recovery | ( | tc | ) | ((tc)->flags & (TCP_CONN_FAST_RECOVERY | TCP_CONN_RECOVERY)) |
#define TCP_MAX_SACK_BLOCKS 5 |
#define tcp_recovery_off | ( | tc | ) | ((tc)->flags &= ~(TCP_CONN_FAST_RECOVERY | TCP_CONN_RECOVERY)) |
#define TCP_RTO_MAX 60 * THZ /* Min max RTO (60s) as per RFC6298 */ |
#define TCP_RTO_SYN_RETRIES 3 /* SYN retries without doubling RTO */ |
#define TCP_TO_TIMER_TICK |
typedef struct _sack_scoreboard_hole sack_scoreboard_hole_t |
typedef struct _sack_scoreboard sack_scoreboard_t |
typedef enum _tcp_cc_ack_t tcp_cc_ack_t |
typedef struct _tcp_cc_algorithm tcp_cc_algorithm_t |
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 |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
void scoreboard_remove_hole | ( | sack_scoreboard_t * | sb, |
sack_scoreboard_hole_t * | hole | ||
) |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
void tcp_cc_init | ( | tcp_connection_t * | tc | ) |
Definition at line 679 of file tcp_input.c.
void tcp_connection_cleanup | ( | tcp_connection_t * | tc | ) |
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 170 of file tcp.c.
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 135 of file tcp.c.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
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 327 of file tcp.c.
void tcp_connection_reset | ( | tcp_connection_t * | tc | ) |
void tcp_connection_timers_init | ( | tcp_connection_t * | tc | ) |
void tcp_connection_timers_reset | ( | tcp_connection_t * | tc | ) |
|
inlinestatic |
void tcp_fast_retransmit | ( | tcp_connection_t * | tc | ) |
Definition at line 1098 of file tcp_output.c.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
void tcp_make_ack | ( | tcp_connection_t * | ts, |
vlib_buffer_t * | b | ||
) |
Convert buffer to ACK.
Definition at line 433 of file tcp_output.c.
void tcp_make_fin | ( | tcp_connection_t * | tc, |
vlib_buffer_t * | b | ||
) |
Convert buffer to FIN-ACK.
Definition at line 447 of file tcp_output.c.
void tcp_make_synack | ( | tcp_connection_t * | ts, |
vlib_buffer_t * | b | ||
) |
Convert buffer to SYN-ACK.
Definition at line 468 of file tcp_output.c.
u32 tcp_prepare_retransmit_segment | ( | tcp_connection_t * | tc, |
vlib_buffer_t * | b, | ||
u32 | max_bytes | ||
) |
Build a retransmit segment.
Definition at line 922 of file tcp_output.c.
u32 tcp_push_header | ( | transport_connection_t * | tconn, |
vlib_buffer_t * | b | ||
) |
Definition at line 1336 of file tcp_output.c.
void tcp_retransmit_first_unacked | ( | tcp_connection_t * | tc | ) |
Retansmit first unacked segment.
Definition at line 1077 of file tcp_output.c.
|
inlinestatic |
void tcp_send_fin | ( | tcp_connection_t * | tc | ) |
Send FIN.
Definition at line 811 of file tcp_output.c.
void tcp_send_reset | ( | vlib_buffer_t * | pkt, |
u8 | is_ip4 | ||
) |
Send reset without reusing existing buffer.
Definition at line 629 of file tcp_output.c.
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 734 of file tcp_output.c.
void tcp_set_snd_mss | ( | tcp_connection_t * | tc | ) |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Definition at line 2265 of file tcp_input.c.
|
inlinestatic |
Push TCP header to buffer.
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 |
Definition at line 622 of file tcp.h.
|
inlinestatic |
Push TCP header to buffer.
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 |
Definition at line 587 of file tcp.h.
|
inlinestatic |
clib_error_t* vnet_tcp_enable_disable | ( | vlib_main_t * | vm, |
u8 | is_en | ||
) |
format_function_t format_tcp_state |
vlib_node_registration_t tcp4_input_node |
(constructor) VLIB_REGISTER_NODE (tcp4_input_node)
Definition at line 2220 of file tcp_input.c.
vlib_node_registration_t tcp4_output_node |
(constructor) VLIB_REGISTER_NODE (tcp4_output_node)
Definition at line 1293 of file tcp_output.c.
vlib_node_registration_t tcp6_input_node |
(constructor) VLIB_REGISTER_NODE (tcp6_input_node)
Definition at line 2243 of file tcp_input.c.
vlib_node_registration_t tcp6_output_node |
(constructor) VLIB_REGISTER_NODE (tcp6_output_node)
Definition at line 1314 of file tcp_output.c.
tcp_main_t tcp_main |
timer_expiration_handler tcp_timer_delack_handler |
timer_expiration_handler tcp_timer_retransmit_handler |
timer_expiration_handler tcp_timer_retransmit_syn_handler |