16 #ifndef SRC_VNET_SESSION_APPLICATION_H_ 17 #define SRC_VNET_SESSION_APPLICATION_H_ 27 #define APP_DBG(_fmt, _args...) clib_warning (_fmt, ##_args) 29 #define APP_DBG(_fmt, _args...) 162 #define _(_type, _name) _type _name; 167 typedef struct _vnet_app_worker_add_del_args
178 #define APP_INVALID_INDEX ((u32)~0) 179 #define APP_NS_INVALID_INDEX ((u32)~0) 180 #define APP_INVALID_SEGMENT_MANAGER_INDEX ((u32) ~0) 321 u32 context,
int rv);
int app_worker_lock_and_send_event(app_worker_t *app, session_t *s, u8 evt_type)
Send event to application.
struct _vnet_app_worker_add_del_args vnet_app_worker_add_del_args_t
int app_worker_init_accepted(session_t *s)
session_t * app_worker_proxy_listener(app_worker_t *app, u8 fib_proto, u8 transport_proto)
int app_worker_reset_notify(app_worker_t *app_wrk, session_t *s)
u32 al_index
app listener index in app pool
int mq_send_session_connected_cb(u32 app_wrk_index, u32 api_context, session_t *s, session_error_t err)
int app_worker_connect_notify(app_worker_t *app_wrk, session_t *s, session_error_t err, u32 opaque)
app_cert_key_pair_t * app_cert_key_pair_get(u32 index)
u32 ns_index
Namespace the application belongs to.
u32 * detached_seg_managers
Vector of detached listener segment managers.
application_t * application_lookup_name(const u8 *name)
application_t * application_get_if_valid(u32 index)
int app_worker_del_half_open(app_worker_t *app_wrk, transport_proto_t tp, session_handle_t ho_handle)
segment_manager_props_t * application_segment_manager_properties(application_t *app)
void application_remove_proxy(application_t *app)
segment_manager_t * app_worker_get_or_alloc_connect_segment_manager(app_worker_t *)
int app_worker_connect_session(app_worker_t *app, session_endpoint_t *tep, u32 api_context)
app_listener_t * listeners
Pool of listeners for the app.
u32 wrk_map_index
Worker index in app's map pool.
app_cert_key_pair_t * cert_key_pair_store
Pool from which we allocate certificates (key, cert)
app_listener_t * app_listener_get_w_session(session_t *ls)
int app_worker_add_segment_notify(app_worker_t *app_wrk, u64 segment_handle)
Send an API message to the external app, to map new segment.
uword * listeners_table
Lookup tables for listeners.
application_t * application_lookup(u32 api_client_index)
struct app_listener_ app_listener_t
u8 * format_crypto_context(u8 *s, va_list *args)
u32 connects_seg_manager
Segment manager used for outgoing connects issued by the app.
segment_manager_t * app_worker_get_listen_segment_manager(app_worker_t *, session_t *)
app_listener_t * app_listener_lookup(application_t *app, session_endpoint_cfg_t *sep)
u8 app_crypto_engine_n_types(void)
uword unformat_application_proto(unformat_input_t *input, va_list *args)
u32 app_index
owning app index
app_worker_t * application_listener_select_worker(session_t *ls)
enum session_ft_action_ session_ft_action_t
session_t * app_listener_get_local_session(app_listener_t *al)
u32 first_segment_manager
First segment manager has in the the first segment the application's event fifo.
u32 local_index
local listening session index
u32 session_index
global listening session index
session_handle_t app_listen_session_handle(session_t *ls)
Get app listener handle for listening session.
u8 tls_engine
Preferred tls engine.
struct app_worker_ app_worker_t
struct _session_endpoint_cfg session_endpoint_cfg_t
void app_listener_cleanup(app_listener_t *app_listener)
int app_worker_accept_notify(app_worker_t *app_wrk, session_t *s)
#define foreach_app_init_args
int application_is_builtin(application_t *app)
app_cert_key_pair_t * app_cert_key_pair_get_default()
int mq_send_session_bound_cb(u32 app_wrk_index, u32 api_context, session_handle_t handle, int rv)
struct _segment_manager_props segment_manager_props_t
segment_manager_t * app_worker_get_connect_segment_manager(app_worker_t *)
app_listener_t * app_listener_get(application_t *app, u32 al_index)
u32 wrk_index
Worker index in global worker pool.
app_worker_t * app_worker_get_if_valid(u32 wrk_index)
int app_worker_session_fifo_tuning(app_worker_t *app_wrk, session_t *s, svm_fifo_t *f, session_ft_action_t act, u32 len)
app_worker_t * app_worker_alloc(application_t *app)
int application_change_listener_owner(session_t *s, app_worker_t *app_wrk)
u8 * format_app_worker_listener(u8 *s, va_list *args)
app_worker_map_t * worker_maps
Pool of mappings that keep track of workers associated to this app.
app_listener_t * app_listener_get_w_handle(session_handle_t handle)
Get app listener for listener session handle.
int app_worker_transport_closed_notify(app_worker_t *app_wrk, session_t *s)
uword * app_by_name
Hash table of builtin apps by name.
session_t * app_worker_first_listener(app_worker_t *app, u8 fib_proto, u8 transport_proto)
segment_manager_props_t sm_properties
Segment manager properties.
int app_worker_builtin_rx(app_worker_t *app_wrk, session_t *s)
struct app_init_args_ app_init_args_t
u8 * format_crypto_engine(u8 *s, va_list *args)
int app_worker_cleanup_notify(app_worker_t *app_wrk, session_t *s, session_cleanup_ntf_t ntf)
clib_bitmap_t * workers
workers accepting connections
clib_spinlock_t detached_seg_managers_lock
Protects detached seg managers.
int app_listener_alloc_and_init(application_t *app, session_endpoint_cfg_t *sep, app_listener_t **listener)
int app_worker_init_connected(app_worker_t *app_wrk, session_t *s)
int vnet_app_worker_add_del(vnet_app_worker_add_del_args_t *a)
const u8 * application_name_from_index(u32 app_or_wrk)
Returns app name for app-index.
u8 application_has_global_scope(application_t *app)
int app_worker_add_half_open(app_worker_t *app_wrk, transport_proto_t tp, session_handle_t ho_handle, session_handle_t wrk_handle)
application_t * application_get(u32 index)
void app_worker_del_detached_sm(app_worker_t *app_wrk, u32 sm_index)
int application_is_proxy(application_t *app)
int app_worker_send_event(app_worker_t *app, session_t *s, u8 evt)
uword * app_by_api_client_index
Hash table of apps by api client index.
uword ** half_open_table
Per transport proto hash tables of half-open connection handles.
session_cb_vft_t cb_fns
Callbacks: shoulder-taps for the server/client.
u32 app_worker_n_listeners(app_worker_t *app)
enum _transport_proto transport_proto_t
u32 application_session_table(application_t *app, u8 fib_proto)
u32 accept_rotor
last worker to accept a connection
int app_worker_migrate_notify(app_worker_t *app_wrk, session_t *s, session_handle_t new_sh)
int app_worker_del_segment_notify(app_worker_t *app_wrk, u64 segment_handle)
struct app_main_ app_main_t
u32 app_index
App index in app pool.
struct app_worker_map_ app_worker_map_t
u32 application_local_session_table(application_t *app)
u64 app_worker_lookup_half_open(app_worker_t *app_wrk, transport_proto_t tp, session_handle_t ho_handle)
struct application_ application_t
session_handle_t app_listener_handle(app_listener_t *app_listener)
app_worker_t * app_worker_get(u32 wrk_index)
application_t * app_pool
Pool from which we allocate all applications.
int application_alloc_worker_and_init(application_t *app, app_worker_t **wrk)
u8 * name
Name registered by builtin apps.
application_t * app_worker_get_app(u32 wrk_index)
session_handle_t ls_handle
session handle of the local or global listening session that also identifies the app listener ...
int app_worker_alloc_connects_segment_manager(app_worker_t *app)
struct _segment_manager segment_manager_t
int app_worker_builtin_tx(app_worker_t *app_wrk, session_t *s)
session_t * app_listener_get_session(app_listener_t *al)
int app_worker_start_listen(app_worker_t *app_wrk, app_listener_t *lstnr)
u8 application_has_local_scope(application_t *app)
u32 app_index
Index of owning app.
int application_is_builtin_proxy(application_t *app)
int app_worker_own_session(app_worker_t *app_wrk, session_t *s)
int app_worker_stop_listen(app_worker_t *app_wrk, app_listener_t *al)
void app_worker_free(app_worker_t *app_wrk)
app_worker_t * application_get_default_worker(application_t *app)
segment_manager_props_t * application_get_segment_manager_properties(u32 app_index)
enum session_error_ session_error_t
crypto_engine_type_t app_crypto_engine_type_add(void)
enum crypto_engine_type_ crypto_engine_type_t
void app_worker_format_connects(app_worker_t *app_wrk, int verbose)
u32 api_client_index
API index for the worker.
int app_worker_close_notify(app_worker_t *app_wrk, session_t *s)
struct _session_endpoint session_endpoint_t
svm_msg_q_t * event_queue
Application listens for events on this svm queue.
u8 * format_app_worker(u8 *s, va_list *args)
struct _svm_fifo svm_fifo_t
void application_setup_proxy(application_t *app)
CLIB_CACHE_LINE_ALIGN_MARK(cacheline0)
app_cert_key_pair_t * app_cert_key_pair_get_if_valid(u32 index)
app_worker_t * application_get_worker(application_t *app, u32 wrk_index)
crypto_engine_type_t last_crypto_engine
u8 first_segment_manager_in_use
void mq_send_unlisten_reply(app_worker_t *app_wrk, session_handle_t sh, u32 context, int rv)