diff --git a/ospfd/ospf_abr.c b/ospfd/ospf_abr.c index f6c0504999..40a1ed3a8a 100644 --- a/ospfd/ospf_abr.c +++ b/ospfd/ospf_abr.c @@ -1153,6 +1153,15 @@ static void ospf_abr_announce_rtr(struct ospf *ospf, struct prefix_ipv4 *p, if (ospf_abr_nexthops_belong_to_area(or, area)) continue; + /* RFC3101: Do not generate ASBR type 4 LSA if NSSA ABR */ + if (or->u.std.external_routing == OSPF_AREA_NSSA) { + if (IS_DEBUG_OSPF_EVENT) + zlog_debug( + "ospf_abr_announce_rtr(): do not generate LSA Type-4 %s from NSSA", + inet_ntoa(p->prefix)); + continue; + } + if (area->external_routing != OSPF_AREA_DEFAULT) { if (IS_DEBUG_OSPF_EVENT) zlog_debug(