diff options
Diffstat (limited to 'bgpd')
-rw-r--r-- | bgpd/bgp_route.c | 4 | ||||
-rw-r--r-- | bgpd/bgpd.c | 7 |
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; |