From: Igor Putovny Date: Tue, 11 Mar 2025 16:38:48 +0000 (+0100) Subject: Bugfix X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fip-aggregator-new;p=thirdparty%2Fbird.git Bugfix When pruning the trie, do not remove nodes of original prefixes --- 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);