]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Bugfix ip-aggregator-new
authorIgor Putovny <igor.putovny@nic.cz>
Tue, 11 Mar 2025 16:38:48 +0000 (17:38 +0100)
committerIgor Putovny <igor.putovny@nic.cz>
Tue, 11 Mar 2025 16:38:48 +0000 (17:38 +0100)
When pruning the trie, do not remove nodes of original prefixes

proto/aggregator/trie.c

index 6a0bc75714c47001a8e7ed62888bda95683576bd..d61fa9a984a43ed55ddd3d736ef264b7cee343f9 100644 (file)
@@ -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);