diff options
-rw-r--r-- | src/vnet/fib/fib_path_list.c | 18 | ||||
-rw-r--r-- | test/test_mpls.py | 12 |
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 """ |