When pruning the trie, do not remove nodes of original prefixes
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);
}
/* 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);