]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_zebra.c
Merge branch 'master' into evpn-session-vrf
[mirror_frr.git] / bgpd / bgp_zebra.c
index 0c77f63335026ea45ca56edb723962cdb20cd4fa..66fcbb3f3afa9ed82a79b676985b45bcbb6d116e 100644 (file)
@@ -1819,23 +1819,42 @@ int bgp_redistribute_unset(struct bgp *bgp, afi_t afi, int type,
        return CMD_SUCCESS;
 }
 
-/* Update redistribute vrf bitmap during triggers like
-   restart networking or delete/add VRFs */
-void bgp_update_redist_vrf_bitmaps(struct bgp *bgp, vrf_id_t old_vrf_id)
+void bgp_redistribute_redo(struct bgp *bgp)
+{
+       afi_t afi;
+       int i;
+       struct list *red_list;
+       struct listnode *node;
+       struct bgp_redist *red;
+
+       for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+               for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+
+                       red_list = bgp->redist[afi][i];
+                       if (!red_list)
+                               continue;
+
+                       for (ALL_LIST_ELEMENTS_RO(red_list, node, red)) {
+                               bgp_redistribute_resend(bgp, afi, i,
+                                                       red->instance);
+                       }
+               }
+       }
+}
+
+/* Unset redistribute vrf bitmap during triggers like
+   restart networking or delete VRFs */
+void bgp_unset_redist_vrf_bitmaps(struct bgp *bgp, vrf_id_t old_vrf_id)
 {
        int i;
        afi_t afi;
 
        for (afi = AFI_IP; afi < AFI_MAX; afi++)
                for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
-                       if ((old_vrf_id == VRF_UNKNOWN)
-                           || vrf_bitmap_check(zclient->redist[afi][i],
-                                               old_vrf_id)) {
+                       if (vrf_bitmap_check(zclient->redist[afi][i],
+                                            old_vrf_id))
                                vrf_bitmap_unset(zclient->redist[afi][i],
                                                 old_vrf_id);
-                               vrf_bitmap_set(zclient->redist[afi][i],
-                                              bgp->vrf_id);
-                       }
        return;
 }