diff --git a/proto/ospf/lsalib.c b/proto/ospf/lsalib.c index 80649f53..fcf23fc6 100644 --- a/proto/ospf/lsalib.c +++ b/proto/ospf/lsalib.c @@ -49,7 +49,7 @@ ospf_age(struct ospf_area *oa) WALK_SLIST_DELSAFE(en, nxt, oa->lsal) { - if (po->calcrt) + if (oa->rt && (oa->rt->dist != LSINFINITY)) { en->color = OUTSPF; en->dist = LSINFINITY; diff --git a/proto/ospf/rt.c b/proto/ospf/rt.c index cbd53f65..78eb8025 100644 --- a/proto/ospf/rt.c +++ b/proto/ospf/rt.c @@ -69,6 +69,9 @@ ospf_rt_spfa(struct ospf_area *oa) if (oa->rt == NULL) return; + if (oa->rt->dist != LSINFINITY) + ospf_age(oa); + FIB_WALK(in, nftmp) { nf = (struct infib *) nftmp; diff --git a/proto/ospf/topology.c b/proto/ospf/topology.c index 6a6eb01d..75e074a7 100644 --- a/proto/ospf/topology.c +++ b/proto/ospf/topology.c @@ -201,6 +201,7 @@ originate_rt_lsa(struct ospf_area *oa) lsasum_calculate(&lsa, body, po); en = lsa_install_new(&lsa, body, oa); oa->rt = en; + en->dist = 0; /* Force area aging */ ospf_lsupd_flood(NULL, NULL, &oa->rt->lsa, NULL, oa, 1); schedule_rtcalc(po); oa->origrt = 0;