FD.io VPP  v19.01.3-6-g70449b9b9
Vector Packet Processing
sctp_input.c File Reference
+ Include dependency graph for sctp_input.c:

Go to the source code of this file.

Data Structures

struct  sctp_rx_trace_t
 

Macros

#define sctp_error(n, s)   s,
 
#define foreach_sctp_state_next
 
#define foreach_sctp4_input_next
 
#define foreach_sctp6_input_next
 
#define sctp_next_output(is_ip4)
 
#define sctp_next_drop(is_ip4)
 

Typedefs

typedef enum _sctp_established_phase_next sctp_established_phase_next_t
 
typedef enum _sctp_rcv_phase_next sctp_rcv_phase_next_t
 
typedef enum _sctp_listen_phase_next sctp_listen_phase_next_t
 
typedef enum _sctp_shutdown_phase_next sctp_shutdown_phase_next_t
 
typedef enum _sctp_state_next sctp_state_next_t
 
typedef enum _sctp_input_next sctp_input_next_t
 

Functions

char * phase_to_string (u8 phase)
 
static u8 sctp_lookup_is_valid (transport_connection_t *trans_conn, sctp_header_t *sctp_hdr)
 
static sctp_connection_tsctp_lookup_connection (u32 fib_index, vlib_buffer_t *b, u8 thread_index, u8 is_ip4)
 Lookup transport connection. More...
 
void sctp_set_rx_trace_data (sctp_rx_trace_t *rx_trace, sctp_connection_t *sctp_conn, sctp_header_t *sctp_hdr, vlib_buffer_t *b0, u8 is_ip4)
 
static u16 sctp_calculate_implied_length (ip4_header_t *ip4_hdr, ip6_header_t *ip6_hdr, int is_ip4)
 
static u8 sctp_is_bundling (u16 sctp_implied_length, sctp_chunks_common_hdr_t *sctp_common_hdr)
 
static u16 sctp_handle_operation_err (sctp_header_t *sctp_hdr, sctp_connection_t *sctp_conn, u8 idx, vlib_buffer_t *b, u16 *next0)
 
static u16 sctp_handle_init (sctp_header_t *sctp_hdr, sctp_chunks_common_hdr_t *sctp_chunk_hdr, sctp_connection_t *sctp_conn, vlib_buffer_t *b0, u16 sctp_implied_length)
 
static u16 sctp_is_valid_init_ack (sctp_header_t *sctp_hdr, sctp_chunks_common_hdr_t *sctp_chunk_hdr, sctp_connection_t *sctp_conn, vlib_buffer_t *b0, u16 sctp_implied_length)
 
static u16 sctp_handle_init_ack (sctp_header_t *sctp_hdr, sctp_chunks_common_hdr_t *sctp_chunk_hdr, sctp_connection_t *sctp_conn, u8 idx, vlib_buffer_t *b0, u16 sctp_implied_length)
 
static int sctp_session_enqueue_data_ooo (sctp_connection_t *sctp_conn, vlib_buffer_t *b, u16 data_len, u8 conn_idx)
 Enqueue data out-of-order for delivery to application. More...
 
static int sctp_session_enqueue_data (sctp_connection_t *sctp_conn, vlib_buffer_t *b, u16 data_len, u8 conn_idx)
 Enqueue data for delivery to application. More...
 
static u8 sctp_is_sack_delayable (sctp_connection_t *sctp_conn, u8 idx, u8 is_gapping)
 
static void sctp_is_connection_gapping (sctp_connection_t *sctp_conn, u32 tsn, u8 *gapping)
 
static u16 sctp_handle_data (sctp_payload_data_chunk_t *sctp_data_chunk, sctp_connection_t *sctp_conn, u8 idx, vlib_buffer_t *b, u16 *next0)
 
static u16 sctp_handle_cookie_echo (sctp_header_t *sctp_hdr, sctp_chunks_common_hdr_t *sctp_chunk_hdr, sctp_connection_t *sctp_conn, u8 idx, vlib_buffer_t *b0, u16 *next0)
 
static u16 sctp_handle_cookie_ack (sctp_header_t *sctp_hdr, sctp_chunks_common_hdr_t *sctp_chunk_hdr, sctp_connection_t *sctp_conn, u8 idx, vlib_buffer_t *b0, u16 *next0)
 
static uword sctp46_rcv_phase_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, int is_ip4)
 
static uword sctp4_rcv_phase (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
static uword sctp6_rcv_phase (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
u8format_sctp_rx_trace_short (u8 *s, va_list *args)
 
 VLIB_NODE_FUNCTION_MULTIARCH (sctp4_rcv_phase_node, sctp4_rcv_phase)
 
 VLIB_NODE_FUNCTION_MULTIARCH (sctp6_init_phase_node, sctp6_rcv_phase)
 
static u16 sctp_handle_shutdown (sctp_header_t *sctp_hdr, sctp_chunks_common_hdr_t *sctp_chunk_hdr, sctp_connection_t *sctp_conn, u8 idx, vlib_buffer_t *b0, u16 sctp_implied_length, u16 *next0)
 
static u16 sctp_handle_shutdown_ack (sctp_header_t *sctp_hdr, sctp_chunks_common_hdr_t *sctp_chunk_hdr, sctp_connection_t *sctp_conn, u8 idx, vlib_buffer_t *b0, u16 sctp_implied_length, u16 *next0)
 
static u16 sctp_handle_shutdown_complete (sctp_header_t *sctp_hdr, sctp_chunks_common_hdr_t *sctp_chunk_hdr, sctp_connection_t *sctp_conn, u8 idx, vlib_buffer_t *b0, u16 sctp_implied_length, u16 *next0)
 
static uword sctp46_shutdown_phase_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, int is_ip4)
 
static uword sctp4_shutdown_phase (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
static uword sctp6_shutdown_phase (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
 VLIB_NODE_FUNCTION_MULTIARCH (sctp4_shutdown_phase_node, sctp4_shutdown_phase)
 
 VLIB_NODE_FUNCTION_MULTIARCH (sctp6_shutdown_phase_node, sctp6_shutdown_phase)
 
static u16 sctp_handle_sack (sctp_selective_ack_chunk_t *sack_chunk, sctp_connection_t *sctp_conn, u8 idx, vlib_buffer_t *b0, u16 *next0)
 
static u16 sctp_handle_heartbeat (sctp_hb_req_chunk_t *sctp_hb_chunk, sctp_connection_t *sctp_conn, u8 idx, vlib_buffer_t *b0, u16 *next0)
 
static u16 sctp_handle_heartbeat_ack (sctp_hb_ack_chunk_t *sctp_hb_ack_chunk, sctp_connection_t *sctp_conn, u8 idx, vlib_buffer_t *b0, u16 *next0)
 
static void sctp_node_inc_counter (vlib_main_t *vm, u32 sctp4_node, u32 sctp6_node, u8 is_ip4, u8 evt, u8 val)
 
static uword sctp46_listen_process_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, int is_ip4)
 
static uword sctp4_listen_phase (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
static uword sctp6_listen_phase (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
static uword sctp46_established_phase_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, int is_ip4)
 
static uword sctp4_established_phase (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
static uword sctp6_established_phase (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
u8format_sctp_rx_trace (u8 *s, va_list *args)
 
 VLIB_NODE_FUNCTION_MULTIARCH (sctp4_listen_phase_node, sctp4_listen_phase)
 
 VLIB_NODE_FUNCTION_MULTIARCH (sctp6_listen_phase_node, sctp6_listen_phase)
 
 VLIB_NODE_FUNCTION_MULTIARCH (sctp4_established_phase_node, sctp4_established_phase)
 
 VLIB_NODE_FUNCTION_MULTIARCH (sctp6_established_phase_node, sctp6_established_phase)
 
static uword sctp46_input_dispatcher (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, int is_ip4)
 
static uword sctp4_input_dispatcher (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
static uword sctp6_input_dispatcher (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 
 VLIB_NODE_FUNCTION_MULTIARCH (sctp4_input_node, sctp4_input_dispatcher)
 
 VLIB_NODE_FUNCTION_MULTIARCH (sctp6_input_node, sctp6_input_dispatcher)
 
static void sctp_dispatch_table_init (sctp_main_t *tm)
 
clib_error_tsctp_input_init (vlib_main_t *vm)
 

Variables

static char * sctp_error_strings []
 
vlib_node_registration_t sctp4_rcv_phase_node
 (constructor) VLIB_REGISTER_NODE (sctp4_rcv_phase_node) More...
 
vlib_node_registration_t sctp6_init_phase_node
 (constructor) VLIB_REGISTER_NODE (sctp6_init_phase_node) More...
 
vlib_node_registration_t sctp4_shutdown_phase_node
 (constructor) VLIB_REGISTER_NODE (sctp4_shutdown_phase_node) More...
 
vlib_node_registration_t sctp6_shutdown_phase_node
 (constructor) VLIB_REGISTER_NODE (sctp6_shutdown_phase_node) More...
 
vlib_node_registration_t sctp4_listen_phase_node
 (constructor) VLIB_REGISTER_NODE (sctp4_listen_phase_node) More...
 
vlib_node_registration_t sctp6_listen_phase_node
 (constructor) VLIB_REGISTER_NODE (sctp6_listen_phase_node) More...
 
vlib_node_registration_t sctp4_established_phase_node
 (constructor) VLIB_REGISTER_NODE (sctp4_established_phase_node) More...
 
vlib_node_registration_t sctp6_established_phase_node
 (constructor) VLIB_REGISTER_NODE (sctp6_established_phase_node) More...
 
vlib_node_registration_t sctp4_input_node
 (constructor) VLIB_REGISTER_NODE (sctp4_input_node) More...
 
vlib_node_registration_t sctp6_input_node
 (constructor) VLIB_REGISTER_NODE (sctp6_input_node) More...
 

Macro Definition Documentation

◆ foreach_sctp4_input_next

#define foreach_sctp4_input_next
Value:
_ (DROP, "error-drop") \
_ (RCV_PHASE, "sctp4-rcv") \
_ (LISTEN_PHASE, "sctp4-listen") \
_ (ESTABLISHED_PHASE, "sctp4-established") \
_ (SHUTDOWN_PHASE, "sctp4-shutdown") \
_ (PUNT_PHASE, "ip4-punt")
DROP
Definition: error.def:41

Definition at line 108 of file sctp_input.c.

◆ foreach_sctp6_input_next

#define foreach_sctp6_input_next
Value:
_ (DROP, "error-drop") \
_ (RCV_PHASE, "sctp6-rcv") \
_ (LISTEN_PHASE, "sctp6-listen") \
_ (ESTABLISHED_PHASE, "sctp6-established") \
_ (SHUTDOWN_PHASE, "sctp6-shutdown") \
_ (PUNT_PHASE, "ip6-punt")
DROP
Definition: error.def:41

Definition at line 117 of file sctp_input.c.

◆ foreach_sctp_state_next

#define foreach_sctp_state_next
Value:
_ (DROP4, "ip4-drop") \
_ (DROP6, "ip6-drop") \
_ (SCTP4_OUTPUT, "sctp4-output") \
_ (SCTP6_OUTPUT, "sctp6-output")

Definition at line 29 of file sctp_input.c.

◆ sctp_error

#define sctp_error (   n,
 
)    s,

◆ sctp_next_drop

#define sctp_next_drop (   is_ip4)
Value:
(is_ip4 ? SCTP_NEXT_DROP4 \
: SCTP_NEXT_DROP6)

Definition at line 237 of file sctp_input.c.

◆ sctp_next_output

#define sctp_next_output (   is_ip4)
Value:
(is_ip4 ? SCTP_NEXT_SCTP4_OUTPUT \
: SCTP_NEXT_SCTP6_OUTPUT)

Definition at line 234 of file sctp_input.c.

Typedef Documentation

◆ sctp_established_phase_next_t

typedef enum _sctp_established_phase_next sctp_established_phase_next_t

◆ sctp_input_next_t

typedef enum _sctp_input_next sctp_input_next_t

◆ sctp_listen_phase_next_t

typedef enum _sctp_listen_phase_next sctp_listen_phase_next_t

◆ sctp_rcv_phase_next_t

typedef enum _sctp_rcv_phase_next sctp_rcv_phase_next_t

◆ sctp_shutdown_phase_next_t

typedef enum _sctp_shutdown_phase_next sctp_shutdown_phase_next_t

◆ sctp_state_next_t

typedef enum _sctp_state_next sctp_state_next_t

Function Documentation

◆ format_sctp_rx_trace()

u8* format_sctp_rx_trace ( u8 s,
va_list *  args 
)

Definition at line 2001 of file sctp_input.c.

+ Here is the call graph for this function:

◆ format_sctp_rx_trace_short()

u8* format_sctp_rx_trace_short ( u8 s,
va_list *  args 
)

Definition at line 1134 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ phase_to_string()

char* phase_to_string ( u8  phase)

Definition at line 88 of file sctp_input.c.

+ Here is the caller graph for this function:

◆ sctp46_established_phase_inline()

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

Definition at line 1833 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp46_input_dispatcher()

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

Definition at line 2112 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp46_listen_process_inline()

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

Definition at line 1628 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp46_rcv_phase_inline()

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

Definition at line 950 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp46_shutdown_phase_inline()

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

Definition at line 1308 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp4_established_phase()

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

Definition at line 1985 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp4_input_dispatcher()

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

Definition at line 2299 of file sctp_input.c.

+ Here is the call graph for this function:

◆ sctp4_listen_phase()

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

Definition at line 1819 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp4_rcv_phase()

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

Definition at line 1120 of file sctp_input.c.

+ Here is the call graph for this function:

◆ sctp4_shutdown_phase()

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

Definition at line 1473 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp6_established_phase()

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

Definition at line 1993 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp6_input_dispatcher()

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

Definition at line 2306 of file sctp_input.c.

+ Here is the call graph for this function:

◆ sctp6_listen_phase()

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

Definition at line 1826 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp6_rcv_phase()

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

Definition at line 1127 of file sctp_input.c.

+ Here is the call graph for this function:

◆ sctp6_shutdown_phase()

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

Definition at line 1480 of file sctp_input.c.

+ Here is the call graph for this function:

◆ sctp_calculate_implied_length()

static u16 sctp_calculate_implied_length ( ip4_header_t ip4_hdr,
ip6_header_t ip6_hdr,
int  is_ip4 
)
inlinestatic

Definition at line 260 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_dispatch_table_init()

static void sctp_dispatch_table_init ( sctp_main_t tm)
static

Definition at line 2362 of file sctp_input.c.

+ Here is the caller graph for this function:

◆ sctp_handle_cookie_ack()

static u16 sctp_handle_cookie_ack ( sctp_header_t sctp_hdr,
sctp_chunks_common_hdr_t sctp_chunk_hdr,
sctp_connection_t sctp_conn,
u8  idx,
vlib_buffer_t b0,
u16 next0 
)
inlinestatic

Definition at line 919 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_handle_cookie_echo()

static u16 sctp_handle_cookie_echo ( sctp_header_t sctp_hdr,
sctp_chunks_common_hdr_t sctp_chunk_hdr,
sctp_connection_t sctp_conn,
u8  idx,
vlib_buffer_t b0,
u16 next0 
)
inlinestatic

Definition at line 871 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_handle_data()

static u16 sctp_handle_data ( sctp_payload_data_chunk_t sctp_data_chunk,
sctp_connection_t sctp_conn,
u8  idx,
vlib_buffer_t b,
u16 next0 
)
inlinestatic

Definition at line 771 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_handle_heartbeat()

static u16 sctp_handle_heartbeat ( sctp_hb_req_chunk_t sctp_hb_chunk,
sctp_connection_t sctp_conn,
u8  idx,
vlib_buffer_t b0,
u16 next0 
)
inlinestatic

Definition at line 1579 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_handle_heartbeat_ack()

static u16 sctp_handle_heartbeat_ack ( sctp_hb_ack_chunk_t sctp_hb_ack_chunk,
sctp_connection_t sctp_conn,
u8  idx,
vlib_buffer_t b0,
u16 next0 
)
inlinestatic

Definition at line 1598 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_handle_init()

static u16 sctp_handle_init ( sctp_header_t sctp_hdr,
sctp_chunks_common_hdr_t sctp_chunk_hdr,
sctp_connection_t sctp_conn,
vlib_buffer_t b0,
u16  sctp_implied_length 
)
inlinestatic

Definition at line 316 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_handle_init_ack()

static u16 sctp_handle_init_ack ( sctp_header_t sctp_hdr,
sctp_chunks_common_hdr_t sctp_chunk_hdr,
sctp_connection_t sctp_conn,
u8  idx,
vlib_buffer_t b0,
u16  sctp_implied_length 
)
inlinestatic

Definition at line 488 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_handle_operation_err()

static u16 sctp_handle_operation_err ( sctp_header_t sctp_hdr,
sctp_connection_t sctp_conn,
u8  idx,
vlib_buffer_t b,
u16 next0 
)
inlinestatic

Definition at line 286 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_handle_sack()

static u16 sctp_handle_sack ( sctp_selective_ack_chunk_t sack_chunk,
sctp_connection_t sctp_conn,
u8  idx,
vlib_buffer_t b0,
u16 next0 
)
inlinestatic

Definition at line 1539 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_handle_shutdown()

static u16 sctp_handle_shutdown ( sctp_header_t sctp_hdr,
sctp_chunks_common_hdr_t sctp_chunk_hdr,
sctp_connection_t sctp_conn,
u8  idx,
vlib_buffer_t b0,
u16  sctp_implied_length,
u16 next0 
)
inlinestatic

Definition at line 1196 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_handle_shutdown_ack()

static u16 sctp_handle_shutdown_ack ( sctp_header_t sctp_hdr,
sctp_chunks_common_hdr_t sctp_chunk_hdr,
sctp_connection_t sctp_conn,
u8  idx,
vlib_buffer_t b0,
u16  sctp_implied_length,
u16 next0 
)
inlinestatic

Definition at line 1237 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_handle_shutdown_complete()

static u16 sctp_handle_shutdown_complete ( sctp_header_t sctp_hdr,
sctp_chunks_common_hdr_t sctp_chunk_hdr,
sctp_connection_t sctp_conn,
u8  idx,
vlib_buffer_t b0,
u16  sctp_implied_length,
u16 next0 
)
inlinestatic

Definition at line 1274 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_input_init()

clib_error_t* sctp_input_init ( vlib_main_t vm)

Definition at line 2549 of file sctp_input.c.

+ Here is the call graph for this function:

◆ sctp_is_bundling()

static u8 sctp_is_bundling ( u16  sctp_implied_length,
sctp_chunks_common_hdr_t sctp_common_hdr 
)
inlinestatic

Definition at line 276 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_is_connection_gapping()

static void sctp_is_connection_gapping ( sctp_connection_t sctp_conn,
u32  tsn,
u8 gapping 
)
inlinestatic

Definition at line 755 of file sctp_input.c.

+ Here is the caller graph for this function:

◆ sctp_is_sack_delayable()

static u8 sctp_is_sack_delayable ( sctp_connection_t sctp_conn,
u8  idx,
u8  is_gapping 
)
inlinestatic

Definition at line 718 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_is_valid_init_ack()

static u16 sctp_is_valid_init_ack ( sctp_header_t sctp_hdr,
sctp_chunks_common_hdr_t sctp_chunk_hdr,
sctp_connection_t sctp_conn,
vlib_buffer_t b0,
u16  sctp_implied_length 
)
inlinestatic

Definition at line 464 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_lookup_connection()

static sctp_connection_t* sctp_lookup_connection ( u32  fib_index,
vlib_buffer_t b,
u8  thread_index,
u8  is_ip4 
)
static

Lookup transport connection.

Definition at line 146 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_lookup_is_valid()

static u8 sctp_lookup_is_valid ( transport_connection_t trans_conn,
sctp_header_t sctp_hdr 
)
static

Definition at line 126 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_node_inc_counter()

static void sctp_node_inc_counter ( vlib_main_t vm,
u32  sctp4_node,
u32  sctp6_node,
u8  is_ip4,
u8  evt,
u8  val 
)
inlinestatic

Definition at line 1615 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_session_enqueue_data()

static int sctp_session_enqueue_data ( sctp_connection_t sctp_conn,
vlib_buffer_t b,
u16  data_len,
u8  conn_idx 
)
inlinestatic

Enqueue data for delivery to application.

Definition at line 666 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_session_enqueue_data_ooo()

static int sctp_session_enqueue_data_ooo ( sctp_connection_t sctp_conn,
vlib_buffer_t b,
u16  data_len,
u8  conn_idx 
)
inlinestatic

Enqueue data out-of-order for delivery to application.

Definition at line 611 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sctp_set_rx_trace_data()

void sctp_set_rx_trace_data ( sctp_rx_trace_t rx_trace,
sctp_connection_t sctp_conn,
sctp_header_t sctp_hdr,
vlib_buffer_t b0,
u8  is_ip4 
)

Definition at line 241 of file sctp_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ VLIB_NODE_FUNCTION_MULTIARCH() [1/10]

VLIB_NODE_FUNCTION_MULTIARCH ( sctp4_rcv_phase_node  ,
sctp4_rcv_phase   
)
+ Here is the caller graph for this function:

◆ VLIB_NODE_FUNCTION_MULTIARCH() [2/10]

VLIB_NODE_FUNCTION_MULTIARCH ( sctp6_init_phase_node  ,
sctp6_rcv_phase   
)

◆ VLIB_NODE_FUNCTION_MULTIARCH() [3/10]

VLIB_NODE_FUNCTION_MULTIARCH ( sctp4_shutdown_phase_node  ,
sctp4_shutdown_phase   
)

◆ VLIB_NODE_FUNCTION_MULTIARCH() [4/10]

VLIB_NODE_FUNCTION_MULTIARCH ( sctp6_shutdown_phase_node  ,
sctp6_shutdown_phase   
)

◆ VLIB_NODE_FUNCTION_MULTIARCH() [5/10]

VLIB_NODE_FUNCTION_MULTIARCH ( sctp4_listen_phase_node  ,
sctp4_listen_phase   
)

◆ VLIB_NODE_FUNCTION_MULTIARCH() [6/10]

VLIB_NODE_FUNCTION_MULTIARCH ( sctp6_listen_phase_node  ,
sctp6_listen_phase   
)

◆ VLIB_NODE_FUNCTION_MULTIARCH() [7/10]

VLIB_NODE_FUNCTION_MULTIARCH ( sctp4_established_phase_node  ,
sctp4_established_phase   
)

◆ VLIB_NODE_FUNCTION_MULTIARCH() [8/10]

VLIB_NODE_FUNCTION_MULTIARCH ( sctp6_established_phase_node  ,
sctp6_established_phase   
)

◆ VLIB_NODE_FUNCTION_MULTIARCH() [9/10]

VLIB_NODE_FUNCTION_MULTIARCH ( sctp4_input_node  ,
sctp4_input_dispatcher   
)

◆ VLIB_NODE_FUNCTION_MULTIARCH() [10/10]

VLIB_NODE_FUNCTION_MULTIARCH ( sctp6_input_node  ,
sctp6_input_dispatcher   
)

Variable Documentation

◆ sctp4_established_phase_node

vlib_node_registration_t sctp4_established_phase_node
Initial value:
=
{
.name = "sctp4-established",
.vector_size = sizeof (u32),
.n_errors = SCTP_N_ERROR,
.error_strings = sctp_error_strings,
.next_nodes =
{
#define _(s,n)
},
.format_trace = format_sctp_rx_trace_short,
}
static char * sctp_error_strings[]
Definition: sctp_input.c:22
unsigned int u32
Definition: types.h:88
u8 * format_sctp_rx_trace_short(u8 *s, va_list *args)
Definition: sctp_input.c:1134
static uword sctp4_established_phase(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: sctp_input.c:1985
#define foreach_sctp_state_next
Definition: sctp_input.c:29

(constructor) VLIB_REGISTER_NODE (sctp4_established_phase_node)

Definition at line 1535 of file sctp_input.c.

◆ sctp4_input_node

vlib_node_registration_t sctp4_input_node
Initial value:
=
{
.name = "sctp4-input",
.vector_size = sizeof (u32),
.n_errors = SCTP_N_ERROR,
.error_strings = sctp_error_strings,
.n_next_nodes = SCTP_INPUT_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
.format_buffer = format_sctp_header,
.format_trace = format_sctp_rx_trace,
}
static char * sctp_error_strings[]
Definition: sctp_input.c:22
unsigned int u32
Definition: types.h:88
static uword sctp4_input_dispatcher(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: sctp_input.c:2299
#define foreach_sctp4_input_next
Definition: sctp_input.c:108
format_function_t format_sctp_header
Definition: format.h:101
u8 * format_sctp_rx_trace(u8 *s, va_list *args)
Definition: sctp_input.c:2001

(constructor) VLIB_REGISTER_NODE (sctp4_input_node)

Definition at line 2313 of file sctp_input.c.

◆ sctp4_listen_phase_node

vlib_node_registration_t sctp4_listen_phase_node
Initial value:
=
{
.function = sctp4_listen_phase,
.name = "sctp4-listen",
.vector_size = sizeof (u32),
.n_errors = SCTP_N_ERROR,
.error_strings = sctp_error_strings,
.n_next_nodes = SCTP_LISTEN_PHASE_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
.format_trace = format_sctp_rx_trace_short,
}
static char * sctp_error_strings[]
Definition: sctp_input.c:22
unsigned int u32
Definition: types.h:88
static uword sctp4_listen_phase(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: sctp_input.c:1819
u8 * format_sctp_rx_trace_short(u8 *s, va_list *args)
Definition: sctp_input.c:1134
#define foreach_sctp_state_next
Definition: sctp_input.c:29

(constructor) VLIB_REGISTER_NODE (sctp4_listen_phase_node)

Definition at line 1532 of file sctp_input.c.

◆ sctp4_rcv_phase_node

vlib_node_registration_t sctp4_rcv_phase_node
Initial value:
=
{
.function = sctp4_rcv_phase,
.name = "sctp4-rcv",
.vector_size = sizeof (u32),
.n_errors = SCTP_N_ERROR,
.error_strings = sctp_error_strings,
.n_next_nodes = SCTP_RCV_PHASE_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
.format_trace = format_sctp_rx_trace_short,
}
static char * sctp_error_strings[]
Definition: sctp_input.c:22
unsigned int u32
Definition: types.h:88
u8 * format_sctp_rx_trace_short(u8 *s, va_list *args)
Definition: sctp_input.c:1134
static uword sctp4_rcv_phase(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: sctp_input.c:1120
#define foreach_sctp_state_next
Definition: sctp_input.c:29

(constructor) VLIB_REGISTER_NODE (sctp4_rcv_phase_node)

Definition at line 1149 of file sctp_input.c.

◆ sctp4_shutdown_phase_node

vlib_node_registration_t sctp4_shutdown_phase_node
Initial value:
=
{
.function = sctp4_shutdown_phase,
.name = "sctp4-shutdown",
.vector_size = sizeof (u32),
.n_errors = SCTP_N_ERROR,
.error_strings = sctp_error_strings,
.n_next_nodes = SCTP_SHUTDOWN_PHASE_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
.format_trace = format_sctp_rx_trace_short,
}
static char * sctp_error_strings[]
Definition: sctp_input.c:22
unsigned int u32
Definition: types.h:88
u8 * format_sctp_rx_trace_short(u8 *s, va_list *args)
Definition: sctp_input.c:1134
static uword sctp4_shutdown_phase(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: sctp_input.c:1473
#define foreach_sctp_state_next
Definition: sctp_input.c:29

(constructor) VLIB_REGISTER_NODE (sctp4_shutdown_phase_node)

Definition at line 1192 of file sctp_input.c.

◆ sctp6_established_phase_node

vlib_node_registration_t sctp6_established_phase_node
Initial value:
=
{
.name = "sctp6-established",
.vector_size = sizeof (u32),
.n_errors = SCTP_N_ERROR,
.error_strings = sctp_error_strings,
.n_next_nodes = SCTP_LISTEN_PHASE_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
.format_trace = format_sctp_rx_trace_short,
}
static char * sctp_error_strings[]
Definition: sctp_input.c:22
unsigned int u32
Definition: types.h:88
static uword sctp6_established_phase(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: sctp_input.c:1993
u8 * format_sctp_rx_trace_short(u8 *s, va_list *args)
Definition: sctp_input.c:1134
#define foreach_sctp_state_next
Definition: sctp_input.c:29

(constructor) VLIB_REGISTER_NODE (sctp6_established_phase_node)

Definition at line 1536 of file sctp_input.c.

◆ sctp6_init_phase_node

vlib_node_registration_t sctp6_init_phase_node
Initial value:
=
{
.function = sctp6_rcv_phase,
.name = "sctp6-rcv",
.vector_size = sizeof (u32),
.n_errors = SCTP_N_ERROR,
.error_strings = sctp_error_strings,
.n_next_nodes = SCTP_RCV_PHASE_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
.format_trace = format_sctp_rx_trace_short,
}
static char * sctp_error_strings[]
Definition: sctp_input.c:22
unsigned int u32
Definition: types.h:88
u8 * format_sctp_rx_trace_short(u8 *s, va_list *args)
Definition: sctp_input.c:1134
static uword sctp6_rcv_phase(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: sctp_input.c:1127
#define foreach_sctp_state_next
Definition: sctp_input.c:29

(constructor) VLIB_REGISTER_NODE (sctp6_init_phase_node)

Definition at line 1171 of file sctp_input.c.

◆ sctp6_input_node

vlib_node_registration_t sctp6_input_node
Initial value:
=
{
.name = "sctp6-input",
.vector_size = sizeof (u32),
.n_errors = SCTP_N_ERROR,
.error_strings = sctp_error_strings,
.n_next_nodes = SCTP_INPUT_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
.format_buffer = format_sctp_header,
.format_trace = format_sctp_rx_trace,
}
static char * sctp_error_strings[]
Definition: sctp_input.c:22
unsigned int u32
Definition: types.h:88
format_function_t format_sctp_header
Definition: format.h:101
u8 * format_sctp_rx_trace(u8 *s, va_list *args)
Definition: sctp_input.c:2001
#define foreach_sctp6_input_next
Definition: sctp_input.c:117
static uword sctp6_input_dispatcher(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: sctp_input.c:2306

(constructor) VLIB_REGISTER_NODE (sctp6_input_node)

Definition at line 2336 of file sctp_input.c.

◆ sctp6_listen_phase_node

vlib_node_registration_t sctp6_listen_phase_node
Initial value:
=
{
.function = sctp6_listen_phase,
.name = "sctp6-listen",
.vector_size = sizeof (u32),
.n_errors = SCTP_N_ERROR,
.error_strings = sctp_error_strings,
.n_next_nodes = SCTP_LISTEN_PHASE_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
.format_trace = format_sctp_rx_trace_short,
}
static char * sctp_error_strings[]
Definition: sctp_input.c:22
unsigned int u32
Definition: types.h:88
u8 * format_sctp_rx_trace_short(u8 *s, va_list *args)
Definition: sctp_input.c:1134
#define foreach_sctp_state_next
Definition: sctp_input.c:29
static uword sctp6_listen_phase(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: sctp_input.c:1826

(constructor) VLIB_REGISTER_NODE (sctp6_listen_phase_node)

Definition at line 1533 of file sctp_input.c.

◆ sctp6_shutdown_phase_node

vlib_node_registration_t sctp6_shutdown_phase_node
Initial value:
=
{
.function = sctp6_shutdown_phase,
.name = "sctp6-shutdown",
.vector_size = sizeof (u32),
.n_errors = SCTP_N_ERROR,
.error_strings = sctp_error_strings,
.n_next_nodes = SCTP_SHUTDOWN_PHASE_N_NEXT,
.next_nodes =
{
#define _(s,n)
},
.format_trace = format_sctp_rx_trace_short,
}
static char * sctp_error_strings[]
Definition: sctp_input.c:22
unsigned int u32
Definition: types.h:88
u8 * format_sctp_rx_trace_short(u8 *s, va_list *args)
Definition: sctp_input.c:1134
#define foreach_sctp_state_next
Definition: sctp_input.c:29
static uword sctp6_shutdown_phase(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
Definition: sctp_input.c:1480

(constructor) VLIB_REGISTER_NODE (sctp6_shutdown_phase_node)

Definition at line 1193 of file sctp_input.c.

◆ sctp_error_strings

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

Definition at line 22 of file sctp_input.c.