diff options
Diffstat (limited to 'ospf6d/ospf6_abr.c')
| -rw-r--r-- | ospf6d/ospf6_abr.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c index a9b4c7756c..443759344e 100644 --- a/ospf6d/ospf6_abr.c +++ b/ospf6d/ospf6_abr.c @@ -394,7 +394,8 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route, return 0; } - if ((route->type == OSPF6_DEST_TYPE_ROUTER) && IS_AREA_STUB(area)) { + if ((route->type == OSPF6_DEST_TYPE_ROUTER) + && (IS_AREA_STUB(area) || IS_AREA_NSSA(area))) { if (is_debug) zlog_debug( "Area has been stubbed, purge Inter-Router LSA"); @@ -447,6 +448,20 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route, return 0; } + /* Do not generate if area is NSSA */ + route_area = + ospf6_area_lookup(route->path.area_id, area->ospf6); + assert(route_area); + + if (IS_AREA_NSSA(route_area)) { + if (is_debug) + zlog_debug( + "%s: The route comes from NSSA area, skip", + __func__); + ospf6_abr_delete_route(summary, summary_table, old); + return 0; + } + /* Do not generate if the area is stub */ /* XXX */ } @@ -1161,7 +1176,7 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa) if (lsa->header->adv_router == router_lsa->router_id) { if (is_debug) zlog_debug( - "Ignorning Inter-Router LSA for an ABR (%s)", + "Ignoring Inter-Router LSA for an ABR (%s)", buf); if (old) ospf6_route_remove(old, table); |
