From: Mitesh Kanjariya Date: Tue, 6 Mar 2018 21:48:33 +0000 (-0800) Subject: Merge branch 'master' into type5-default-originate X-Git-Tag: frr-5.0-dev~171^2~1 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=7b1bf203ca189938b41811945fe6a71911574de3;p=matthieu%2Ffrr.git Merge branch 'master' into type5-default-originate --- 7b1bf203ca189938b41811945fe6a71911574de3 diff --cc bgpd/bgp_evpn.c index c079dd05fb,e5863e4980..9b98e1a8bc --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c @@@ -3245,11 -3247,25 +3247,21 @@@ void bgp_evpn_withdraw_type5_routes(str { struct bgp_table *table = NULL; struct bgp_node *rn = NULL; + struct bgp_info *ri; - /* Bail out early if we don't have to advertise type-5 routes. */ - if (!advertise_type5_routes(bgp_vrf, afi)) - return; - table = bgp_vrf->rib[afi][safi]; - for (rn = bgp_table_top(table); rn; rn = bgp_route_next(rn)) - bgp_evpn_withdraw_type5_route(bgp_vrf, &rn->p, afi, safi); - + for (rn = bgp_table_top(table); rn; rn = bgp_route_next(rn)) { + /* Only care about "selected" routes - non-imported. */ + /* TODO: Support for AddPath for EVPN. */ + for (ri = rn->info; ri; ri = ri->next) { + if (CHECK_FLAG(ri->flags, BGP_INFO_SELECTED) && + (!ri->extra || !ri->extra->parent)) { + bgp_evpn_withdraw_type5_route(bgp_vrf, &rn->p, + afi, safi); + break; + } + } + } } /* @@@ -3265,11 -3281,11 +3277,7 @@@ void bgp_evpn_advertise_type5_route(str int ret = 0; struct prefix_evpn evp; char buf[PREFIX_STRLEN]; -- - /* only advertise subnet routes as type-5 */ - if (is_host_route(p)) - /* NOTE: Check needed as this is called per-route also. */ - if (!advertise_type5_routes(bgp_vrf, afi)) -- return; -- ++ build_type5_prefix_from_ip_prefix(&evp, p); ret = update_evpn_type5_route(bgp_vrf, &evp, src_attr); if (ret) diff --cc bgpd/bgp_route.c index 0d226f9e72,3dfc446b2c..6e3751fb9d --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@@ -2228,10 -2228,13 +2228,13 @@@ static void bgp_process_main_one(struc /* advertise/withdraw type-5 routes */ if ((afi == AFI_IP || afi == AFI_IP6) && (safi == SAFI_UNICAST)) { - if (advertise_type5_routes(bgp, afi) && new_select) - bgp_evpn_advertise_type5_route( - bgp, &rn->p, new_select->attr, afi, safi); - else if (advertise_type5_routes(bgp, afi) && old_select) - if (new_select && ++ if (advertise_type5_routes(bgp, afi) && new_select && + (!new_select->extra || !new_select->extra->parent)) + bgp_evpn_advertise_type5_route(bgp, &rn->p, + new_select->attr, + afi, safi); - else if (old_select && ++ else if (advertise_type5_routes(bgp, afi) && old_select && + (!old_select->extra || !old_select->extra->parent)) bgp_evpn_withdraw_type5_route(bgp, &rn->p, afi, safi); }