summaryrefslogtreecommitdiff
path: root/bgpd
diff options
context:
space:
mode:
authorJorge Boncompte [DTI2] <jorge@dti2.net>2012-05-07 16:52:59 +0000
committerDavid Lamparter <equinox@opensourcerouting.org>2012-05-22 20:25:49 +0200
commit938ef3a22535292dd36c250e5329f97d977e51df (patch)
treea854c21dd840e7558a482bf4812b857583da3591 /bgpd
parent7fb0cd82c26492004a106bec7ca4afdf4684fabb (diff)
bgpd: use on stack struct attr_extra on bgp_attr_aggregate_intern()
Reduce memory heap fragmentation and pressure on the memory allocator. Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'bgpd')
-rw-r--r--bgpd/bgp_attr.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index 96429090..bb21fe19 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -577,11 +577,12 @@ bgp_attr_aggregate_intern (struct bgp *bgp, u_char origin,
{
struct attr attr;
struct attr *new;
- struct attr_extra *attre;
+ struct attr_extra attre;
memset (&attr, 0, sizeof (struct attr));
- attre = bgp_attr_extra_get (&attr);
-
+ memset (&attre, 0, sizeof (struct attr_extra));
+ attr.extra = &attre;
+
/* Origin attribute. */
attr.origin = origin;
attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_ORIGIN);
@@ -602,22 +603,21 @@ bgp_attr_aggregate_intern (struct bgp *bgp, u_char origin,
attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_COMMUNITIES);
}
- attre->weight = BGP_ATTR_DEFAULT_WEIGHT;
+ attre.weight = BGP_ATTR_DEFAULT_WEIGHT;
#ifdef HAVE_IPV6
- attre->mp_nexthop_len = IPV6_MAX_BYTELEN;
+ attre.mp_nexthop_len = IPV6_MAX_BYTELEN;
#endif
if (! as_set)
attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_ATOMIC_AGGREGATE);
attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_AGGREGATOR);
if (CHECK_FLAG (bgp->config, BGP_CONFIG_CONFEDERATION))
- attre->aggregator_as = bgp->confed_id;
+ attre.aggregator_as = bgp->confed_id;
else
- attre->aggregator_as = bgp->as;
- attre->aggregator_addr = bgp->router_id;
+ attre.aggregator_as = bgp->as;
+ attre.aggregator_addr = bgp->router_id;
new = bgp_attr_intern (&attr);
- bgp_attr_extra_free (&attr);
-
+
aspath_unintern (&new->aspath);
return new;
}