session: api to add new transport types
[vpp.git] / src / vnet / session / session_table.c
index c74e290..d0b576f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2017-2019 Cisco and/or its affiliates.
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at:
@@ -78,32 +78,59 @@ session_table_init (session_table_t * slt, u8 fib_proto)
 #undef _
 
 #define _(af,table,parm,value)                                          \
-  if (session_manager_main.configured_##af##_##table##_table_##parm)    \
+  if (session_main.configured_##af##_##table##_table_##parm)    \
     configured_##af##_##table##_table_##parm =                          \
-      session_manager_main.configured_##af##_##table##_table_##parm;
+      session_main.configured_##af##_##table##_table_##parm;
   foreach_hash_table_parameter;
 #undef _
 
   if (fib_proto == FIB_PROTOCOL_IP4 || all)
     {
-      clib_bihash_init_16_8 (&slt->v4_session_hash, "v4 session table",
-                            configured_v4_session_table_buckets,
-                            configured_v4_session_table_memory);
-      clib_bihash_init_16_8 (&slt->v4_half_open_hash, "v4 half-open table",
-                            configured_v4_halfopen_table_buckets,
-                            configured_v4_halfopen_table_memory);
+      clib_bihash_init2_args_16_8_t _a, *a = &_a;
+
+      memset (a, 0, sizeof (*a));
+      a->h = &slt->v4_session_hash;
+      a->name = "v4 session table";
+      a->nbuckets = configured_v4_session_table_buckets;
+      a->memory_size = configured_v4_session_table_memory;
+      a->dont_add_to_all_bihash_list = 1;
+      a->instantiate_immediately = 1;
+      clib_bihash_init2_16_8 (a);
+
+      memset (a, 0, sizeof (*a));
+      a->h = &slt->v4_half_open_hash;
+      a->name = "v4 half-open table";
+      a->nbuckets = configured_v4_halfopen_table_buckets;
+      a->memory_size = configured_v4_halfopen_table_memory;
+      a->dont_add_to_all_bihash_list = 1;
+      a->instantiate_immediately = 1;
+      clib_bihash_init2_16_8 (a);
     }
   if (fib_proto == FIB_PROTOCOL_IP6 || all)
     {
-      clib_bihash_init_48_8 (&slt->v6_session_hash, "v6 session table",
-                            configured_v6_session_table_buckets,
-                            configured_v6_session_table_memory);
-      clib_bihash_init_48_8 (&slt->v6_half_open_hash, "v6 half-open table",
-                            configured_v6_halfopen_table_buckets,
-                            configured_v6_halfopen_table_memory);
+      clib_bihash_init2_args_48_8_t _a, *a = &_a;
+
+      memset (a, 0, sizeof (*a));
+      a->h = &slt->v6_session_hash;
+      a->name = "v6 session table";
+      a->nbuckets = configured_v6_session_table_buckets;
+      a->memory_size = configured_v6_session_table_memory;
+      a->dont_add_to_all_bihash_list = 1;
+      a->instantiate_immediately = 1;
+      clib_bihash_init2_48_8 (a);
+
+      memset (a, 0, sizeof (*a));
+      a->h = &slt->v6_half_open_hash;
+      a->name = "v6 half-open table";
+      a->nbuckets = configured_v6_halfopen_table_buckets;
+      a->memory_size = configured_v6_halfopen_table_memory;
+      a->dont_add_to_all_bihash_list = 1;
+      a->instantiate_immediately = 1;
+      clib_bihash_init2_48_8 (a);
     }
 
-  for (i = 0; i < TRANSPORT_N_PROTO; i++)
+  vec_validate (slt->session_rules, TRANSPORT_N_PROTOS - 1);
+  for (i = 0; i < TRANSPORT_N_PROTOS; i++)
     session_rules_table_init (&slt->session_rules[i]);
 }
 
@@ -113,11 +140,12 @@ typedef struct _ip4_session_table_walk_ctx_t
   void *ctx;
 } ip4_session_table_walk_ctx_t;
 
-void
+static int
 ip4_session_table_walk_cb (clib_bihash_kv_16_8_t * kvp, void *arg)
 {
   ip4_session_table_walk_ctx_t *ctx = arg;
   ctx->fn (kvp, ctx->ctx);
+  return (BIHASH_WALK_CONTINUE);
 }
 
 void