fib: Add some path-list flags to its key 14/20914/2
authorNeale Ranns <nranns@cisco.com>
Mon, 29 Jul 2019 12:45:27 +0000 (12:45 +0000)
committerNeale Ranns <nranns@cisco.com>
Wed, 31 Jul 2019 10:08:40 +0000 (10:08 +0000)
Type: fix
Ticket: 1729

The flags that are permanently set on a path-list should form part of
its key in the path-list DB. Otherwise, if shared, they will not behave
as expected.

Change-Id: I0aa7c7c5d270c97b08014e4a47ddbdcee2358706
Signed-off-by: Neale Ranns <nranns@cisco.com>
src/vnet/fib/fib_path_list.c
src/vnet/fib/fib_path_list.h

index d354383..a9976e5 100644 (file)
@@ -181,7 +181,10 @@ fib_path_list_hash (fib_path_list_t *path_list)
 
     ASSERT(path_list);
 
-    new_path_list_hash = old_path_list_hash = vec_len(path_list->fpl_paths);
+    new_path_list_hash =
+        old_path_list_hash =
+            (vec_len(path_list->fpl_paths) << 16 |
+             (path_list->fpl_flags & FIB_PATH_LIST_KEY_FLAGS));
 
     vec_foreach (path_index, path_list->fpl_paths)
     {
index 06c1b14..4ed5713 100644 (file)
@@ -104,6 +104,13 @@ typedef enum fib_path_list_flags_t_ {
         _item <= FIB_PATH_LIST_ATTRIBUTE_LAST;         \
         _item++)
 
+/**
+ * The flags on a path-list that contribute to its key in the DB.
+ * So path-lists with these flags different are not conisdered the
+ * same.
+ */
+#define FIB_PATH_LIST_KEY_FLAGS (FIB_PATH_LIST_FLAG_NO_URPF)
+
 extern fib_node_index_t fib_path_list_create(fib_path_list_flags_t flags,
                                             const fib_route_path_t *paths);
 extern fib_node_index_t fib_path_list_create_special(dpo_proto_t nh_proto,