mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-15 16:32:01 +00:00
bgpd: optimize bgp_aggregate_[increment|decrement]()
If there were no aggregates configured this functions were allocating and freeing a struct bgp_node for every call, and it's called for every prefix received. * bgp_route.c: Bail out early if the there are no aggregates configured. Change from bgp_node_get() to bgp_node_lookup() that does not allocate a new struct bgp_node if not found. Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
343aa82219
commit
f018db83a0
@ -4660,18 +4660,27 @@ bgp_aggregate_increment (struct bgp *bgp, struct prefix *p,
|
|||||||
struct bgp_node *child;
|
struct bgp_node *child;
|
||||||
struct bgp_node *rn;
|
struct bgp_node *rn;
|
||||||
struct bgp_aggregate *aggregate;
|
struct bgp_aggregate *aggregate;
|
||||||
|
struct bgp_table *table;
|
||||||
|
|
||||||
/* MPLS-VPN aggregation is not yet supported. */
|
/* MPLS-VPN aggregation is not yet supported. */
|
||||||
if (safi == SAFI_MPLS_VPN)
|
if (safi == SAFI_MPLS_VPN)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
table = bgp->aggregate[afi][safi];
|
||||||
|
|
||||||
|
/* No aggregates configured. */
|
||||||
|
if (table->top == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
if (p->prefixlen == 0)
|
if (p->prefixlen == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (BGP_INFO_HOLDDOWN (ri))
|
if (BGP_INFO_HOLDDOWN (ri))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
child = bgp_node_get (bgp->aggregate[afi][safi], p);
|
child = bgp_node_lookup (table, p);
|
||||||
|
if (! child)
|
||||||
|
return;
|
||||||
|
|
||||||
/* Aggregate address configuration check. */
|
/* Aggregate address configuration check. */
|
||||||
for (rn = child; rn; rn = rn->parent)
|
for (rn = child; rn; rn = rn->parent)
|
||||||
@ -4690,15 +4699,24 @@ bgp_aggregate_decrement (struct bgp *bgp, struct prefix *p,
|
|||||||
struct bgp_node *child;
|
struct bgp_node *child;
|
||||||
struct bgp_node *rn;
|
struct bgp_node *rn;
|
||||||
struct bgp_aggregate *aggregate;
|
struct bgp_aggregate *aggregate;
|
||||||
|
struct bgp_table *table;
|
||||||
|
|
||||||
/* MPLS-VPN aggregation is not yet supported. */
|
/* MPLS-VPN aggregation is not yet supported. */
|
||||||
if (safi == SAFI_MPLS_VPN)
|
if (safi == SAFI_MPLS_VPN)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
table = bgp->aggregate[afi][safi];
|
||||||
|
|
||||||
|
/* No aggregates configured. */
|
||||||
|
if (table->top == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
if (p->prefixlen == 0)
|
if (p->prefixlen == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
child = bgp_node_get (bgp->aggregate[afi][safi], p);
|
child = bgp_node_lookup (table, p);
|
||||||
|
if (! child)
|
||||||
|
return;
|
||||||
|
|
||||||
/* Aggregate address configuration check. */
|
/* Aggregate address configuration check. */
|
||||||
for (rn = child; rn; rn = rn->parent)
|
for (rn = child; rn; rn = rn->parent)
|
||||||
|
Loading…
Reference in New Issue
Block a user