diff --git a/ospfd/ospf_abr.c b/ospfd/ospf_abr.c index 634418ec5a..f3c4798906 100644 --- a/ospfd/ospf_abr.c +++ b/ospfd/ospf_abr.c @@ -379,7 +379,7 @@ static int ospf_abr_nssa_am_elected(struct ospf_area *area) /* Check NSSA ABR status * assumes there are nssa areas */ -static void ospf_abr_nssa_check_status(struct ospf *ospf) +void ospf_abr_nssa_check_status(struct ospf *ospf) { struct ospf_area *area; struct listnode *lnode, *nnode; diff --git a/ospfd/ospf_abr.h b/ospfd/ospf_abr.h index b3007622c4..e15f4a6bf7 100644 --- a/ospfd/ospf_abr.h +++ b/ospfd/ospf_abr.h @@ -83,4 +83,5 @@ extern void ospf_schedule_abr_task(struct ospf *); extern void ospf_abr_announce_network_to_area(struct prefix_ipv4 *, uint32_t, struct ospf_area *); +extern void ospf_abr_nssa_check_status(struct ospf *ospf); #endif /* _ZEBRA_OSPF_ABR_H */ diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c index b53719a402..78814cb288 100644 --- a/ospfd/ospf_spf.c +++ b/ospfd/ospf_spf.c @@ -1432,8 +1432,11 @@ static int ospf_spf_calculate_schedule_worker(struct thread *thread) /* ABRs may require additional changes, see RFC 2328 16.7. */ monotime(&start_time); - if (IS_OSPF_ABR(ospf)) + if (IS_OSPF_ABR(ospf)) { + if (ospf->anyNSSA) + ospf_abr_nssa_check_status(ospf); ospf_abr_task(ospf); + } abr_time = monotime_since(&start_time, NULL); /* Schedule Segment Routing update */