From 9b4ef258a9d9c5f1052afe0e19ebaef9f6740fa2 Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Thu, 16 Jul 2009 17:20:37 +0100 Subject: [ospf6d] Fix regression in monotonic time patch - LSA max-aging broke * ospf6_lsa.c: (ospf6_lsa_premature_aging) set age to MAX_AGE - don't rely on 0 magically meaning same. (ospf6_lsa_age_current) handle MAXAGE. --- ospf6d/ospf6_lsa.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'ospf6d') diff --git a/ospf6d/ospf6_lsa.c b/ospf6d/ospf6_lsa.c index 108c025d..34040b84 100644 --- a/ospf6d/ospf6_lsa.c +++ b/ospf6d/ospf6_lsa.c @@ -207,6 +207,12 @@ ospf6_lsa_age_current (struct ospf6_lsa *lsa) zlog_warn ("LSA: quagga_gettime failed, may fail LSA AGEs: %s", safe_strerror (errno)); + if (lsa->header->age >= htons (MAXAGE)) + { + /* LSA may have been prematurely aged */ + lsa->header->age = htons (MAXAGE); + return MAXAGE; + } /* calculate age */ ulage = now.tv_sec - lsa->birth.tv_sec; @@ -239,7 +245,12 @@ ospf6_lsa_premature_aging (struct ospf6_lsa *lsa) THREAD_OFF (lsa->expire); THREAD_OFF (lsa->refresh); + /* + * The below technique to age out LSA does not work when using relative time + * memset (&lsa->birth, 0, sizeof (struct timeval)); + */ + lsa->header->age = htons (MAXAGE); thread_execute (master, ospf6_lsa_expire, lsa, 0); } -- cgit v1.2.1