linux-cp: populate mapping vif-sw_if_index only for default-ns
[vpp.git] / src / plugins / svs / svs.c
index fcfddf9..4da7fb9 100644 (file)
 
 u32 *svs_itf_db[FIB_PROTOCOL_IP_MAX];
 
+static fib_source_t svs_fib_src;
+
 int
 svs_table_add (fib_protocol_t fproto, u32 table_id)
 {
-  fib_table_find_or_create_and_lock (fproto, table_id, FIB_SOURCE_PLUGIN_LOW);
+  fib_table_find_or_create_and_lock (fproto, table_id, svs_fib_src);
 
   return (0);
 }
@@ -50,7 +52,7 @@ svs_table_delete (fib_protocol_t fproto, u32 table_id)
   if (~0 == fib_index)
     return VNET_API_ERROR_NO_SUCH_FIB;
 
-  fib_table_unlock (fib_index, fproto, FIB_SOURCE_PLUGIN_LOW);
+  fib_table_unlock (fib_index, fproto, svs_fib_src);
 
   return (0);
 }
@@ -68,7 +70,7 @@ svs_route_add_i (u32 fib_index, const fib_prefix_t * pfx, u32 src_fib_index)
                                      LOOKUP_TABLE_FROM_CONFIG, &dpo);
 
   fib_table_entry_special_dpo_add (fib_index, pfx,
-                                  FIB_SOURCE_PLUGIN_LOW,
+                                  svs_fib_src,
                                   FIB_ENTRY_FLAG_EXCLUSIVE, &dpo);
 
   dpo_unlock (&dpo);
@@ -107,7 +109,7 @@ svs_route_delete (u32 table_id, const fib_prefix_t * pfx)
   if (~0 == fib_index)
     return VNET_API_ERROR_NO_SUCH_FIB;
 
-  fib_table_entry_special_remove (fib_index, pfx, FIB_SOURCE_PLUGIN_LOW);
+  fib_table_entry_special_remove (fib_index, pfx, svs_fib_src);
 
   return (0);
 }
@@ -192,6 +194,9 @@ svs_ip4_table_bind (ip4_main_t * im,
 int
 svs_disable (fib_protocol_t fproto, u32 table_id, u32 sw_if_index)
 {
+  fib_prefix_t pfx = {
+    .fp_proto = fproto,
+  };
   u32 fib_index;
 
   fib_index = fib_table_find (fproto, table_id);
@@ -211,6 +216,8 @@ svs_disable (fib_protocol_t fproto, u32 table_id, u32 sw_if_index)
                                "svs-ip4" :
                                "svs-ip6"), sw_if_index, 0, NULL, 0);
 
+  fib_table_entry_special_remove (fib_index, &pfx, svs_fib_src);
+
   return (0);
 }
 
@@ -299,8 +306,7 @@ svs_input_inline (vlib_main_t * vm,
              ip6_header_t *ip0;
 
              ip0 = vlib_buffer_get_current (b0);
-             lbi0 = ip6_fib_table_fwding_lookup (&ip6_main,
-                                                 svs_itf_db[fproto]
+             lbi0 = ip6_fib_table_fwding_lookup (svs_itf_db[fproto]
                                                  [sw_if_index0],
                                                  &ip0->src_address);
            }
@@ -357,7 +363,6 @@ format_svs_input_trace (u8 * s, va_list * args)
   return s;
 }
 
-/* *INDENT-OFF* */
 VLIB_REGISTER_NODE (svs_ip4_node) =
 {
   .function = svs_input_ip4,
@@ -396,7 +401,6 @@ VNET_FEATURE_INIT (svs_ip6_feat, static) =
   .arc_name = "ip6-unicast",
   .node_name = "svs-ip6",
 };
-/* *INDENT-ON* */
 
 static clib_error_t *
 svs_table_cli (vlib_main_t * vm,
@@ -437,13 +441,11 @@ svs_table_cli (vlib_main_t * vm,
   return (NULL);
 }
 
-/* *INDENT-OFF* */
 VLIB_CLI_COMMAND (svs_table_cmd_cli, static) = {
     .path = "svs table",
     .short_help = "Source VRF select table [add|delete] [ip4|ip6] table-id X",
     .function = svs_table_cli,
 };
-/* *INDENT-ON* */
 
 static clib_error_t *
 svs_enable_cli (vlib_main_t * vm,
@@ -491,13 +493,11 @@ svs_enable_cli (vlib_main_t * vm,
   return (NULL);
 }
 
-/* *INDENT-OFF* */
 VLIB_CLI_COMMAND (svs_enable_cli_cmd, static) = {
     .path = "svs enable",
     .short_help = "Source VRF select [enable|disable] [ip4|ip6] <table-id> X <interface>",
     .function = svs_enable_cli,
 };
-/* *INDENT-ON* */
 
 static clib_error_t *
 svs_route_cli (vlib_main_t * vm,
@@ -553,13 +553,11 @@ svs_route_cli (vlib_main_t * vm,
   return (NULL);
 }
 
-/* *INDENT-OFF* */
 VLIB_CLI_COMMAND (svs_route_cmd_cli, static) = {
     .path = "svs route",
     .short_help = "Source VRF select route [add|delete] <table-id> <prefix> <src-table-id>",
     .function = svs_route_cli,
 };
-/* *INDENT-ON* */
 
 static clib_error_t *
 svs_show_cli (vlib_main_t * vm,
@@ -582,13 +580,11 @@ svs_show_cli (vlib_main_t * vm,
   return (NULL);
 }
 
-/* *INDENT-OFF* */
 VLIB_CLI_COMMAND (svs_show_cli_cmd, static) = {
   .path = "show svs",
   .short_help = "Source VRF select show",
   .function = svs_show_cli,
 };
-/* *INDENT-ON* */
 
 static clib_error_t *
 svs_init (vlib_main_t * vm)
@@ -603,6 +599,10 @@ svs_init (vlib_main_t * vm)
   };
   vec_add1 (ip4_main.table_bind_callbacks, cbt4);
 
+  svs_fib_src = fib_source_allocate ("svs",
+                                    FIB_SOURCE_PRIORITY_LOW,
+                                    FIB_SOURCE_BH_SIMPLE);
+
   return (NULL);
 }