Adding Multipath support for exclusive DPO based fib path entries via rpath 60/15160/3
authorVijayabhaskar Katamreddy <vkatamre@cisco.com>
Fri, 5 Oct 2018 18:24:56 +0000 (11:24 -0700)
committerVijayabhaskar Katamreddy <vkatamre@cisco.com>
Mon, 8 Oct 2018 14:43:21 +0000 (14:43 +0000)
Change-Id: I3c84daf046dbad972b36e48fa2548bbe20c7b338
Signed-off-by: Vijayabhaskar Katamreddy <vkatamre@cisco.com>
src/vnet/fib/fib_path.c
src/vnet/fib/fib_types.h

index 88dddbc..4c93f73 100644 (file)
@@ -1323,6 +1323,11 @@ fib_path_create (fib_node_index_t pl_index,
        path->fp_type = FIB_PATH_TYPE_DVR;
        path->dvr.fp_interface = rpath->frp_sw_if_index;
     }
+    else if (rpath->frp_flags & FIB_ROUTE_PATH_EXCLUSIVE)
+    {
+       path->fp_type = FIB_PATH_TYPE_EXCLUSIVE;
+       dpo_copy(&path->exclusive.fp_ex_dpo, &rpath->dpo);
+    }
     else if (~0 != rpath->frp_sw_if_index)
     {
         if (ip46_address_is_zero(&rpath->frp_addr))
@@ -1574,9 +1579,11 @@ fib_path_cmp_i (const fib_path_t *path1,
        case FIB_PATH_TYPE_DVR:
            res = (path1->dvr.fp_interface - path2->dvr.fp_interface);
            break;
+       case FIB_PATH_TYPE_EXCLUSIVE:
+           res = dpo_cmp(&path1->exclusive.fp_ex_dpo, &path2->exclusive.fp_ex_dpo);
+           break;
        case FIB_PATH_TYPE_SPECIAL:
        case FIB_PATH_TYPE_RECEIVE:
-       case FIB_PATH_TYPE_EXCLUSIVE:
            res = 0;
            break;
        }
@@ -1711,9 +1718,11 @@ fib_path_cmp_w_route_path (fib_node_index_t path_index,
        case FIB_PATH_TYPE_DVR:
            res = (path->dvr.fp_interface - rpath->frp_sw_if_index);
            break;
+       case FIB_PATH_TYPE_EXCLUSIVE:
+           res = dpo_cmp(&path->exclusive.fp_ex_dpo, &rpath->dpo);
+           break;
        case FIB_PATH_TYPE_SPECIAL:
        case FIB_PATH_TYPE_RECEIVE:
-       case FIB_PATH_TYPE_EXCLUSIVE:
            res = 0;
            break;
        }
index cd6ef7e..714a1d9 100644 (file)
@@ -523,6 +523,11 @@ typedef struct fib_route_path_t_ {
              * The outgoing MPLS label Stack. NULL implies no label.
              */
             fib_mpls_label_t *frp_label_stack;
+
+            /**
+            * Exclusive DPO
+            */
+           dpo_id_t dpo;
         };
         /**
          * A path that resolves via a BIER Table.