FD.io VPP  v17.04-9-g99c0734
Vector Packet Processing
tcp_input.c File Reference
+ Include dependency graph for tcp_input.c:

Go to the source code of this file.

Data Structures

struct  tcp_rx_trace_t
 

Macros

#define tcp_error(n, s)   s,
 
#define foreach_tcp_state_next
 
#define tcp_next_output(is_ip4)
 
#define foreach_tcp4_input_next
 
#define foreach_tcp6_input_next
 
#define filter_flags   (TCP_FLAG_SYN|TCP_FLAG_ACK|TCP_FLAG_RST|TCP_FLAG_FIN)
 

Typedefs

typedef enum _tcp_established_next tcp_established_next_t
 
typedef enum _tcp_rcv_process_next tcp_rcv_process_next_t
 
typedef enum _tcp_syn_sent_next tcp_syn_sent_next_t
 
typedef enum _tcp_listen_next tcp_listen_next_t
 
typedef enum _tcp_state_next tcp_state_next_t
 
typedef enum _tcp_input_next tcp_input_next_t
 

Functions

static u8 tcp_segment_in_rcv_wnd (tcp_connection_t *tc, u32 seq, u32 end_seq)
 Validate segment sequence number. More...
 
void tcp_options_parse (tcp_header_t *th, tcp_options_t *to)
 
static int tcp_segment_check_paws (tcp_connection_t *tc)
 
static int tcp_segment_validate (vlib_main_t *vm, tcp_connection_t *tc0, vlib_buffer_t *b0, tcp_header_t *th0, u32 *next0)
 Validate incoming segment as per RFC793 p. More...
 
static int tcp_rcv_ack_is_acceptable (tcp_connection_t *tc0, vlib_buffer_t *tb0)
 
static void tcp_estimate_rtt (tcp_connection_t *tc, u32 mrtt)
 Compute smoothed RTT as per VJ's '88 SIGCOMM and RFC6298. More...
 
static int tcp_update_rtt (tcp_connection_t *tc, u32 ack)
 Update RTT estimate and RTO timer. More...
 
static void tcp_dequeue_acked (tcp_connection_t *tc, u32 ack)
 Dequeue bytes that have been acked and while at it update RTT estimates. More...
 
static u8 tcp_ack_is_dupack (tcp_connection_t *tc, vlib_buffer_t *b, u32 new_snd_wnd)
 Check if dupack as per RFC5681 Sec. More...
 
void scoreboard_remove_hole (sack_scoreboard_t *sb, sack_scoreboard_hole_t *hole)
 
sack_scoreboard_hole_tscoreboard_insert_hole (sack_scoreboard_t *sb, sack_scoreboard_hole_t *prev, u32 start, u32 end)
 
static void tcp_rcv_sacks (tcp_connection_t *tc, u32 ack)
 
static void tcp_update_snd_wnd (tcp_connection_t *tc, u32 seq, u32 ack, u32 snd_wnd)
 Update snd_wnd. More...
 
static void tcp_cc_congestion (tcp_connection_t *tc)
 
static void tcp_cc_recover (tcp_connection_t *tc)
 
static void tcp_cc_rcv_ack (tcp_connection_t *tc)
 
static void tcp_cc_rcv_dupack (tcp_connection_t *tc, u32 ack)
 
void tcp_cc_init (tcp_connection_t *tc)
 
static int tcp_rcv_ack (tcp_connection_t *tc, vlib_buffer_t *b, tcp_header_t *th, u32 *next, u32 *error)
 
static void tcp_update_sack_list (tcp_connection_t *tc, u32 start, u32 end)
 Build SACK list as per RFC2018. More...
 
static u32 tcp_session_enqueue_data (tcp_connection_t *tc, vlib_buffer_t *b, u16 data_len)
 Enqueue data for delivery to application. More...
 
static u32 tcp_session_enqueue_ooo (tcp_connection_t *tc, vlib_buffer_t *b, u16 data_len)
 Enqueue out-of-order data. More...
 
static int tcp_can_delack (tcp_connection_t *tc)
 Check if ACK could be delayed. More...
 
static int tcp_segment_rcv (tcp_main_t *tm, tcp_connection_t *tc, vlib_buffer_t *b, u16 n_data_bytes, u32 *next0)
 
void delack_timers_init (tcp_main_t *tm, u32 thread_index)
 
static uword tcp46_established_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, int is_ip4)
 
static uword tcp4_established (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
static uword tcp6_established (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
 VLIB_NODE_FUNCTION_MULTIARCH (tcp4_established_node, tcp4_established)
 
 VLIB_NODE_FUNCTION_MULTIARCH (tcp6_established_node, tcp6_established)
 
static uword tcp46_syn_sent_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, int is_ip4)
 
static uword tcp4_syn_sent (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
static uword tcp6_syn_sent_rcv (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
 VLIB_NODE_FUNCTION_MULTIARCH (tcp4_syn_sent_node, tcp4_syn_sent)
 
 VLIB_NODE_FUNCTION_MULTIARCH (tcp6_syn_sent_node, tcp6_syn_sent_rcv)
 
static uword tcp46_rcv_process_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, int is_ip4)
 Handles reception for all states except LISTEN, SYN-SENT and ESTABLISHED as per RFC793 p. More...
 
static uword tcp4_rcv_process (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
static uword tcp6_rcv_process (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
 VLIB_NODE_FUNCTION_MULTIARCH (tcp4_rcv_process_node, tcp4_rcv_process)
 
 VLIB_NODE_FUNCTION_MULTIARCH (tcp6_rcv_process_node, tcp6_rcv_process)
 
static uword tcp46_listen_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, int is_ip4)
 LISTEN state processing as per RFC 793 p. More...
 
static uword tcp4_listen (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
static uword tcp6_listen (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
 VLIB_NODE_FUNCTION_MULTIARCH (tcp4_listen_node, tcp4_listen)
 
 VLIB_NODE_FUNCTION_MULTIARCH (tcp6_listen_node, tcp6_listen)
 
u8format_tcp_rx_trace (u8 *s, va_list *args)
 
static uword tcp46_input_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, int is_ip4)
 
static uword tcp4_input (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
static uword tcp6_input (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
 VLIB_NODE_FUNCTION_MULTIARCH (tcp4_input_node, tcp4_input)
 
 VLIB_NODE_FUNCTION_MULTIARCH (tcp6_input_node, tcp6_input)
 
void tcp_update_time (f64 now, u32 thread_index)
 
static void tcp_dispatch_table_init (tcp_main_t *tm)
 
clib_error_ttcp_input_init (vlib_main_t *vm)
 

Variables

static char * tcp_error_strings []
 
vlib_node_registration_t tcp4_established_node
 (constructor) VLIB_REGISTER_NODE (tcp4_established_node) More...
 
vlib_node_registration_t tcp6_established_node
 (constructor) VLIB_REGISTER_NODE (tcp6_established_node) More...
 
vlib_node_registration_t tcp4_syn_sent_node
 (constructor) VLIB_REGISTER_NODE (tcp4_syn_sent_node) More...
 
vlib_node_registration_t tcp6_syn_sent_node
 (constructor) VLIB_REGISTER_NODE (tcp6_syn_sent_node) More...
 
vlib_node_registration_t tcp4_rcv_process_node
 (constructor) VLIB_REGISTER_NODE (tcp4_rcv_process_node) More...
 
vlib_node_registration_t tcp6_rcv_process_node
 (constructor) VLIB_REGISTER_NODE (tcp6_rcv_process_node) More...
 
vlib_node_registration_t tcp4_listen_node
 (constructor) VLIB_REGISTER_NODE (tcp4_listen_node) More...
 
vlib_node_registration_t tcp6_listen_node
 (constructor) VLIB_REGISTER_NODE (tcp6_listen_node) More...
 
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...
 

Macro Definition Documentation

#define filter_flags   (TCP_FLAG_SYN|TCP_FLAG_ACK|TCP_FLAG_RST|TCP_FLAG_FIN)

Definition at line 2090 of file tcp_input.c.

#define foreach_tcp4_input_next
Value:
_ (DROP, "error-drop") \
_ (LISTEN, "tcp4-listen") \
_ (RCV_PROCESS, "tcp4-rcv-process") \
_ (SYN_SENT, "tcp4-syn-sent") \
_ (ESTABLISHED, "tcp4-established") \
_ (RESET, "tcp4-reset")
DROP
Definition: error.def:41

Definition at line 2053 of file tcp_input.c.

#define foreach_tcp6_input_next
Value:
_ (DROP, "error-drop") \
_ (LISTEN, "tcp6-listen") \
_ (RCV_PROCESS, "tcp6-rcv-process") \
_ (SYN_SENT, "tcp6-syn-sent") \
_ (ESTABLISHED, "tcp6-established") \
_ (RESET, "tcp6-reset")
DROP
Definition: error.def:41

Definition at line 2061 of file tcp_input.c.

#define foreach_tcp_state_next
Value:
_ (DROP, "error-drop") \
_ (TCP4_OUTPUT, "tcp4-output") \
_ (TCP6_OUTPUT, "tcp6-output")
DROP
Definition: error.def:41

Definition at line 29 of file tcp_input.c.

#define tcp_error (   n,
 
)    s,
#define tcp_next_output (   is_ip4)
Value:
(is_ip4 ? TCP_NEXT_TCP4_OUTPUT \
: TCP_NEXT_TCP6_OUTPUT)

Definition at line 75 of file tcp_input.c.

Typedef Documentation

typedef enum _tcp_established_next tcp_established_next_t
typedef enum _tcp_input_next tcp_input_next_t
typedef enum _tcp_listen_next tcp_listen_next_t
typedef enum _tcp_rcv_process_next tcp_rcv_process_next_t
typedef enum _tcp_state_next tcp_state_next_t
typedef enum _tcp_syn_sent_next tcp_syn_sent_next_t

Function Documentation

void delack_timers_init ( tcp_main_t tm,
u32  thread_index 
)

Definition at line 966 of file tcp_input.c.

+ Here is the caller graph for this function:

u8* format_tcp_rx_trace ( u8 s,
va_list *  args 
)

Definition at line 2077 of file tcp_input.c.

+ Here is the call graph for this function:

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

Definition at line 432 of file tcp_input.c.

+ 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 408 of file tcp_input.c.

+ Here is the caller graph for this function:

static uword tcp46_established_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame,
int  is_ip4 
)
inlinestatic

Definition at line 987 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword tcp46_input_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame,
int  is_ip4 
)
inlinestatic

Definition at line 2093 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword tcp46_listen_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame,
int  is_ip4 
)
inlinestatic

LISTEN state processing as per RFC 793 p.

65

Definition at line 1840 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword tcp46_rcv_process_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame,
int  is_ip4 
)
inlinestatic

Handles reception for all states except LISTEN, SYN-SENT and ESTABLISHED as per RFC793 p.

64

Definition at line 1484 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword tcp46_syn_sent_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame,
int  is_ip4 
)
inlinestatic

Definition at line 1182 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword tcp4_established ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)
static

Definition at line 1122 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword tcp4_input ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)
static

Definition at line 2206 of file tcp_input.c.

+ Here is the call graph for this function:

static uword tcp4_listen ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)
static

Definition at line 1984 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword tcp4_rcv_process ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)
static

Definition at line 1778 of file tcp_input.c.

+ Here is the call graph for this function:

static uword tcp4_syn_sent ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)
static

Definition at line 1425 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword tcp6_established ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)
static

Definition at line 1129 of file tcp_input.c.

+ Here is the call graph for this function:

static uword tcp6_input ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)
static

Definition at line 2213 of file tcp_input.c.

+ Here is the call graph for this function:

static uword tcp6_listen ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)
static

Definition at line 1991 of file tcp_input.c.

+ Here is the call graph for this function:

static uword tcp6_rcv_process ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)
static

Definition at line 1785 of file tcp_input.c.

+ Here is the call graph for this function:

static uword tcp6_syn_sent_rcv ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)
static

Definition at line 1432 of file tcp_input.c.

+ Here is the call graph for this function:

static u8 tcp_ack_is_dupack ( tcp_connection_t tc,
vlib_buffer_t b,
u32  new_snd_wnd 
)
inlinestatic

Check if dupack as per RFC5681 Sec.

2

Definition at line 399 of file tcp_input.c.

+ Here is the caller graph for this function:

static int tcp_can_delack ( tcp_connection_t tc)
inlinestatic

Check if ACK could be delayed.

DELACK timer is set only after frame is processed so this can return true for a full bursts of packets.

Definition at line 882 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_cc_congestion ( tcp_connection_t tc)
static

Definition at line 589 of file tcp_input.c.

+ Here is the caller graph for this function:

void tcp_cc_init ( tcp_connection_t tc)

Definition at line 679 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_cc_rcv_ack ( tcp_connection_t tc)
static

Definition at line 610 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_cc_rcv_dupack ( tcp_connection_t tc,
u32  ack 
)
static

Definition at line 643 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_cc_recover ( tcp_connection_t tc)
static

Definition at line 595 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_dequeue_acked ( tcp_connection_t tc,
u32  ack 
)
static

Dequeue bytes that have been acked and while at it update RTT estimates.

Definition at line 384 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tcp_dispatch_table_init ( tcp_main_t tm)
static

Definition at line 2272 of file tcp_input.c.

+ Here is the caller graph for this function:

static void tcp_estimate_rtt ( tcp_connection_t tc,
u32  mrtt 
)
static

Compute smoothed RTT as per VJ's '88 SIGCOMM and RFC6298.

Note that although the original article, srtt and rttvar are scaled to minimize round-off errors, here we don't. Instead, we rely on better precision time measurements.

TODO support us rtt resolution

Definition at line 318 of file tcp_input.c.

+ Here is the caller graph for this function:

clib_error_t* tcp_input_init ( vlib_main_t vm)

Definition at line 2321 of file tcp_input.c.

+ Here is the call graph for this function:

void tcp_options_parse ( tcp_header_t th,
tcp_options_t to 
)

Definition at line 108 of file tcp_input.c.

+ Here is the caller graph for this function:

static int tcp_rcv_ack ( tcp_connection_t tc,
vlib_buffer_t b,
tcp_header_t th,
u32 next,
u32 error 
)
static

Definition at line 686 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int tcp_rcv_ack_is_acceptable ( tcp_connection_t tc0,
vlib_buffer_t tb0 
)
inlinestatic

Definition at line 301 of file tcp_input.c.

+ Here is the caller graph for this function:

static void tcp_rcv_sacks ( tcp_connection_t tc,
u32  ack 
)
static

Definition at line 466 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int tcp_segment_check_paws ( tcp_connection_t tc)
inlinestatic

Definition at line 204 of file tcp_input.c.

+ Here is the caller graph for this function:

static u8 tcp_segment_in_rcv_wnd ( tcp_connection_t tc,
u32  seq,
u32  end_seq 
)
inlinestatic

Validate segment sequence number.

As per RFC793:

Segment Receive Test Length Window


0 0 SEG.SEQ = RCV.NXT 0 >0 RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND >0 0 not acceptable >0 >0 RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND or RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND

This ultimately consists in checking if segment falls within the window. The one important difference compared to RFC793 is that we use rcv_las, or the rcv_nxt at last ack sent instead of rcv_nxt since that's the peer's reference when computing our receive window.

This accepts only segments within the window.

Definition at line 101 of file tcp_input.c.

+ Here is the caller graph for this function:

static int tcp_segment_rcv ( tcp_main_t tm,
tcp_connection_t tc,
vlib_buffer_t b,
u16  n_data_bytes,
u32 next0 
)
static

Definition at line 895 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int tcp_segment_validate ( vlib_main_t vm,
tcp_connection_t tc0,
vlib_buffer_t b0,
tcp_header_t th0,
u32 next0 
)
static

Validate incoming segment as per RFC793 p.

69 and RFC1323 p. 19

It first verifies if segment has a wrapped sequence number (PAWS) and then does the processing associated to the first four steps (ignoring security and precedence): sequence number, rst bit and syn bit checks.

Returns
0 if segments passes validation.

Definition at line 222 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 tcp_session_enqueue_data ( tcp_connection_t tc,
vlib_buffer_t b,
u16  data_len 
)
inlinestatic

Enqueue data for delivery to application.

Definition at line 799 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 tcp_session_enqueue_ooo ( tcp_connection_t tc,
vlib_buffer_t b,
u16  data_len 
)
inlinestatic

Enqueue out-of-order data.

Definition at line 846 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int tcp_update_rtt ( tcp_connection_t tc,
u32  ack 
)
static

Update RTT estimate and RTO timer.

Measure RTT: We have two sources of RTT measurements: TSOPT and ACK timing. Middle boxes are known to fiddle with TCP options so we should give higher priority to ACK timing.

return 1 if valid rtt 0 otherwise

Definition at line 348 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

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 757 of file tcp_input.c.

+ Here is the caller graph for this function:

static void tcp_update_snd_wnd ( tcp_connection_t tc,
u32  seq,
u32  ack,
u32  snd_wnd 
)
static

Update snd_wnd.

If (SND.WL1 < SEG.SEQ or (SND.WL1 = SEG.SEQ and SND.WL2 =< SEG.ACK)), set SND.WND <- SEG.WND, set SND.WL1 <- SEG.SEQ, and set SND.WL2 <- SEG.ACK

Definition at line 578 of file tcp_input.c.

+ Here is the caller graph for this function:

void tcp_update_time ( f64  now,
u32  thread_index 
)

Definition at line 2265 of file tcp_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

VLIB_NODE_FUNCTION_MULTIARCH ( tcp4_established_node  ,
tcp4_established   
)

+ Here is the caller graph for this function:

VLIB_NODE_FUNCTION_MULTIARCH ( tcp6_established_node  ,
tcp6_established   
)
VLIB_NODE_FUNCTION_MULTIARCH ( tcp4_syn_sent_node  ,
tcp4_syn_sent   
)
VLIB_NODE_FUNCTION_MULTIARCH ( tcp6_syn_sent_node  ,
tcp6_syn_sent_rcv   
)
VLIB_NODE_FUNCTION_MULTIARCH ( tcp4_rcv_process_node  ,
tcp4_rcv_process   
)
VLIB_NODE_FUNCTION_MULTIARCH ( tcp6_rcv_process_node  ,
tcp6_rcv_process   
)
VLIB_NODE_FUNCTION_MULTIARCH ( tcp4_listen_node  ,
tcp4_listen   
)
VLIB_NODE_FUNCTION_MULTIARCH ( tcp6_listen_node  ,
tcp6_listen   
)
VLIB_NODE_FUNCTION_MULTIARCH ( tcp4_input_node  ,
tcp4_input   
)
VLIB_NODE_FUNCTION_MULTIARCH ( tcp6_input_node  ,
tcp6_input   
)

Variable Documentation

vlib_node_registration_t tcp4_established_node
Initial value:
=
{
.function = tcp4_established,
.name = "tcp4-established",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_ESTABLISHED_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
}
unsigned int u32
Definition: types.h:88
static uword tcp4_established(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_input.c:1122
#define foreach_tcp_state_next
Definition: tcp_input.c:29
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp4_established_node)

Definition at line 78 of file tcp_input.c.

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:2077
#define foreach_tcp4_input_next
Definition: tcp_input.c:2053
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:2206
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp4_input_node)

Definition at line 2039 of file tcp_input.c.

vlib_node_registration_t tcp4_listen_node
Initial value:
=
{
.function = tcp4_listen,
.name = "tcp4-listen",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_LISTEN_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
}
static uword tcp4_listen(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_input.c:1984
unsigned int u32
Definition: types.h:88
#define foreach_tcp_state_next
Definition: tcp_input.c:29
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp4_listen_node)

Definition at line 1833 of file tcp_input.c.

vlib_node_registration_t tcp4_rcv_process_node
Initial value:
=
{
.function = tcp4_rcv_process,
.name = "tcp4-rcv-process",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_RCV_PROCESS_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
}
unsigned int u32
Definition: types.h:88
#define foreach_tcp_state_next
Definition: tcp_input.c:29
static uword tcp4_rcv_process(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_input.c:1778
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp4_rcv_process_node)

Definition at line 1792 of file tcp_input.c.

vlib_node_registration_t tcp4_syn_sent_node
Initial value:
=
{
.function = tcp4_syn_sent,
.name = "tcp4-syn-sent",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_SYN_SENT_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
}
static uword tcp4_syn_sent(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_input.c:1425
unsigned int u32
Definition: types.h:88
#define foreach_tcp_state_next
Definition: tcp_input.c:29
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp4_syn_sent_node)

Definition at line 1178 of file tcp_input.c.

vlib_node_registration_t tcp6_established_node
Initial value:
=
{
.function = tcp6_established,
.name = "tcp6-established",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_ESTABLISHED_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
}
unsigned int u32
Definition: types.h:88
static uword tcp6_established(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_input.c:1129
#define foreach_tcp_state_next
Definition: tcp_input.c:29
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp6_established_node)

Definition at line 79 of file tcp_input.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:2213
u8 * format_tcp_rx_trace(u8 *s, va_list *args)
Definition: tcp_input.c:2077
#define foreach_tcp6_input_next
Definition: tcp_input.c:2061
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 2040 of file tcp_input.c.

vlib_node_registration_t tcp6_listen_node
Initial value:
=
{
.function = tcp6_listen,
.name = "tcp6-listen",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_LISTEN_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
}
static uword tcp6_listen(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_input.c:1991
unsigned int u32
Definition: types.h:88
#define foreach_tcp_state_next
Definition: tcp_input.c:29
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp6_listen_node)

Definition at line 1834 of file tcp_input.c.

vlib_node_registration_t tcp6_rcv_process_node
Initial value:
=
{
.function = tcp6_rcv_process,
.name = "tcp6-rcv-process",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_RCV_PROCESS_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
}
static uword tcp6_rcv_process(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_input.c:1785
unsigned int u32
Definition: types.h:88
#define foreach_tcp_state_next
Definition: tcp_input.c:29
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp6_rcv_process_node)

Definition at line 1813 of file tcp_input.c.

vlib_node_registration_t tcp6_syn_sent_node
Initial value:
=
{
.function = tcp6_syn_sent_rcv,
.name = "tcp6-syn-sent",
.vector_size = sizeof (u32),
.n_errors = TCP_N_ERROR,
.error_strings = tcp_error_strings,
.n_next_nodes = TCP_SYN_SENT_N_NEXT,
.next_nodes =
{
#define _(s,n)
}
,}
static uword tcp6_syn_sent_rcv(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: tcp_input.c:1432
unsigned int u32
Definition: types.h:88
#define foreach_tcp_state_next
Definition: tcp_input.c:29
static char * tcp_error_strings[]
Definition: tcp_input.c:22

(constructor) VLIB_REGISTER_NODE (tcp6_syn_sent_node)

Definition at line 1179 of file tcp_input.c.

char* tcp_error_strings[]
static
Initial value:
= {
#define tcp_error(n,s)
}

Definition at line 22 of file tcp_input.c.