+ app_listener_free (app, al);
+}
+
+app_worker_t *
+app_listener_select_worker (app_listener_t * al)
+{
+ application_t *app;
+ u32 wrk_index;
+
+ app = application_get (al->app_index);
+ wrk_index = clib_bitmap_next_set (al->workers, al->accept_rotor + 1);
+ if (wrk_index == ~0)
+ wrk_index = clib_bitmap_first_set (al->workers);
+
+ ASSERT (wrk_index != ~0);
+ al->accept_rotor = wrk_index;
+ return application_get_worker (app, wrk_index);
+}
+
+session_t *
+app_listener_get_session (app_listener_t * al)
+{
+ if (al->session_index == SESSION_INVALID_INDEX)
+ return 0;
+
+ return listen_session_get (al->session_index);
+}
+
+static app_worker_map_t *
+app_worker_map_alloc (application_t * app)
+{
+ app_worker_map_t *map;
+ pool_get (app->worker_maps, map);
+ clib_memset (map, 0, sizeof (*map));
+ return map;
+}
+
+static u32
+app_worker_map_index (application_t * app, app_worker_map_t * map)
+{
+ return (map - app->worker_maps);
+}
+
+static void
+app_worker_map_free (application_t * app, app_worker_map_t * map)
+{
+ pool_put (app->worker_maps, map);
+}
+
+static app_worker_map_t *
+app_worker_map_get (application_t * app, u32 map_index)
+{
+ if (pool_is_free_index (app->worker_maps, map_index))
+ return 0;
+ return pool_elt_at_index (app->worker_maps, map_index);
+}
+
+static const u8 *
+app_get_name (application_t * app)
+{
+ return app->name;
+}
+
+u32
+application_session_table (application_t * app, u8 fib_proto)
+{
+ app_namespace_t *app_ns;
+ app_ns = app_namespace_get (app->ns_index);
+ if (!application_has_global_scope (app))
+ return APP_INVALID_INDEX;
+ if (fib_proto == FIB_PROTOCOL_IP4)
+ return session_lookup_get_index_for_fib (fib_proto,
+ app_ns->ip4_fib_index);
+ else
+ return session_lookup_get_index_for_fib (fib_proto,
+ app_ns->ip6_fib_index);
+}
+
+u32
+application_local_session_table (application_t * app)
+{
+ app_namespace_t *app_ns;
+ if (!application_has_local_scope (app))
+ return APP_INVALID_INDEX;
+ app_ns = app_namespace_get (app->ns_index);
+ return app_ns->local_table_index;
+}
+
+/**
+ * Returns app name for app-index
+ */
+const u8 *
+application_name_from_index (u32 app_index)
+{
+ application_t *app = application_get (app_index);
+ if (!app)
+ return 0;
+ return app_get_name (app);
+}
+
+static void
+application_api_table_add (u32 app_index, u32 api_client_index)
+{
+ if (api_client_index != APP_INVALID_INDEX)
+ hash_set (app_main.app_by_api_client_index, api_client_index, app_index);
+}
+
+static void
+application_api_table_del (u32 api_client_index)
+{
+ hash_unset (app_main.app_by_api_client_index, api_client_index);
+}