aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vnet/fib/fib_path_list.c18
-rw-r--r--test/test_mpls.py12
2 files changed, 18 insertions, 12 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
diff --git a/test/test_mpls.py b/test/test_mpls.py
index 2c40e8d198e..2b959e48fb6 100644
--- a/test/test_mpls.py
+++ b/test/test_mpls.py
@@ -1069,7 +1069,7 @@ class TestMPLS(VppTestCase):
def test_mpls_tunnel_many(self):
""" MPLS Multiple Tunnels """
- for ii in range(10):
+ for ii in range(100):
mpls_tun = VppMPLSTunnelInterface(
self,
[VppRoutePath(self.pg0.remote_ip4,
@@ -1078,6 +1078,16 @@ class TestMPLS(VppTestCase):
VppMplsLabel(46, MplsLspMode.UNIFORM)])])
mpls_tun.add_vpp_config()
mpls_tun.admin_up()
+ for ii in range(100):
+ mpls_tun = VppMPLSTunnelInterface(
+ self,
+ [VppRoutePath(self.pg0.remote_ip4,
+ self.pg0.sw_if_index,
+ labels=[VppMplsLabel(44, ttl=32),
+ VppMplsLabel(46, MplsLspMode.UNIFORM)])],
+ is_l2=1)
+ mpls_tun.add_vpp_config()
+ mpls_tun.admin_up()
def test_v4_exp_null(self):
""" MPLS V4 Explicit NULL test """