mirror of
https://github.com/bgp/bgpq4
synced 2025-02-28 08:53:11 +00:00
ok, freebsd version looks finished, doing cross-system checks..
This commit is contained in:
40
sx_prefix.c
40
sx_prefix.c
@@ -621,7 +621,47 @@ sx_radix_tree_aggregate(struct sx_radix_tree* tree)
|
||||
if(tree && tree->head) return sx_radix_node_aggregate(tree->head);
|
||||
return 0;
|
||||
};
|
||||
|
||||
static void
|
||||
setGlue(struct sx_radix_node* node, void* udata)
|
||||
{
|
||||
if(node) node->isGlue=1;
|
||||
};
|
||||
|
||||
int
|
||||
sx_radix_node_refine(struct sx_radix_node* node, unsigned refine)
|
||||
{
|
||||
if(!node->isGlue && node->prefix.masklen<refine) {
|
||||
node->isAggregate=1;
|
||||
node->aggregateLow=node->prefix.masklen;
|
||||
node->aggregateHi=refine;
|
||||
if(node->l) sx_radix_node_foreach(node->l, setGlue, NULL);
|
||||
if(node->r) sx_radix_node_foreach(node->r, setGlue, NULL);
|
||||
} else if(!node->isGlue && node->prefix.masklen==refine) {
|
||||
/* not setting aggregate in this case */
|
||||
if(node->l) sx_radix_node_foreach(node->l, setGlue, NULL);
|
||||
if(node->r) sx_radix_node_foreach(node->r, setGlue, NULL);
|
||||
} else if(node->isGlue) {
|
||||
if(node->r) sx_radix_node_refine(node->r, refine);
|
||||
if(node->l) sx_radix_node_refine(node->l, refine);
|
||||
} else {
|
||||
/* node->prefix.masklen > refine */
|
||||
/* do nothing, should pass specifics 'as is'. Also, do not
|
||||
process any embedded routes, their masklen is bigger, too...
|
||||
node->isGlue=1;
|
||||
if(node->l) sx_radix_node_foreach(node->l, setGlue, NULL);
|
||||
if(node->r) sx_radix_node_foreach(node->r, setGlue, NULL);
|
||||
*/
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
|
||||
int
|
||||
sx_radix_tree_refine(struct sx_radix_tree* tree, unsigned refine)
|
||||
{
|
||||
if(tree && tree->head) return sx_radix_node_refine(tree->head, refine);
|
||||
return 0;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user