summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ospfd/ospf_zebra.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index fff38a34a3..8c152cdf72 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -1024,6 +1024,7 @@ ospf_zebra_read_ipv4 (int command, struct zclient *zclient,
struct prefix_ipv4 p;
struct external_info *ei;
struct ospf *ospf;
+ int i;
s = zclient->ibuf;
ifindex = 0;
@@ -1086,6 +1087,15 @@ ospf_zebra_read_ipv4 (int command, struct zclient *zclient,
if (ospf->dtag[api.type] > 0)
api.tag = ospf->dtag[api.type];
+ /*
+ * Given zebra sends update for a prefix via ADD message, it should
+ * be considered as an implicit DEL for that prefix with other source
+ * types.
+ */
+ for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
+ if (i != api.type)
+ ospf_external_info_delete(i, api.instance, p);
+
ei = ospf_external_info_add (api.type, api.instance, p, ifindex,
nexthop, api.tag);