]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospf6d: Send MAXAGE LS update for received old self-originated LSAs
authorMartin Buck <mb-tmp-tvguho.pbz@gromit.dyndns.org>
Mon, 10 May 2021 20:48:32 +0000 (22:48 +0200)
committerMartin Buck <mb-tmp-tvguho.pbz@gromit.dyndns.org>
Tue, 11 May 2021 09:52:07 +0000 (11:52 +0200)
Fixes OSPFv3-26.13 ANVL RFC conformance bug #8576 by improving the bugfix
for #7030 from 4c63a76a. That commit changed handling of received old
non-MAXAGE LSAs with a MAXAGE counterpart in the LSDB from "add all LSAs to
LSDB and flood non-self-originated ones" to "add & flood only
non-self-originated LSAs and ignore self-originated LSAs". The new behaviour
is similar but adds sending a MAXAGE LS Update for received self-originated
LSAs to remove the old LSAs from the network, resulting in "add & flood
non-self-originated LSAs, don't add but send MAXAGE LS Update for
self-originated LSAs". The missing MAXAGE LS Update is what OSPFv3-26.13
ANVL complained about.

Signed-off-by: Martin Buck <mb-tmp-tvguho.pbz@gromit.dyndns.org>
ospf6d/ospf6_flood.c

index 5f4815fec1ddd8533e4edb0d864a691487e21c24..3e86e9cc83df0bda0ca51766178db824a0717fb3 100644 (file)
@@ -1016,18 +1016,20 @@ void ospf6_receive_lsa(struct ospf6_neighbor *from,
                                        if (is_debug)
                                                zlog_debug(
                                                        "%s: Current copy of LSA %s is MAXAGE, but new has recent age, flooding/installing.",
-                                                       old->name, __PRETTY_FUNCTION__);
+                                                       __PRETTY_FUNCTION__, old->name);
                                        ospf6_lsa_purge(old);
                                        ospf6_flood(from, new);
                                        ospf6_install_lsa(new);
-                               } else {
-                                       if (is_debug)
-                                               zlog_debug(
-                                                       "%s: Current copy of self-originated LSA %s is MAXAGE, but new has recent age, ignoring new.",
-                                                       old->name, __PRETTY_FUNCTION__);
-                                       ospf6_lsa_delete(new);
+                                       return;
                                }
-                               return;
+                               /* For self-originated LSA, only trust
+                                * ourselves. Fall through and send
+                                * LS Update with our current copy.
+                                */
+                               if (is_debug)
+                                       zlog_debug(
+                                               "%s: Current copy of self-originated LSA %s is MAXAGE, but new has recent age, re-sending current one.",
+                                               __PRETTY_FUNCTION__, old->name);
                        }
 
                        /* XXX, MinLSArrival check !? RFC 2328 13 (8) */