ospf6d: Fix flooding of old copies of self-originated LSAs

When receiving old copies (e.g. originated before the local ospf6d was
restarted) of supposedly self-originated LSAs which we previously tried to
flush from the network (by setting them to MaxAge), neither flood them nor
add them to our LSDB. Instead, keep the MaxAge version until we actually
(re-)originate them.

Possible fix for #7030. Testcase in #7168
(tests/topotests/ospf6-dr-no-netlsa-bug7030).

Signed-off-by: Martin Buck <mb-tmp-tvguho.pbz@gromit.dyndns.org>
This commit is contained in:
Martin Buck 2020-09-29 23:07:40 +02:00
parent 0ce5baaab1
commit 4c63a76a63

View File

@ -1001,18 +1001,22 @@ void ospf6_receive_lsa(struct ospf6_neighbor *from,
* MAXAGEd and not removed.*/
if (OSPF6_LSA_IS_MAXAGE(old)
&& !OSPF6_LSA_IS_MAXAGE(new)) {
if (new->header->adv_router
!= from->ospf6_if->area->ospf6->router_id) {
if (is_debug)
zlog_debug(
"%s: Current copy of LSA %s is MAXAGE, but new has recent Age.",
old->name, __func__);
"%s: Current copy of LSA %s is MAXAGE, but new has recent age, flooding/installing.",
old->name, __PRETTY_FUNCTION__);
ospf6_lsa_purge(old);
if (new->header->adv_router
!= from->ospf6_if->area->ospf6->router_id)
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;
}