summaryrefslogtreecommitdiff
path: root/zebra/redistribute.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/redistribute.c')
-rw-r--r--zebra/redistribute.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/zebra/redistribute.c b/zebra/redistribute.c
index c7ed209d3c..23cce0a1b7 100644
--- a/zebra/redistribute.c
+++ b/zebra/redistribute.c
@@ -498,6 +498,7 @@ int
zebra_add_import_table_entry (struct route_node *rn, struct rib *rib, const char *rmap_name)
{
struct rib *newrib;
+ struct rib *same;
struct prefix p;
struct nexthop *nhop;
union g_addr *gate;
@@ -515,6 +516,21 @@ zebra_add_import_table_entry (struct route_node *rn, struct rib *rib, const char
p.prefixlen = rn->p.prefixlen;
p.u.prefix4 = rn->p.u.prefix4;
+ RNODE_FOREACH_RIB (rn, same)
+ {
+ if (CHECK_FLAG (same->status, RIB_ENTRY_REMOVED))
+ continue;
+
+ if (same->type == rib->type && same->instance == rib->instance
+ && same->table == rib->table
+ && same->type != ZEBRA_ROUTE_CONNECT)
+ break;
+ }
+
+ if (same)
+ zebra_del_import_table_entry (rn, same);
+
+
if (rib->nexthop_num == 1)
{
nhop = rib->nexthop;