mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2025-03-21 22:07:03 +00:00
Add comments
This commit is contained in:
parent
7fa0448835
commit
3b22713c60
@ -264,6 +264,7 @@ first_pass_after_check(const struct trie_node *node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* Compare buckets by linear ordering on pointers
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
aggregator_bucket_compare(const struct aggregator_bucket *a, const struct aggregator_bucket *b)
|
aggregator_bucket_compare(const struct aggregator_bucket *a, const struct aggregator_bucket *b)
|
||||||
@ -314,6 +315,10 @@ compute_buckets_union(struct trie_node *node, const struct trie_node *left, cons
|
|||||||
|
|
||||||
for (int i = 0; i < input_count; i++)
|
for (int i = 0; i < input_count; i++)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Don't copy element if it's the same as the last inserted element
|
||||||
|
* to avoid duplicates
|
||||||
|
*/
|
||||||
if (output_count != 0 && output_buckets[output_count - 1] == input_buckets[i])
|
if (output_count != 0 && output_buckets[output_count - 1] == input_buckets[i])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -463,6 +468,12 @@ second_pass(struct trie_node *node)
|
|||||||
for (int j = i + 1; j < right->potential_buckets_count; j++)
|
for (int j = i + 1; j < right->potential_buckets_count; j++)
|
||||||
assert(right->potential_buckets[i] != right->potential_buckets[j]);
|
assert(right->potential_buckets[i] != right->potential_buckets[j]);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If there are no common buckets among children's buckets, parent's
|
||||||
|
* buckets are computed as union of its children's buckets.
|
||||||
|
* Otherwise, parent's buckets are computed as intersection of its
|
||||||
|
* children's buckets.
|
||||||
|
*/
|
||||||
if (bucket_sets_are_disjoint(left, right))
|
if (bucket_sets_are_disjoint(left, right))
|
||||||
compute_buckets_union(node, left, right);
|
compute_buckets_union(node, left, right);
|
||||||
else
|
else
|
||||||
@ -718,6 +729,7 @@ collect_prefixes_ip4_helper(struct aggregator_proto *p, struct net_addr_ip4 *add
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Internal node with assigned bucket */
|
||||||
if (node->bucket)
|
if (node->bucket)
|
||||||
{
|
{
|
||||||
create_route_ip4(p, node->bucket, addr);
|
create_route_ip4(p, node->bucket, addr);
|
||||||
@ -753,6 +765,7 @@ collect_prefixes_ip6_helper(struct aggregator_proto *p, struct net_addr_ip6 *add
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Internal node with assigned bucket */
|
||||||
if (node->bucket)
|
if (node->bucket)
|
||||||
{
|
{
|
||||||
create_route_ip6(p, node->bucket, addr);
|
create_route_ip6(p, node->bucket, addr);
|
||||||
@ -994,11 +1007,7 @@ same_val_list(const struct f_val *v1, const struct f_val *v2, uint len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create and export new merged route.
|
* Create and export new merged route
|
||||||
* @old: first route in a sequence of equivalent routes that are to be merged
|
|
||||||
* @rte_val: first element in a sequence of equivalent rte_val_list entries
|
|
||||||
* @length: number of equivalent routes that are to be merged (at least 1)
|
|
||||||
* @ail: aggregation list
|
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
aggregator_bucket_update(struct aggregator_proto *p, struct aggregator_bucket *bucket, struct network *net)
|
aggregator_bucket_update(struct aggregator_proto *p, struct aggregator_bucket *bucket, struct network *net)
|
||||||
@ -1465,6 +1474,7 @@ aggregator_rt_notify(struct proto *P, struct channel *src_ch, net *net, rte *new
|
|||||||
rta_free(old_route->rte.attrs);
|
rta_free(old_route->rte.attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Aggregation within nets allows incremental updates */
|
||||||
if (NET_AGGR == p->aggr_mode)
|
if (NET_AGGR == p->aggr_mode)
|
||||||
{
|
{
|
||||||
/* Announce changes */
|
/* Announce changes */
|
||||||
@ -1547,6 +1557,9 @@ aggregator_init(struct proto_config *CF)
|
|||||||
return P;
|
return P;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize hash table and create default route
|
||||||
|
*/
|
||||||
static void
|
static void
|
||||||
trie_init(struct aggregator_proto *p)
|
trie_init(struct aggregator_proto *p)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user