FD.io VPP  v18.07-rc0-415-g6c78436
Vector Packet Processing
session.h File Reference
+ Include dependency graph for session.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  rpc_args_t
 
struct  session_dgram_pre_hdr_
 
struct  session_tx_context_
 

Macros

#define HALF_OPEN_LOOKUP_INVALID_VALUE   ((u64)~0)
 
#define INVALID_INDEX   ((u32)~0)
 
#define SESSION_PROXY_LISTENER_INDEX   ((u32)~0 - 1)
 
#define SESSION_LOCAL_HANDLE_PREFIX   0x7FFFFFFF
 
#define MAX_HDRS_LEN   100 /* Max number of bytes for headers */
 
#define foreach_session_input_error
 
#define SESSION_CONN_ID_LEN   37
 
#define SESSION_CONN_HDR_LEN   45
 
#define SESSION_Q_PROCESS_FLUSH_FRAMES   1
 
#define SESSION_Q_PROCESS_STOP   2
 
#define session_cli_return_if_not_enabled()
 

Typedefs

typedef u64 session_handle_t
 
typedef struct session_dgram_pre_hdr_ session_dgram_pre_hdr_t
 
typedef struct session_tx_context_ session_tx_context_t
 
typedef struct _session_manager_main session_manager_main_t
 
typedef int( session_fifo_rx_fn) (vlib_main_t *vm, vlib_node_runtime_t *node, session_fifo_event_t *e0, stream_session_t *s0, int *n_tx_pkts)
 

Enumerations

enum  fifo_event_type_t {
  FIFO_EVENT_APP_RX, FIFO_EVENT_APP_TX, FIFO_EVENT_TIMEOUT, FIFO_EVENT_DISCONNECT,
  FIFO_EVENT_BUILTIN_RX, FIFO_EVENT_RPC
}
 
enum  session_error_t { SESSION_N_ERROR }
 

Functions

static const char * fifo_event_type_str (fifo_event_type_t et)
 
typedef CLIB_PACKED (struct{union{svm_fifo_t *fifo;session_handle_t session_handle;rpc_args_t rpc_args;};u8 event_type;u8 postponed;}) session_fifo_event_t
 
typedef CLIB_PACKED (struct session_dgram_header_{u32 data_length;u32 data_offset;ip46_address_t rmt_ip;ip46_address_t lcl_ip;u16 rmt_port;u16 lcl_port;u8 is_ip4;}) session_dgram_hdr_t
 
 STATIC_ASSERT (sizeof(session_dgram_hdr_t)==(SESSION_CONN_ID_LEN+8),"session conn id wrong length")
 
u8 session_node_lookup_fifo_event (svm_fifo_t *f, session_fifo_event_t *e)
 
static session_manager_main_tvnet_get_session_manager_main ()
 
static u8 stream_session_is_valid (u32 si, u8 thread_index)
 
stream_session_tsession_alloc (u32 thread_index)
 
int session_alloc_fifos (segment_manager_t *sm, stream_session_t *s)
 
void session_free (stream_session_t *s)
 
static stream_session_tsession_get (u32 si, u32 thread_index)
 
static stream_session_tsession_get_if_valid (u64 si, u32 thread_index)
 
static session_handle_t session_handle (stream_session_t *s)
 
static u32 session_index_from_handle (session_handle_t handle)
 
static u32 session_thread_from_handle (session_handle_t handle)
 
static void session_parse_handle (session_handle_t handle, u32 *index, u32 *thread_index)
 
static stream_session_tsession_get_from_handle (session_handle_t handle)
 
static stream_session_tsession_get_from_handle_if_valid (session_handle_t handle)
 
static u8 session_handle_is_local (session_handle_t handle)
 
static transport_proto_t session_type_transport_proto (session_type_t st)
 
static u8 session_type_is_ip4 (session_type_t st)
 
static transport_proto_t session_get_transport_proto (stream_session_t *s)
 
static fib_protocol_t session_get_fib_proto (stream_session_t *s)
 
static session_type_t session_type_from_proto_and_ip (transport_proto_t proto, u8 is_ip4)
 
static u8 session_has_transport (stream_session_t *s)
 
transport_service_type_t session_transport_service_type (stream_session_t *)
 
transport_tx_fn_type_t session_transport_tx_fn_type (stream_session_t *)
 
u8 session_tx_is_dgram (stream_session_t *s)
 
static void session_pool_add_peeker (u32 thread_index)
 Acquires a lock that blocks a session pool from expanding. More...
 
static void session_pool_remove_peeker (u32 thread_index)
 
static stream_session_tsession_get_from_handle_safe (u64 handle)
 Get session from handle and 'lock' pool resize if not in same thread. More...
 
static u32 transport_max_rx_enqueue (transport_connection_t *tc)
 
static u32 transport_rx_fifo_size (transport_connection_t *tc)
 
static u32 transport_tx_fifo_size (transport_connection_t *tc)
 
static u32 session_get_index (stream_session_t *s)
 
static stream_session_tsession_clone_safe (u32 session_index, u32 thread_index)
 
transport_connection_tsession_get_transport (stream_session_t *s)
 
u32 session_tx_fifo_max_dequeue (transport_connection_t *tc)
 
int session_enqueue_stream_connection (transport_connection_t *tc, vlib_buffer_t *b, u32 offset, u8 queue_event, u8 is_in_order)
 
int session_enqueue_dgram_connection (stream_session_t *s, session_dgram_hdr_t *hdr, vlib_buffer_t *b, u8 proto, u8 queue_event)
 
int stream_session_peek_bytes (transport_connection_t *tc, u8 *buffer, u32 offset, u32 max_bytes)
 
u32 stream_session_dequeue_drop (transport_connection_t *tc, u32 max_bytes)
 
int session_stream_connect_notify (transport_connection_t *tc, u8 is_fail)
 
int session_dgram_connect_notify (transport_connection_t *tc, u32 old_thread_index, stream_session_t **new_session)
 Move dgram session to the right thread. More...
 
void stream_session_init_fifos_pointers (transport_connection_t *tc, u32 rx_pointer, u32 tx_pointer)
 Init fifo tail and head pointers. More...
 
void stream_session_accept_notify (transport_connection_t *tc)
 
void stream_session_disconnect_notify (transport_connection_t *tc)
 Notification from transport that connection is being closed. More...
 
void stream_session_delete_notify (transport_connection_t *tc)
 Notification from transport that connection is being deleted. More...
 
void stream_session_reset_notify (transport_connection_t *tc)
 Notify application that connection has been reset. More...
 
int stream_session_accept (transport_connection_t *tc, u32 listener_index, u8 notify)
 Accept a stream session. More...
 
int session_open (u32 app_index, session_endpoint_t *tep, u32 opaque)
 Ask transport to open connection to remote transport endpoint. More...
 
int stream_session_listen (stream_session_t *s, session_endpoint_t *tep)
 Ask transport to listen on local transport endpoint. More...
 
int stream_session_stop_listen (stream_session_t *s)
 Ask transport to stop listening on local transport endpoint. More...
 
void stream_session_disconnect (stream_session_t *s)
 Initialize session disconnect. More...
 
void stream_session_disconnect_transport (stream_session_t *s)
 Notify transport the session can be disconnected. More...
 
void stream_session_cleanup (stream_session_t *s)
 Cleanup transport and session state. More...
 
void session_send_session_evt_to_thread (u64 session_handle, fifo_event_type_t evt_type, u32 thread_index)
 
ssvm_private_tsession_manager_get_evt_q_segment (void)
 
u8format_stream_session (u8 *s, va_list *args)
 Format stream session as per the following format. More...
 
uword unformat_stream_session (unformat_input_t *input, va_list *args)
 
uword unformat_transport_connection (unformat_input_t *input, va_list *args)
 
void session_register_transport (transport_proto_t transport_proto, const transport_proto_vft_t *vft, u8 is_ip4, u32 output_node)
 Initialize session layer for given transport proto and ip version. More...
 
clib_error_tvnet_session_enable_disable (vlib_main_t *vm, u8 is_en)
 
static svm_queue_tsession_manager_get_vpp_event_queue (u32 thread_index)
 
int session_manager_flush_enqueue_events (u8 proto, u32 thread_index)
 Flushes queue of sessions that are to be notified of new data enqueued events. More...
 
int session_manager_flush_all_enqueue_events (u8 transport_proto)
 
static u64 listen_session_get_handle (stream_session_t *s)
 
static stream_session_tlisten_session_get_from_handle (session_handle_t handle)
 
static void listen_session_parse_handle (session_handle_t handle, u32 *index, u32 *thread_index)
 
static stream_session_tlisten_session_new (u8 thread_index, session_type_t type)
 
static stream_session_tlisten_session_get (u32 index)
 
static void listen_session_del (stream_session_t *s)
 
transport_connection_tlisten_session_get_transport (stream_session_t *s)
 
int listen_session_get_local_session_endpoint (stream_session_t *listener, session_endpoint_t *sep)
 
void session_flush_frames_main_thread (vlib_main_t *vm)
 
static u8 session_manager_is_enabled ()
 
void session_node_enable_disable (u8 is_en)
 

Variables

session_fifo_rx_fn session_tx_fifo_peek_and_snd
 
session_fifo_rx_fn session_tx_fifo_dequeue_and_snd
 
session_fifo_rx_fn session_tx_fifo_dequeue_internal
 
session_manager_main_t session_manager_main
 
vlib_node_registration_t session_queue_node
 (constructor) VLIB_REGISTER_NODE (session_queue_node) More...
 
vlib_node_registration_t session_queue_process_node
 (constructor) VLIB_REGISTER_NODE (session_queue_process_node) More...
 

Macro Definition Documentation

#define foreach_session_input_error
Value:
_(NO_SESSION, "No session drops") \
_(NO_LISTENER, "No listener for dst port drops") \
_(ENQUEUED, "Packets pushed into rx fifo") \
_(NOT_READY, "Session not ready packets") \
_(FIFO_FULL, "Packets dropped for lack of rx fifo space") \
_(EVENT_FIFO_FULL, "Events not sent for lack of event fifo space") \
_(API_QUEUE_FULL, "Sessions not created for lack of API queue space") \
_(NEW_SEG_NO_SPACE, "Created segment, couldn't allocate a fifo pair") \
_(NO_SPACE, "Couldn't allocate a fifo pair") \
_(SEG_CREATE, "Couldn't create a new segment")

Definition at line 65 of file session.h.

#define HALF_OPEN_LOOKUP_INVALID_VALUE   ((u64)~0)

Definition at line 25 of file session.h.

#define INVALID_INDEX   ((u32)~0)

Definition at line 26 of file session.h.

#define MAX_HDRS_LEN   100 /* Max number of bytes for headers */

Definition at line 31 of file session.h.

#define session_cli_return_if_not_enabled ( )
Value:
do { \
if (!session_manager_main.is_enabled) \
return clib_error_return(0, "session layer is not enabled"); \
} while (0)
#define clib_error_return(e, args...)
Definition: error.h:99
session_manager_main_t session_manager_main
Definition: session.c:27

Definition at line 616 of file session.h.

#define SESSION_CONN_HDR_LEN   45

Definition at line 126 of file session.h.

#define SESSION_CONN_ID_LEN   37

Definition at line 125 of file session.h.

#define SESSION_LOCAL_HANDLE_PREFIX   0x7FFFFFFF

Definition at line 28 of file session.h.

#define SESSION_PROXY_LISTENER_INDEX   ((u32)~0 - 1)

Definition at line 27 of file session.h.

#define SESSION_Q_PROCESS_FLUSH_FRAMES   1

Definition at line 259 of file session.h.

#define SESSION_Q_PROCESS_STOP   2

Definition at line 260 of file session.h.

Typedef Documentation

typedef int( session_fifo_rx_fn) (vlib_main_t *vm, vlib_node_runtime_t *node, session_fifo_event_t *e0, stream_session_t *s0, int *n_tx_pkts)

Definition at line 156 of file session.h.

Definition at line 91 of file session.h.

typedef struct _session_manager_main session_manager_main_t

Definition at line 153 of file session.h.

Enumeration Type Documentation

Enumerator
FIFO_EVENT_APP_RX 
FIFO_EVENT_APP_TX 
FIFO_EVENT_TIMEOUT 
FIFO_EVENT_DISCONNECT 
FIFO_EVENT_BUILTIN_RX 
FIFO_EVENT_RPC 

Definition at line 33 of file session.h.

Enumerator
SESSION_N_ERROR 

Definition at line 77 of file session.h.

Function Documentation

typedef CLIB_PACKED ( struct{union{svm_fifo_t *fifo;session_handle_t session_handle;rpc_args_t rpc_args;};u8 event_type;u8 postponed;}  )
typedef CLIB_PACKED ( struct session_dgram_header_{u32 data_length;u32 data_offset;ip46_address_t rmt_ip;ip46_address_t lcl_ip;u16 rmt_port;u16 lcl_port;u8 is_ip4;}  )
static const char* fifo_event_type_str ( fifo_event_type_t  et)
inlinestatic

Definition at line 44 of file session.h.

u8* format_stream_session ( u8 s,
va_list *  args 
)

Format stream session as per the following format.

verbose: "Connection", "Rx fifo", "Tx fifo", "Session Index" non-verbose: "Connection"

Definition at line 55 of file session_cli.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void listen_session_del ( stream_session_t s)
inlinestatic

Definition at line 597 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static stream_session_t* listen_session_get ( u32  index)
inlinestatic

Definition at line 591 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static stream_session_t* listen_session_get_from_handle ( session_handle_t  handle)
inlinestatic

Definition at line 568 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u64 listen_session_get_handle ( stream_session_t s)
inlinestatic

Definition at line 561 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int listen_session_get_local_session_endpoint ( stream_session_t listener,
session_endpoint_t sep 
)

Definition at line 1287 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

transport_connection_t* listen_session_get_transport ( stream_session_t s)

Definition at line 1280 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static stream_session_t* listen_session_new ( u8  thread_index,
session_type_t  type 
)
inlinestatic

Definition at line 581 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void listen_session_parse_handle ( session_handle_t  handle,
u32 index,
u32 thread_index 
)
inlinestatic

Definition at line 574 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

stream_session_t* session_alloc ( u32  thread_index)

Definition at line 81 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int session_alloc_fifos ( segment_manager_t sm,
stream_session_t s 
)

Definition at line 116 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static stream_session_t* session_clone_safe ( u32  session_index,
u32  thread_index 
)
inlinestatic

Definition at line 480 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int session_dgram_connect_notify ( transport_connection_t tc,
u32  old_thread_index,
stream_session_t **  new_session 
)

Move dgram session to the right thread.

Definition at line 666 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int session_enqueue_dgram_connection ( stream_session_t s,
session_dgram_hdr_t *  hdr,
vlib_buffer_t b,
u8  proto,
u8  queue_event 
)

Definition at line 362 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int session_enqueue_stream_connection ( transport_connection_t tc,
vlib_buffer_t b,
u32  offset,
u8  queue_event,
u8  is_in_order 
)

Definition at line 306 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void session_flush_frames_main_thread ( vlib_main_t vm)

Definition at line 1307 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void session_free ( stream_session_t s)

Definition at line 108 of file session.c.

+ Here is the caller graph for this function:

static stream_session_t* session_get ( u32  si,
u32  thread_index 
)
inlinestatic

Definition at line 290 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static fib_protocol_t session_get_fib_proto ( stream_session_t s)
inlinestatic

Definition at line 379 of file session.h.

+ Here is the caller graph for this function:

static stream_session_t* session_get_from_handle ( session_handle_t  handle)
inlinestatic

Definition at line 336 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static stream_session_t* session_get_from_handle_if_valid ( session_handle_t  handle)
inlinestatic

Definition at line 345 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static stream_session_t* session_get_from_handle_safe ( u64  handle)
inlinestatic

Get session from handle and 'lock' pool resize if not in same thread.

Caller should drop the peek 'lock' as soon as possible.

Definition at line 435 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static stream_session_t* session_get_if_valid ( u64  si,
u32  thread_index 
)
inlinestatic

Definition at line 297 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 session_get_index ( stream_session_t s)
inlinestatic

Definition at line 474 of file session.h.

+ Here is the caller graph for this function:

transport_connection_t* session_get_transport ( stream_session_t s)

Definition at line 1267 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static transport_proto_t session_get_transport_proto ( stream_session_t s)
inlinestatic

Definition at line 373 of file session.h.

+ Here is the caller graph for this function:

static session_handle_t session_handle ( stream_session_t s)
inlinestatic

Definition at line 310 of file session.h.

+ Here is the caller graph for this function:

static u8 session_handle_is_local ( session_handle_t  handle)
inlinestatic

Definition at line 353 of file session.h.

+ Here is the caller graph for this function:

static u8 session_has_transport ( stream_session_t s)
inlinestatic

Definition at line 392 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 session_index_from_handle ( session_handle_t  handle)
inlinestatic

Definition at line 316 of file session.h.

+ Here is the caller graph for this function:

int session_manager_flush_all_enqueue_events ( u8  transport_proto)

Definition at line 539 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int session_manager_flush_enqueue_events ( u8  transport_proto,
u32  thread_index 
)

Flushes queue of sessions that are to be notified of new data enqueued events.

Parameters
thread_indexThread index for which the flush is to be performed.
Returns
0 on success or a positive number indicating the number of failures due to API queue being full.

Definition at line 515 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ssvm_private_t* session_manager_get_evt_q_segment ( void  )

Definition at line 1214 of file session.c.

+ Here is the caller graph for this function:

static svm_queue_t* session_manager_get_vpp_event_queue ( u32  thread_index)
inlinestatic

Definition at line 552 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u8 session_manager_is_enabled ( )
inlinestatic

Definition at line 611 of file session.h.

+ Here is the caller graph for this function:

void session_node_enable_disable ( u8  is_en)

Definition at line 1405 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8 session_node_lookup_fifo_event ( svm_fifo_t f,
session_fifo_event_t *  e 
)

Definition at line 648 of file session_node.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int session_open ( u32  app_index,
session_endpoint_t rmt,
u32  opaque 
)

Ask transport to open connection to remote transport endpoint.

Stores handle for matching request with reply since the call can be asynchronous. For instance, for TCP the 3-way handshake must complete before reply comes. Session is only created once connection is established.

Parameters
app_indexIndex of the application requesting the connect
stSession type requested.
tepRemote transport endpoint
opaqueOpaque data (typically, api_context) the application expects on open completion.

Definition at line 923 of file session.c.

+ Here is the caller graph for this function:

static void session_parse_handle ( session_handle_t  handle,
u32 index,
u32 thread_index 
)
inlinestatic

Definition at line 328 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void session_pool_add_peeker ( u32  thread_index)
inlinestatic

Acquires a lock that blocks a session pool from expanding.

This is typically used for safely peeking into other threads' pools in order to clone elements. Lock should be dropped as soon as possible by calling session_pool_remove_peeker.

NOTE: Avoid using pool_elt_at_index while the lock is held because it may lead to free elt bitmap expansion/contraction!

Definition at line 412 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void session_pool_remove_peeker ( u32  thread_index)
inlinestatic

Definition at line 421 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void session_register_transport ( transport_proto_t  transport_proto,
const transport_proto_vft_t vft,
u8  is_ip4,
u32  output_node 
)

Initialize session layer for given transport proto and ip version.

Allocates per session type (transport proto + ip version) data structures and adds arc from session queue node to session type output node.

Definition at line 1238 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void session_send_session_evt_to_thread ( u64  session_handle,
fifo_event_type_t  evt_type,
u32  thread_index 
)

Definition at line 60 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int session_stream_connect_notify ( transport_connection_t tc,
u8  is_fail 
)

Definition at line 564 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 session_thread_from_handle ( session_handle_t  handle)
inlinestatic

Definition at line 322 of file session.h.

+ Here is the caller graph for this function:

transport_service_type_t session_transport_service_type ( stream_session_t )

Definition at line 1138 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

transport_tx_fn_type_t session_transport_tx_fn_type ( stream_session_t )

Definition at line 1146 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u32 session_tx_fifo_max_dequeue ( transport_connection_t tc)

Definition at line 417 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8 session_tx_is_dgram ( stream_session_t s)

Definition at line 1154 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static session_type_t session_type_from_proto_and_ip ( transport_proto_t  proto,
u8  is_ip4 
)
inlinestatic

Definition at line 386 of file session.h.

+ Here is the caller graph for this function:

static u8 session_type_is_ip4 ( session_type_t  st)
inlinestatic

Definition at line 367 of file session.h.

+ Here is the caller graph for this function:

static transport_proto_t session_type_transport_proto ( session_type_t  st)
inlinestatic

Definition at line 361 of file session.h.

+ Here is the caller graph for this function:

STATIC_ASSERT ( sizeof(session_dgram_hdr_t)  = =(SESSION_CONN_ID_LEN+8),
"session conn id wrong length"   
)
int stream_session_accept ( transport_connection_t tc,
u32  listener_index,
u8  notify 
)

Accept a stream session.

Optionally ping the server by callback.

Definition at line 789 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void stream_session_accept_notify ( transport_connection_t tc)

Definition at line 702 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void stream_session_cleanup ( stream_session_t s)

Cleanup transport and session state.

Notify transport of the cleanup and free the session. This should be called only if transport reported some error and is already closed.

Definition at line 1122 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void stream_session_delete_notify ( transport_connection_t tc)

Notification from transport that connection is being deleted.

This removes the session if it is still valid. It should be called only on previously fully established sessions. For instance failed connects should call stream_session_connect_notify and indicate that the connect has failed.

Definition at line 760 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u32 stream_session_dequeue_drop ( transport_connection_t tc,
u32  max_bytes 
)

Definition at line 434 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void stream_session_disconnect ( stream_session_t s)

Initialize session disconnect.

Request is always sent to session node to ensure that all outstanding requests are served before transport is notified.

Definition at line 1063 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void stream_session_disconnect_notify ( transport_connection_t tc)

Notification from transport that connection is being closed.

A disconnect is sent to application but state is not removed. Once disconnect is acknowledged by application, session disconnect is called. Ultimately this leads to close being called on transport (passive close).

Definition at line 720 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void stream_session_disconnect_transport ( stream_session_t s)

Notify transport the session can be disconnected.

This should eventually result in a delete notification that allows us to cleanup session state. Called for both active/passive disconnects.

Must be called from the session's thread.

Definition at line 1107 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void stream_session_init_fifos_pointers ( transport_connection_t tc,
u32  rx_pointer,
u32  tx_pointer 
)

Init fifo tail and head pointers.

Useful if transport uses absolute offsets for tracking ooo segments.

Definition at line 554 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u8 stream_session_is_valid ( u32  si,
u8  thread_index 
)
inlinestatic

Definition at line 272 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int stream_session_listen ( stream_session_t s,
session_endpoint_t sep 
)

Ask transport to listen on local transport endpoint.

Parameters
sSession for which listen will be called. Note that unlike established sessions, listen sessions are not associated to a thread.
tepLocal endpoint to be listened on.

Definition at line 1022 of file session.c.

+ Here is the caller graph for this function:

int stream_session_peek_bytes ( transport_connection_t tc,
u8 buffer,
u32  offset,
u32  max_bytes 
)

Definition at line 426 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void stream_session_reset_notify ( transport_connection_t tc)

Notify application that connection has been reset.

Definition at line 775 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int stream_session_stop_listen ( stream_session_t s)

Ask transport to stop listening on local transport endpoint.

Parameters
sSession to stop listening on. It must be in state LISTENING.

Definition at line 1034 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 transport_max_rx_enqueue ( transport_connection_t tc)
inlinestatic

Definition at line 453 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 transport_rx_fifo_size ( transport_connection_t tc)
inlinestatic

Definition at line 460 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 transport_tx_fifo_size ( transport_connection_t tc)
inlinestatic

Definition at line 467 of file session.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword unformat_stream_session ( unformat_input_t input,
va_list *  args 
)

Definition at line 138 of file session_cli.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword unformat_transport_connection ( unformat_input_t input,
va_list *  args 
)

Definition at line 169 of file session_cli.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static session_manager_main_t* vnet_get_session_manager_main ( )
inlinestatic

Definition at line 266 of file session.h.

+ Here is the caller graph for this function:

clib_error_t* vnet_session_enable_disable ( vlib_main_t vm,
u8  is_en 
)

Definition at line 1439 of file session.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Variable Documentation

session_manager_main_t session_manager_main

Definition at line 27 of file session.c.

vlib_node_registration_t session_queue_node
Initial value:
=
{
.function = session_queue_node_fn,
.name = "session-queue",
.format_trace = format_session_queue_trace,
.error_strings = session_queue_error_strings,
.state = VLIB_NODE_STATE_DISABLED,
}
static uword session_queue_node_fn(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: session_node.c:691
static char * session_queue_error_strings[]
Definition: session_node.c:62
#define ARRAY_LEN(x)
Definition: clib.h:59
static u8 * format_session_queue_trace(u8 *s, va_list *args)
Definition: session_node.c:36

(constructor) VLIB_REGISTER_NODE (session_queue_node)

Definition at line 47 of file session_node.c.

vlib_node_registration_t session_queue_process_node

(constructor) VLIB_REGISTER_NODE (session_queue_process_node)

Definition at line 916 of file session_node.c.

session_fifo_rx_fn session_tx_fifo_dequeue_and_snd
session_fifo_rx_fn session_tx_fifo_dequeue_internal
session_fifo_rx_fn session_tx_fifo_peek_and_snd