diff options
author | Martin Buck <mb-tmp-tvguho.pbz@gromit.dyndns.org> | 2021-05-10 22:48:32 +0200 |
---|---|---|
committer | Martin Buck <mb-tmp-tvguho.pbz@gromit.dyndns.org> | 2021-05-11 11:52:07 +0200 |
commit | 2d84ae9c29205065b10aa6873fa269080d55338f (patch) | |
tree | 6633a516771a8b4c3b3c8f383e794168c67a58e6 /ospf6d/ospf6_flood.c | |
parent | Merge pull request #8601 from Fredi-raspall/pr_fix_lfa_debug (diff) | |
download | frr-2d84ae9c29205065b10aa6873fa269080d55338f.tar.xz frr-2d84ae9c29205065b10aa6873fa269080d55338f.zip |
ospf6d: Send MAXAGE LS update for received old self-originated LSAs
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>
Diffstat (limited to '')
-rw-r--r-- | ospf6d/ospf6_flood.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/ospf6d/ospf6_flood.c b/ospf6d/ospf6_flood.c index 5f4815fec..3e86e9cc8 100644 --- a/ospf6d/ospf6_flood.c +++ b/ospf6d/ospf6_flood.c @@ -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) */ |