diff options
Diffstat (limited to 'ospf6d/ospf6_flood.c')
-rw-r--r-- | ospf6d/ospf6_flood.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/ospf6d/ospf6_flood.c b/ospf6d/ospf6_flood.c index aeff15bc..05112021 100644 --- a/ospf6d/ospf6_flood.c +++ b/ospf6d/ospf6_flood.c @@ -204,6 +204,7 @@ void ospf6_install_lsa (struct ospf6_lsa *lsa) { struct ospf6_lsa *old; + struct timeval now; if (IS_OSPF6_DEBUG_LSA (RECV) || IS_OSPF6_DEBUG_LSA (DATABASE)) zlog_info ("Install LSA: %s", lsa->name); @@ -213,10 +214,20 @@ ospf6_install_lsa (struct ospf6_lsa *lsa) old = ospf6_lsdb_lookup (lsa->header->type, lsa->header->id, lsa->header->adv_router, lsa->lsdb); if (old) - ospf6_flood_clear (old); + { + THREAD_OFF (old->expire); + ospf6_flood_clear (old); + } + + gettimeofday (&now, (struct timezone *) NULL); + if (ospf6_lsa_age_current (lsa) != MAXAGE) + lsa->expire = thread_add_timer (master, ospf6_lsa_expire, lsa, + MAXAGE + lsa->birth.tv_sec - now.tv_sec); + else + lsa->expire = NULL; /* actually install */ - gettimeofday (&lsa->installed, (struct timezone *) NULL); + lsa->installed = now; ospf6_lsdb_add (lsa, lsa->lsdb); return; |