From 5447ba148e424f73badc287fa5c62c236f54d1af Mon Sep 17 00:00:00 2001 From: Igor Putovny Date: Tue, 11 Mar 2025 17:38:48 +0100 Subject: [PATCH] Bugfix When pruning the trie, do not remove nodes of original prefixes --- proto/aggregator/trie.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/proto/aggregator/trie.c b/proto/aggregator/trie.c index 6a0bc7571..d61fa9a98 100644 --- a/proto/aggregator/trie.c +++ b/proto/aggregator/trie.c @@ -469,11 +469,8 @@ aggregator_trie_remove_prefix(struct aggregator_proto *p, ip_addr prefix, u32 px for (u32 i = 0; i < pxlen; i++) { u32 bit = ipa_getbit(prefix, i + ipa_shift[p->addr_type]); - - if (node->child[bit]) - node = node->child[bit]; - else - return node; + node = node->child[bit]; + ASSERT_DIE(node != NULL); } ASSERT_DIE(node->px_origin == ORIGINAL); @@ -767,7 +764,7 @@ aggregator_third_pass_helper(struct aggregator_proto *p, struct trie_node *node, } /* Prune the trie */ - if (node->status == NON_FIB && aggregator_is_leaf(node)) + if (node->status == NON_FIB && node->px_origin != ORIGINAL && aggregator_is_leaf(node)) { ASSERT_DIE(node->selected_bucket == NULL); aggregator_remove_node(node); -- 2.47.2