aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/fib/fib_path_list.c
diff options
context:
space:
mode:
authorNeale Ranns <neale@graphiant.com>2021-10-21 12:02:53 +0000
committerBeno�t Ganne <bganne@cisco.com>2021-10-22 07:49:52 +0000
commit397228d8be382e800235b7501ab378b2292d18eb (patch)
tree1843d69528bc138f173ddfae9e2770847d22cb3b /src/vnet/fib/fib_path_list.c
parent8e2b1b129815d3e631aa425ed37899c78ea24e65 (diff)
fib: Don't back walk from a path-list when a child fist attaches.
Type: fix If the walk is triggered when the child is added, then that child is visited in the walk. However, since it is just attahcing to the path-list it may not, or indeed cannot, have all the context it needs to successfully handle the walk. In the case of MPLS tunnel, it does not have the path extensions ready, and cannot since the path extensions need to resolve on the path-list. Signed-off-by: Neale Ranns <neale@graphiant.com> Change-Id: I027af8cf2f522d2f6e37931bea60c767f0cb667d
Diffstat (limited to 'src/vnet/fib/fib_path_list.c')
-rw-r--r--src/vnet/fib/fib_path_list.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/vnet/fib/fib_path_list.c b/src/vnet/fib/fib_path_list.c
index df08bb2b0d0..81751695f47 100644
--- a/src/vnet/fib/fib_path_list.c
+++ b/src/vnet/fib/fib_path_list.c
@@ -1297,22 +1297,15 @@ fib_path_list_child_add (fib_node_index_t path_list_index,
fib_node_type_t child_type,
fib_node_index_t child_index)
{
- u32 sibling;
-
- sibling = fib_node_child_add(FIB_NODE_TYPE_PATH_LIST,
- path_list_index,
- child_type,
- child_index);
-
- if (FIB_PATH_LIST_POPULAR == fib_node_get_n_children(FIB_NODE_TYPE_PATH_LIST,
- path_list_index))
+ if (FIB_PATH_LIST_POPULAR - 1 == fib_node_get_n_children(FIB_NODE_TYPE_PATH_LIST,
+ path_list_index))
{
/*
* Set the popular flag on the path-list once we pass the magic
* threshold. then walk children to update.
* We don't undo this action. The rational being that the number
* of entries using this prefix is large enough such that it is a
- * non-trivial amount of effort to converge them. If we get into the
+ * non-trival amount of effort to converge them. If we get into the
* situation where we are adding and removing entries such that we
* flip-flop over the threshold, then this non-trivial work is added
* to each of those routes adds/deletes - not a situation we want.
@@ -1328,7 +1321,10 @@ fib_path_list_child_add (fib_node_index_t path_list_index,
fib_walk_sync(FIB_NODE_TYPE_PATH_LIST, path_list_index, &ctx);
}
- return (sibling);
+ return (fib_node_child_add(FIB_NODE_TYPE_PATH_LIST,
+ path_list_index,
+ child_type,
+ child_index));
}
void