summaryrefslogtreecommitdiffstats
path: root/bgpd
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd')
-rw-r--r--bgpd/bgp_route.c4
-rw-r--r--bgpd/bgpd.c7
2 files changed, 9 insertions, 2 deletions
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 87d305cb..58d97b0f 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -2859,7 +2859,7 @@ bgp_aggregate_increment (struct bgp *bgp, struct prefix *p,
if ((aggregate = rn->info) != NULL && rn->p.prefixlen < p->prefixlen)
{
bgp_aggregate_delete (bgp, &rn->p, afi, safi, aggregate);
- bgp_aggregate_route (bgp, &rn->p, ri, safi, safi, NULL, aggregate);
+ bgp_aggregate_route (bgp, &rn->p, ri, afi, safi, NULL, aggregate);
}
bgp_unlock_node (child);
}
@@ -2886,7 +2886,7 @@ bgp_aggregate_decrement (struct bgp *bgp, struct prefix *p,
if ((aggregate = rn->info) != NULL && rn->p.prefixlen < p->prefixlen)
{
bgp_aggregate_delete (bgp, &rn->p, afi, safi, aggregate);
- bgp_aggregate_route (bgp, &rn->p, NULL, safi, safi, del, aggregate);
+ bgp_aggregate_route (bgp, &rn->p, NULL, afi, safi, del, aggregate);
}
bgp_unlock_node (child);
}
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index f116a0cf..53263637 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -797,6 +797,13 @@ peer_as_change (struct peer *peer, as_t as)
type = peer_sort (peer);
peer->as = as;
+ if (bgp_config_check (peer->bgp, BGP_CONFIG_CONFEDERATION)
+ && ! bgp_confederation_peers_check (peer->bgp, as)
+ && peer->bgp->as != as)
+ peer->local_as = peer->bgp->confed_id;
+ else
+ peer->local_as = peer->bgp->as;
+
/* Advertisement-interval reset */
if (peer_sort (peer) == BGP_PEER_IBGP)
peer->v_routeadv = BGP_DEFAULT_IBGP_ROUTEADV;