X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fvnet%2Fsession%2Fsession.h;h=efb9e30b5cc0c249d1148343a2ae65690cad57c1;hb=abce509affe1f25bbb4905670371ad202529d5e0;hp=6e4ea96dd5c67f9e2a3e764cd4d44c6839bec87a;hpb=6cf30adc2cd3aa818e5d97cf71ea8b2fc2aaefa7;p=vpp.git diff --git a/src/vnet/session/session.h b/src/vnet/session/session.h index 6e4ea96dd5c..efb9e30b5cc 100644 --- a/src/vnet/session/session.h +++ b/src/vnet/session/session.h @@ -17,9 +17,6 @@ #include #include -#include -#include -#include #include #include @@ -31,11 +28,12 @@ typedef enum { - FIFO_EVENT_SERVER_RX, - FIFO_EVENT_SERVER_TX, + FIFO_EVENT_APP_RX, + FIFO_EVENT_APP_TX, FIFO_EVENT_TIMEOUT, - FIFO_EVENT_SERVER_EXIT, - FIFO_EVENT_BUILTIN_RX + FIFO_EVENT_DISCONNECT, + FIFO_EVENT_BUILTIN_RX, + FIFO_EVENT_RPC, } fifo_event_type_t; #define foreach_session_input_error \ @@ -94,9 +92,20 @@ typedef enum SESSION_STATE_N_STATES, } stream_session_state_t; +typedef struct +{ + void *fp; + void *arg; +} rpc_args_t; + /* *INDENT-OFF* */ typedef CLIB_PACKED (struct { - svm_fifo_t * fifo; + union + { + svm_fifo_t * fifo; + u64 session_handle; + rpc_args_t rpc_args; + }; u8 event_type; u16 event_id; }) session_fifo_event_t; @@ -108,9 +117,6 @@ typedef struct _stream_session_t svm_fifo_t *server_rx_fifo; svm_fifo_t *server_tx_fifo; - /** svm segment index where fifos were allocated */ - u32 svm_segment_index; - /** Type */ u8 session_type; @@ -125,6 +131,12 @@ typedef struct _stream_session_t /** To avoid n**2 "one event per frame" check */ u8 enqueue_epoch; + /** Pad to a multiple of 8 octets */ + u8 align_pad[2]; + + /** svm segment index where fifos were allocated */ + u32 svm_segment_index; + /** Session index in per_thread pool */ u32 session_index; @@ -139,6 +151,9 @@ typedef struct _stream_session_t /** Parent listener session if the result of an accept */ u32 listener_index; + + /** Opaque, pad to a 64-octet boundary */ + u64 opaque[2]; } stream_session_t; /* Forward definition */ @@ -344,16 +359,17 @@ stream_session_fifo_size (transport_connection_t * tc) } int -stream_session_enqueue_data (transport_connection_t * tc, u8 * data, u16 len, - u8 queue_event); +stream_session_enqueue_data (transport_connection_t * tc, vlib_buffer_t * b, + u32 offset, u8 queue_event, u8 is_in_order); u32 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); -void -stream_session_connect_notify (transport_connection_t * tc, u8 sst, - u8 is_fail); +void stream_session_connect_notify (transport_connection_t * tc, u8 sst, + u8 is_fail); +void stream_session_init_fifos_pointers (transport_connection_t * tc, + u32 rx_pointer, u32 tx_pointer); void stream_session_accept_notify (transport_connection_t * tc); void stream_session_disconnect_notify (transport_connection_t * tc); @@ -370,7 +386,9 @@ int stream_session_listen (stream_session_t * s, transport_endpoint_t * tep); int stream_session_stop_listen (stream_session_t * s); void stream_session_disconnect (stream_session_t * s); void stream_session_cleanup (stream_session_t * s); - +void session_send_session_evt_to_thread (u64 session_handle, + fifo_event_type_t evt_type, + u32 thread_index); u8 *format_stream_session (u8 * s, va_list * args); void session_register_transport (u8 type, const transport_proto_vft_t * vft); @@ -414,7 +432,8 @@ always_inline stream_session_t * listen_session_new (session_type_t type) { stream_session_t *s; - pool_get (session_manager_main.listen_sessions[type], s); + pool_get_aligned (session_manager_main.listen_sessions[type], s, + CLIB_CACHE_LINE_BYTES); memset (s, 0, sizeof (*s)); s->session_type = type;