]> git.proxmox.com Git - mirror_frr.git/commitdiff
Merge branch 'master' into type5-default-originate
authorMitesh Kanjariya <mitesh@cumulusnetworks.com>
Tue, 6 Mar 2018 21:48:33 +0000 (13:48 -0800)
committerGitHub <noreply@github.com>
Tue, 6 Mar 2018 21:48:33 +0000 (13:48 -0800)
1  2 
bgpd/bgp_evpn.c
bgpd/bgp_route.c

diff --cc bgpd/bgp_evpn.c
index c079dd05fbb0c55742f72af1c9d614c146931338,e5863e49802b4ba7bb4c602deb5e75c9e97b1467..9b98e1a8bce8bcb2e358350c39554082c05da3ed
@@@ -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)
index 0d226f9e72e1c39e6bab4284eec2d05047f246da,3dfc446b2c171f30a425234f71e86409da269ee4..6e3751fb9d1d143643c860de306d58ce38107841
@@@ -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);
        }