summaryrefslogtreecommitdiff
path: root/python/clidef.py
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2021-11-18 14:52:20 -0300
committerRenato Westphal <renato@opensourcerouting.org>2021-11-23 15:31:39 -0300
commit1bb2674ce451d634635fcfec509bd195af8310ca (patch)
tree0bb97696ec7a396f21b6fb583d0c5d441096bdfa /python/clidef.py
parent003d3dbeada846989b9471a9840491272cd0d86a (diff)
ospfd: fix incorrect detection of topology changes in helper mode
This commit fixes a rather obscure bug that was causing the GR topotest to fail on a frequent basis. RFC 3623 specifies that a router acting as a helper to a restarting neighbor should monitor topology changes and abort the GR procedures when one is detected, falling back to normal OSPF operation. ospfd uses the ospf_lsa_different() function to detect when the content of an LSA has changed, which is considered as a topology change. The problem is that ospf_lsa_different() can return true even when the two LSAs passed as parameters are identical, provided one LSA has the OSPF_LSA_RECEIVED flag set and the other not. In the context of the ospf_gr_topo1 test, router rt6 performs a graceful restart and a few seconds later acts as a helper for router rt7. When it's acting as a helper for rt7, it still didn't translate its NSSA Type-7 LSAs, something that happens only after 7 seconds (OSPF_ABR_TASK_DELAY) of the first SPF run. The translated Type-5 LSAs on its LSDB were learned from the helping neighbors (rt3 and rt7). It's then possible that the NSSA Type-7 LSAs might be translated while rt6 is acting as helper for rt7, which causes the daemon to detect a non-existent topology change only because the OSPF_LSA_RECEIVED flag is unset in the recently originated Type-5 LSA. Fix this problem by ignoring the OSPF_LSA_RECEIVED flag when comparing LSAs for the purpose of topology change detection. In short, the bug would only show up when the restarting router would start acting as a helper immediately after coming back up (which would be hard to happen in the real world). The topotest failures became more frequent after commit 6255aad0bc78c1 because of the removal of the 'sleep' calls, which used to give ospfd more time to converge before start acting as a helper for other routers. The problem still occurred from time to time though. Fixes #9983. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'python/clidef.py')
0 files changed, 0 insertions, 0 deletions