session: add Source Deny List

With this feature, session enable is now modified to have 3 modes of operation
session enable -- only enable session
session enable rt-backend sdl -- enable session with sdl
session enable rt-backend rule-table -- enable session with rule-table

session rule tables are now created on demand, upon adding first rule
to the rule table.

refactor session table to remove depenency from sesssion rules table. Now
session rules table APIs take srtg_handle and transport
proto instead of srt pointer.

Type: feature

Change-Id: Idde6a9b2f46b29bb931f9039636562575572aa14
Signed-off-by: Steven Luong <sluong@cisco.com>
diff --git a/src/vnet/session/session_table.c b/src/vnet/session/session_table.c
index dbbe771..5dafe0e 100644
--- a/src/vnet/session/session_table.c
+++ b/src/vnet/session/session_table.c
@@ -15,6 +15,7 @@
 
 #include <vnet/session/session_table.h>
 #include <vnet/session/session.h>
+#include <vnet/session/session_rules_table.h>
 
 /**
  * Pool of session tables
@@ -64,12 +65,8 @@
 session_table_free (session_table_t *slt, u8 fib_proto)
 {
   u8 all = fib_proto > FIB_PROTOCOL_IP6 ? 1 : 0;
-  int i;
 
-  for (i = 0; i < TRANSPORT_N_PROTOS; i++)
-    session_rules_table_free (&slt->session_rules[i]);
-
-  vec_free (slt->session_rules);
+  session_rules_table_free (slt, fib_proto);
 
   if (fib_proto == FIB_PROTOCOL_IP4 || all)
     {
@@ -92,10 +89,9 @@
  * otherwise it uses defaults above.
  */
 void
-session_table_init (session_table_t * slt, u8 fib_proto)
+session_table_init (session_table_t *slt, u8 fib_proto)
 {
   u8 all = fib_proto > FIB_PROTOCOL_IP6 ? 1 : 0;
-  int i;
 
 #define _(af,table,parm,value) 						\
   u32 configured_##af##_##table##_table_##parm = value;
@@ -109,6 +105,7 @@
   foreach_hash_table_parameter;
 #undef _
 
+  slt->srtg_handle = SESSION_SRTG_HANDLE_INVALID;
   if (fib_proto == FIB_PROTOCOL_IP4 || all)
     {
       clib_bihash_init2_args_16_8_t _a, *a = &_a;
@@ -153,10 +150,6 @@
       a->instantiate_immediately = 1;
       clib_bihash_init2_48_8 (a);
     }
-
-  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]);
 }
 
 typedef struct _ip4_session_table_walk_ctx_t