]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/redistribute.c
Merge pull request #9345 from mjstapp/fix_lib_zmq_free
[mirror_frr.git] / zebra / redistribute.c
index 7cb426359d8e1c88100f6a1e1f90a0404925411f..26f6d404e95f4a2bd6de375ab5e3ab334709aa97 100644 (file)
@@ -153,10 +153,16 @@ static bool zebra_redistribute_check(const struct route_entry *re,
                                     struct zserv *client,
                                     const struct prefix *p, int afi)
 {
+       struct zebra_vrf *zvrf;
+
        /* Process only if there is valid re */
        if (!re)
                return false;
 
+       zvrf = vrf_info_lookup(re->vrf_id);
+       if (re->vrf_id == VRF_DEFAULT && zvrf->table_id != re->table)
+               return false;
+
        /* If default route and redistributed */
        if (is_default_prefix(p)
            && vrf_bitmap_check(client->redist_default[afi], re->vrf_id))
@@ -337,12 +343,17 @@ void zebra_redistribute_add(ZAPI_HANDLER_ARGS)
                                           zvrf_id(zvrf), afi);
                }
        } else {
-               if (IS_ZEBRA_DEBUG_EVENT)
-                       zlog_debug("%s: setting vrf %s(%u) redist bitmap",
-                                  __func__, VRF_LOGNAME(zvrf->vrf),
-                                  zvrf_id(zvrf));
-               vrf_bitmap_set(client->redist[afi][type], zvrf_id(zvrf));
-               zebra_redistribute(client, type, 0, zvrf_id(zvrf), afi);
+               if (!vrf_bitmap_check(client->redist[afi][type],
+                                     zvrf_id(zvrf))) {
+                       if (IS_ZEBRA_DEBUG_EVENT)
+                               zlog_debug(
+                                       "%s: setting vrf %s(%u) redist bitmap",
+                                       __func__, VRF_LOGNAME(zvrf->vrf),
+                                       zvrf_id(zvrf));
+                       vrf_bitmap_set(client->redist[afi][type],
+                                      zvrf_id(zvrf));
+                       zebra_redistribute(client, type, 0, zvrf_id(zvrf), afi);
+               }
        }
 
 stream_failure: