return clib_error_return_code (0, VNET_API_ERROR_INVALID_VALUE, 0,
"sw_if_index or fib_id must be "
"configured");
- st = session_table_alloc ();
- session_table_init (st);
-
app_ns = app_namespace_get_from_id (a->ns_id);
if (!app_ns)
- app_ns = app_namespace_alloc (a->ns_id);
+ {
+ app_ns = app_namespace_alloc (a->ns_id);
+ st = session_table_alloc ();
+ session_table_init (st, FIB_PROTOCOL_MAX);
+ st->is_local = 1;
+ st->appns_index = app_namespace_index (app_ns);
+ app_ns->local_table_index = session_table_index (st);
+ }
app_ns->ns_secret = a->secret;
app_ns->sw_if_index = a->sw_if_index;
- app_ns->local_table_index = session_table_index (st);
app_ns->ip4_fib_index =
fib_table_find (FIB_PROTOCOL_IP4, a->ip4_fib_id);
app_ns->ip6_fib_index =
fib_table_find (FIB_PROTOCOL_IP6, a->ip6_fib_id);
+ session_lookup_set_tables_appns (app_ns);
}
else
{
return app_namespace_id (app_ns);
}
+u32
+app_namespace_get_fib_index (app_namespace_t * app_ns, u8 fib_proto)
+{
+ return fib_proto == FIB_PROTOCOL_IP4 ?
+ app_ns->ip4_fib_index : app_ns->ip6_fib_index;
+}
+
+session_table_t *
+app_namespace_get_local_table (app_namespace_t * app_ns)
+{
+ return session_table_get (app_ns->local_table_index);
+}
+
void
app_namespaces_init (void)
{
u8 *ns_id = format (0, "default");
- app_namespace_lookup_table =
- hash_create_vec (0, sizeof (u8), sizeof (uword));
+
+ if (!app_namespace_lookup_table)
+ app_namespace_lookup_table =
+ hash_create_vec (0, sizeof (u8), sizeof (uword));
/*
* Allocate default namespace