From 276aa265568db6464ce98dae2ea97f0cbdbc2712 Mon Sep 17 00:00:00 2001 From: Chirag Shah Date: Thu, 15 Nov 2018 17:05:58 -0800 Subject: [PATCH] ospf6d: abr summary advertise best route ABR summary should contain best intra prefix LSA. There might be a case where intra-prefix route with different cost from different advertising router present, summary advertisement should only consider best intra-prefix route. A route which is marked for remove, while purging the route's ABR summary LSA also remove summary route from the summary table. Ticket:CM-22665 Testing Done: Validate on ABR topology, intra-prefix route with different cost, a higher cost intra-prefix route skip from sending ABR summary LSA. Signed-off-by: Chirag Shah --- ospf6d/ospf6_abr.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c index 53d545a24b..0ce53143b8 100644 --- a/ospf6d/ospf6_abr.c +++ b/ospf6d/ospf6_abr.c @@ -240,6 +240,20 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route, } } + if (route->path.origin.type == + htons(OSPF6_LSTYPE_INTRA_PREFIX)) { + if (!CHECK_FLAG(route->flag, OSPF6_ROUTE_BEST)) { + if (is_debug) { + prefix2str(&route->prefix, buf, + sizeof(buf)); + zlog_debug("%s: intra-prefix route %s with cost %u is not best, ignore." + , __PRETTY_FUNCTION__, buf, + route->path.cost); + } + return 0; + } + } + if (is_debug) { prefix2str(&route->prefix, buf, sizeof(buf)); zlog_debug("Originating summary in area %s for %s cost %u", @@ -271,9 +285,10 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route, ospf6_abr_delete_route(route, summary, summary_table, old); } - } else if (old) + } else if (old) { + ospf6_route_remove(summary, summary_table); ospf6_lsa_purge(old); - + } return 0; }