Consolidate table->index conversion in fib-path CLI processing 46/14546/2
authorNeale Ranns <nranns@cisco.com>
Wed, 29 Aug 2018 09:09:47 +0000 (02:09 -0700)
committerDamjan Marion <dmarion@me.com>
Wed, 29 Aug 2018 11:10:50 +0000 (11:10 +0000)
Change-Id: I221cebddc45efbfdec428b7df2af96e2aedff2dd
Signed-off-by: Neale Ranns <nranns@cisco.com>
src/vnet/fib/fib_types.c
src/vnet/ip/lookup.c
src/vnet/mpls/mpls.c

index 542cf1d..0dda65e 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <vnet/fib/fib_types.h>
 #include <vnet/fib/fib_internal.h>
+#include <vnet/fib/fib_table.h>
 #include <vnet/mpls/mpls.h>
 
 /*
@@ -418,7 +419,7 @@ unformat_fib_route_path (unformat_input_t * input, va_list * args)
 {
     fib_route_path_t *rpath = va_arg (*args, fib_route_path_t *);
     u32 *payload_proto = va_arg (*args, u32*);
-    u32 weight, preference, udp_encap_id;
+    u32 weight, preference, udp_encap_id, fi;
     mpls_label_t out_label;
     vnet_main_t *vnm;
 
@@ -460,6 +461,14 @@ unformat_fib_route_path (unformat_input_t * input, va_list * args)
         {
             rpath->frp_sw_if_index = ~0;
             rpath->frp_proto = DPO_PROTO_IP4;
+
+            /*
+             * the user enter table-ids, convert to index
+             */
+            fi = fib_table_find (FIB_PROTOCOL_IP4, rpath->frp_fib_index);
+            if (~0 == fi)
+                return 0;
+            rpath->frp_fib_index = fi;
         }
         else if (unformat (input, "%U next-hop-table %d",
                            unformat_ip6_address,
@@ -468,6 +477,10 @@ unformat_fib_route_path (unformat_input_t * input, va_list * args)
         {
             rpath->frp_sw_if_index = ~0;
             rpath->frp_proto = DPO_PROTO_IP6;
+            fi = fib_table_find (FIB_PROTOCOL_IP6, rpath->frp_fib_index);
+            if (~0 == fi)
+                return 0;
+            rpath->frp_fib_index = fi;
         }
         else if (unformat (input, "%U",
                            unformat_ip4_address,
index 8fa8e7e..4250997 100644 (file)
@@ -452,22 +452,6 @@ vnet_ip_route_cmd (vlib_main_t * vm,
            {
              for (j = 0; j < vec_len (rpaths); j++)
                {
-                 u32 fi;
-                 /*
-                  * the CLI parsing stored table Ids, swap to FIB indicies
-                  */
-                 fi = fib_table_find (prefixs[i].fp_proto,
-                                      rpaths[i].frp_fib_index);
-
-                 if (~0 == fi)
-                   {
-                     error =
-                       clib_error_return (0, "Via table %d does not exist",
-                                          rpaths[i].frp_fib_index);
-                     goto done;
-                   }
-                 rpaths[i].frp_fib_index = fi;
-
                  fib_prefix_t rpfx = {
                    .fp_len = prefixs[i].fp_len,
                    .fp_proto = prefixs[i].fp_proto,
index aaaba39..c35aef9 100644 (file)
@@ -312,7 +312,6 @@ vnet_mpls_local_label (vlib_main_t * vm,
   else
   {
       fib_node_index_t fib_index;
-      u32 fi;
 
       if (NULL == rpaths)
       {
@@ -325,24 +324,6 @@ vnet_mpls_local_label (vlib_main_t * vm,
       pfx.fp_label = local_label;
       pfx.fp_payload_proto = rpaths[0].frp_proto;
 
-      /*
-       * the CLI parsing stored table Ids, swap to FIB indicies
-       */
-      if (FIB_NODE_INDEX_INVALID == rpath.frp_sw_if_index)
-      {
-         fi = fib_table_find(dpo_proto_to_fib(pfx.fp_payload_proto),
-                              rpaths[0].frp_fib_index);
-
-         if (~0 == fi)
-         {
-             error = clib_error_return(0 , "%U Via table %d does not exist",
-                                       format_dpo_proto, pfx.fp_payload_proto,
-                                       rpaths[0].frp_fib_index);
-             goto done;
-         }
-         rpaths[0].frp_fib_index = fi;
-      }
-
       fib_index = mpls_fib_index_from_table_id(table_id);
 
       if (FIB_NODE_INDEX_INVALID == fib_index)