app_listener_free (app, al);
}
-app_worker_t *
-app_listener_select_worker (app_listener_t * al)
+static app_worker_t *
+app_listener_select_worker (application_t * app, app_listener_t * al)
{
- application_t *app;
u32 wrk_index;
app = application_get (al->app_index);
application_alloc_and_init (app_init_args_t * a)
{
ssvm_segment_type_t seg_type = SSVM_SEGMENT_MEMFD;
- segment_manager_properties_t *props;
+ segment_manager_props_t *props;
vl_api_registration_t *reg;
application_t *app;
u64 *options;
}
else
{
- if (options[APP_OPTIONS_FLAGS] & APP_OPTIONS_FLAGS_EVT_MQ_USE_EVENTFD)
- {
- clib_warning ("mq eventfds can only be used if socket transport is "
- "used for api");
- return VNET_API_ERROR_APP_UNSUPPORTED_CFG;
- }
seg_type = SSVM_SEGMENT_PRIVATE;
}
+ if ((options[APP_OPTIONS_FLAGS] & APP_OPTIONS_FLAGS_EVT_MQ_USE_EVENTFD)
+ && seg_type != SSVM_SEGMENT_MEMFD)
+ {
+ clib_warning ("mq eventfds can only be used if socket transport is "
+ "used for binary api");
+ return VNET_API_ERROR_APP_UNSUPPORTED_CFG;
+ }
+
if (!application_verify_cfg (seg_type))
return VNET_API_ERROR_APP_UNSUPPORTED_CFG;
app->flags |= APP_OPTIONS_FLAGS_USE_GLOBAL_SCOPE;
props = application_segment_manager_properties (app);
- segment_manager_properties_init (props);
- props->segment_size = options[APP_OPTIONS_ADD_SEGMENT_SIZE];
+ segment_manager_props_init (props);
+ props->segment_size = options[APP_OPTIONS_SEGMENT_SIZE];
props->prealloc_fifos = options[APP_OPTIONS_PREALLOC_FIFO_PAIRS];
if (options[APP_OPTIONS_ADD_SEGMENT_SIZE])
{
a->app_index = app->app_index;
APP_DBG ("New app name: %v api index: %u index %u", app->name,
- app->api_client_index, app->app_index);
+ a->api_client_index, app->app_index);
return 0;
}
* The app event queue allocated in first segment is cleared with
* the segment manager. No need to explicitly free it.
*/
- APP_DBG ("Delete app name %v api index: %d index: %d", app->name,
- app->api_client_index, app->app_index);
+ APP_DBG ("Delete app name %v index: %d", app->name, app->app_index);
if (application_is_proxy (app))
application_remove_proxy (app);
}
APP_DBG ("Detaching for app %v index %u api client index %u", app->name,
- app->app_index, app->api_client_index);
+ app->app_index, api_client_index);
/* *INDENT-OFF* */
pool_foreach (wrk_map, app->worker_maps, ({
app_worker_t *
application_listener_select_worker (session_t * ls)
{
+ application_t *app;
app_listener_t *al;
- al = app_listener_get_w_session (ls);
- return app_listener_select_worker (al);
+ app = application_get (ls->app_index);
+ al = app_listener_get (app, ls->al_index);
+ return app_listener_select_worker (app, al);
}
int
/*
* Setup first segment manager
*/
- sm = segment_manager_new ();
+ sm = segment_manager_alloc ();
sm->app_wrk_index = app_wrk->wrk_index;
if ((rv = segment_manager_init (sm, app->sm_properties.segment_size,
int
vnet_app_worker_add_del (vnet_app_worker_add_del_args_t * a)
{
- svm_fifo_segment_private_t *fs;
+ fifo_segment_t *fs;
app_worker_map_t *wrk_map;
app_worker_t *app_wrk;
segment_manager_t *sm;
vl_api_registration_t *regp;
regp = vl_api_client_index_to_registration (api_client_index);
if (regp)
- return format (0, "%s%c", regp->name, 0);
+ return format (0, "%s", regp->name);
clib_warning ("api client index %u does not have an api registration!",
api_client_index);
- return format (0, "unknown%c", 0);
+ return format (0, "unknown");
}
/**
int
vnet_application_attach (vnet_app_attach_args_t * a)
{
- svm_fifo_segment_private_t *fs;
+ fifo_segment_t *fs;
application_t *app = 0;
app_worker_t *app_wrk;
segment_manager_t *sm;
hash_unset (old_wrk->listeners_table, listen_session_get_handle (s));
if (session_transport_service_type (s) == TRANSPORT_SERVICE_CL
&& s->rx_fifo)
- segment_manager_dealloc_fifos (s->rx_fifo->segment_index, s->rx_fifo,
- s->tx_fifo);
+ segment_manager_dealloc_fifos (s->rx_fifo, s->tx_fifo);
app = application_get (old_wrk->app_index);
if (!app)
return app->flags & APP_OPTIONS_FLAGS_USE_GLOBAL_SCOPE;
}
-u8
-application_use_mq_for_ctrl (application_t * app)
-{
- return app->flags & APP_OPTIONS_FLAGS_USE_MQ_FOR_CTRL_MSGS;
-}
-
static clib_error_t *
application_start_stop_proxy_fib_proto (application_t * app, u8 fib_proto,
u8 transport_proto, u8 is_start)
app_worker_start_listen (app_wrk, al);
s = listen_session_get (al->session_index);
- s->enqueue_epoch = SESSION_PROXY_LISTENER_INDEX;
+ s->flags |= SESSION_F_PROXY;
}
}
else
/* *INDENT-ON* */
}
-segment_manager_properties_t *
+segment_manager_props_t *
application_segment_manager_properties (application_t * app)
{
return &app->sm_properties;
}
-segment_manager_properties_t *
+segment_manager_props_t *
application_get_segment_manager_properties (u32 app_index)
{
application_t *app = application_get (app_index);
{
application_t *app = va_arg (*args, application_t *);
CLIB_UNUSED (int verbose) = va_arg (*args, int);
- segment_manager_properties_t *props;
+ segment_manager_props_t *props;
const u8 *app_ns_name, *app_name;
app_worker_map_t *wrk_map;
app_worker_t *app_wrk;
props = application_segment_manager_properties (app);
if (!verbose)
{
- s = format (s, "%-10u%-20s%-40s", app->app_index, app_name,
+ s = format (s, "%-10u%-20v%-40s", app->app_index, app_name,
app_ns_name);
return s;
}
- s = format (s, "app-name %s app-index %u ns-index %u seg-size %U\n",
+ s = format (s, "app-name %v app-index %u ns-index %u seg-size %U\n",
app_name, app->app_index, app->ns_index,
format_memory_size, props->add_segment_size);
s = format (s, "rx-fifo-size %U tx-fifo-size %U workers:\n",