]> git.puffer.fish Git - matthieu/frr.git/commit
ospf6d: update DR election to handle GR corner case
authorRenato Westphal <renato@opensourcerouting.org>
Wed, 1 Mar 2023 20:31:56 +0000 (17:31 -0300)
committerRenato Westphal <renato@opensourcerouting.org>
Thu, 2 Mar 2023 22:38:03 +0000 (19:38 -0300)
commite23e56831958c3ae373a56a13ab8e0fc46fe6413
treee877e18ee01093cdaeb283e9db0f935115112f03
parentd7917c25419c02724181925e04c5dc267c5d24b2
ospf6d: update DR election to handle GR corner case

Consider the case where a DR router is performing a graceful restart,
and all neighbors attached to the DR network have their priorities
set to zero.

According to RFC 3623, the router should reclaim its DR status while
coming back up once it receives a Hello packet from a neighbor
listing the router as the DR, and the associated interface is in
Waiting state.

The problem arises when the DR election starts. Since the router
is already elected the DR, and no BDR will be elected (since all
neighbors have their priorities set to zero), the AdjOk event won't
be triggered at the end of the DR election as it would normally
happen. That causes all neighbors reachable over the broadcast
interface to get stuck in the 2-Way state.

Fix this corner case by always triggering the AdjOk event at the
end of the DR election process when a GR is in progress. Triggering
the AdjOk event when not necessary should never be a problem as
the neighbor FSM is already prepared to deal with that.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
ospf6d/ospf6_interface.c