X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fsession_types.h;h=16d4843157267d5a73a6e913d4645d550f062da7;hb=c00f480ba080847417b4ecb41118d5079f9860c7;hp=a0d33622d6fcac2a9136fc33d70b5bd4aae0c162;hpb=11e2cf5f1a37965001efee6a921a3fb2aabcddf6;p=vpp.git diff --git a/src/vnet/session/session_types.h b/src/vnet/session/session_types.h index a0d33622d6f..16d48431572 100644 --- a/src/vnet/session/session_types.h +++ b/src/vnet/session/session_types.h @@ -19,7 +19,9 @@ #include #include -#define SESSION_LISTENER_PREFIX 0x5FFFFFFF +#define SESSION_INVALID_INDEX ((u32)~0) +#define SESSION_INVALID_HANDLE ((u64)~0) +#define SESSION_CTRL_MSG_MAX_SIZE 84 #define foreach_session_endpoint_fields \ foreach_transport_endpoint_cfg_fields \ @@ -42,6 +44,10 @@ typedef struct _session_endpoint_cfg u32 ns_index; u8 original_tp; u8 *hostname; + u64 parent_handle; + u32 ckpair_index; + u8 crypto_engine; + u8 flags; } session_endpoint_cfg_t; #define SESSION_IP46_ZERO \ @@ -81,6 +87,8 @@ typedef struct _session_endpoint_cfg .app_wrk_index = ENDPOINT_INVALID_INDEX, \ .opaque = ENDPOINT_INVALID_INDEX, \ .hostname = 0, \ + .parent_handle = SESSION_INVALID_HANDLE, \ + .ckpair_index = 0 \ } #define session_endpoint_to_transport(_sep) ((transport_endpoint_t *)_sep) @@ -109,25 +117,59 @@ session_endpoint_is_zero (session_endpoint_t * sep) typedef u8 session_type_t; typedef u64 session_handle_t; +typedef enum +{ + SESSION_CLEANUP_TRANSPORT, + SESSION_CLEANUP_SESSION, +} session_cleanup_ntf_t; + /* * Session states */ +#define foreach_session_state \ + _(CREATED, "created") \ + _(LISTENING, "listening") \ + _(CONNECTING, "connecting") \ + _(ACCEPTING, "accepting") \ + _(READY, "ready") \ + _(OPENED, "opened") \ + _(TRANSPORT_CLOSING, "transport-closing") \ + _(CLOSING, "closing") \ + _(APP_CLOSED, "app-closed") \ + _(TRANSPORT_CLOSED, "transport-closed") \ + _(CLOSED, "closed") \ + _(TRANSPORT_DELETED, "transport-deleted") \ + typedef enum { - SESSION_STATE_CREATED, - SESSION_STATE_LISTENING, - SESSION_STATE_CONNECTING, - SESSION_STATE_ACCEPTING, - SESSION_STATE_READY, - SESSION_STATE_OPENED, - SESSION_STATE_TRANSPORT_CLOSING, - SESSION_STATE_CLOSING, - SESSION_STATE_CLOSED_WAITING, - SESSION_STATE_TRANSPORT_CLOSED, - SESSION_STATE_CLOSED, - SESSION_STATE_N_STATES, +#define _(sym, str) SESSION_STATE_ ## sym, + foreach_session_state +#undef _ + SESSION_N_STATES, } session_state_t; +#define foreach_session_flag \ + _(RX_EVT, "rx-event") \ + _(PROXY, "proxy") \ + _(CUSTOM_TX, "custom-tx") \ + _(IS_MIGRATING, "migrating") \ + _(UNIDIRECTIONAL, "unidirectional") \ + +typedef enum session_flags_bits_ +{ +#define _(sym, str) SESSION_F_BIT_ ## sym, + foreach_session_flag +#undef _ + SESSION_N_FLAGS +} session_flag_bits_t; + +typedef enum session_flags_ +{ +#define _(sym, str) SESSION_F_ ## sym = 1 << SESSION_F_BIT_ ## sym, + foreach_session_flag +#undef _ +} session_flags_t; + typedef struct session_ { /** Pointers to rx/tx buffers. Once allocated, these do not move */ @@ -149,8 +191,8 @@ typedef struct session_ /** Index of the thread that allocated the session */ u8 thread_index; - /** Tracks last enqueue epoch to avoid generating multiple enqueue events */ - u64 enqueue_epoch; + /** Session flags. See @ref session_flags_t */ + u32 flags; /** Index of the transport connection associated to the session */ u32 connection_index; @@ -161,7 +203,7 @@ typedef struct session_ union { /** Parent listener session index if the result of an accept */ - u32 listener_index; + session_handle_t listener_handle; /** App listener index in app's listener pool if a listener */ u32 al_index; @@ -258,6 +300,12 @@ session_parse_handle (session_handle_t handle, u32 * index, *thread_index = session_thread_from_handle (handle); } +static inline session_handle_t +session_make_handle (u32 session_index, u32 thread_index) +{ + return (((u64) thread_index << 32) | (u64) session_index); +} + typedef enum { SESSION_IO_EVT_RX, @@ -267,21 +315,48 @@ typedef enum SESSION_IO_EVT_BUILTIN_TX, SESSION_CTRL_EVT_RPC, SESSION_CTRL_EVT_CLOSE, + SESSION_CTRL_EVT_RESET, SESSION_CTRL_EVT_BOUND, SESSION_CTRL_EVT_UNLISTEN_REPLY, SESSION_CTRL_EVT_ACCEPTED, SESSION_CTRL_EVT_ACCEPTED_REPLY, SESSION_CTRL_EVT_CONNECTED, - SESSION_CTRL_EVT_CONNECTED_REPLY, SESSION_CTRL_EVT_DISCONNECTED, SESSION_CTRL_EVT_DISCONNECTED_REPLY, - SESSION_CTRL_EVT_RESET, SESSION_CTRL_EVT_RESET_REPLY, SESSION_CTRL_EVT_REQ_WORKER_UPDATE, SESSION_CTRL_EVT_WORKER_UPDATE, SESSION_CTRL_EVT_WORKER_UPDATE_REPLY, + SESSION_CTRL_EVT_DISCONNECT, + SESSION_CTRL_EVT_CONNECT, + SESSION_CTRL_EVT_CONNECT_URI, + SESSION_CTRL_EVT_LISTEN, + SESSION_CTRL_EVT_LISTEN_URI, + SESSION_CTRL_EVT_UNLISTEN, + SESSION_CTRL_EVT_APP_DETACH, } session_evt_type_t; +#define foreach_session_ctrl_evt \ + _(LISTEN, listen) \ + _(LISTEN_URI, listen_uri) \ + _(BOUND, bound) \ + _(UNLISTEN, unlisten) \ + _(UNLISTEN_REPLY, unlisten_reply) \ + _(ACCEPTED, accepted) \ + _(ACCEPTED_REPLY, accepted_reply) \ + _(CONNECT, connect) \ + _(CONNECT_URI, connect_uri) \ + _(CONNECTED, connected) \ + _(DISCONNECT, disconnect) \ + _(DISCONNECTED, disconnected) \ + _(DISCONNECTED_REPLY, disconnected_reply) \ + _(RESET_REPLY, reset_reply) \ + _(REQ_WORKER_UPDATE, req_worker_update) \ + _(WORKER_UPDATE, worker_update) \ + _(WORKER_UPDATE_REPLY, worker_update_reply) \ + _(APP_DETACH, app_detach) \ + + /* Deprecated and will be removed. Use types above */ #define FIFO_EVENT_APP_RX SESSION_IO_EVT_RX #define FIFO_EVENT_APP_TX SESSION_IO_EVT_TX @@ -311,6 +386,7 @@ typedef struct u32 session_index; session_handle_t session_handle; session_rpc_args_t rpc_args; + u32 ctrl_data_index; struct { u8 data[0];