+typedef struct app_main_
+{
+ /**
+ * Pool from which we allocate all applications
+ */
+ application_t *app_pool;
+
+ /**
+ * Pool of workers associated to apps
+ */
+ app_worker_t *workers;
+
+ /**
+ * Hash table of apps by api client index
+ */
+ uword *app_by_api_client_index;
+
+ /**
+ * Hash table of builtin apps by name
+ */
+ uword *app_by_name;
+} app_main_t;
+
+#define foreach_app_init_args \
+ _(u32, api_client_index) \
+ _(u8 *, name) \
+ _(u64 *, options) \
+ _(u8 *, namespace_id) \
+ _(session_cb_vft_t *, session_cb_vft) \
+ _(u32, app_index) \
+
+typedef struct app_init_args_
+{
+#define _(_type, _name) _type _name;
+ foreach_app_init_args
+#undef _
+} app_init_args_t;
+
+typedef struct _vnet_app_worker_add_del_args
+{
+ u32 app_index; /**< App for which a new worker is requested */
+ u32 wrk_map_index; /**< Index to delete or return value if add */
+ u32 api_client_index; /**< Binary API client index */
+ ssvm_private_t *segment; /**< First segment in segment manager */
+ u64 segment_handle; /**< Handle for the segment */
+ svm_msg_q_t *evt_q; /**< Worker message queue */
+ u8 is_add; /**< Flag set if addition */
+} vnet_app_worker_add_del_args_t;
+