summaryrefslogtreecommitdiffstats
path: root/ospfd/ospf_asbr.h
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2021-10-21 17:54:42 +0200
committerDavid Lamparter <equinox@opensourcerouting.org>2021-10-22 12:13:46 +0200
commitf68ce9762785c0d33a4a983e6aa7e64c1107f198 (patch)
tree1e77c30e40063955de237171e6654316a5e2de29 /ospfd/ospf_asbr.h
parentMerge pull request #9843 from opensourcerouting/vtysh-startup-cost (diff)
downloadfrr-f68ce9762785c0d33a4a983e6aa7e64c1107f198.tar.xz
frr-f68ce9762785c0d33a4a983e6aa7e64c1107f198.zip
zebra: set SELECTED before going into dplane code
There is a bit of an impedance mismatch in the sequence of events here. Depending on the dplane behavior, the `ROUTE_ENTRY_SELECTED` bit will be inconsistent for rib_process_result(). With an asynchronous dataplane: 0. rib_process() is called 1. rib_install_kernel() is called, dplane action is queued 2. rib_install_kernel() returns 3. rib_process() sets the SELECTED bit appropriately, returns 4. dplane is done, triggers rib_process_result() 5. SELECTED bit is seen in "after" state (5a. NHT code looks at the SELECTED bit, works correctly.) With a synchronous dataplane: 0. rib_process() is called 1. rib_install_kernel() is called, dplane action is executed 2. dplane (should) trigger rib_process_result() 3. SELECTED bit is seen in "before" state (3a. NHT code looks at the SELECTED bit, fails.) 4. rib_install_kernel() returns 5. rib_process() sets the SELECTED bit appropriately, too late. Essentially, poking the dataplane is a sequencing point where control is handed over to the dplane. Control may or may not return immediately. Doing /anything/ after triggering the dataplane is a recipe for odd race conditions. (FWIW, I'm not sure rib_process_result() is called correctly in the synchronous case, but that's a separate problem.) Unfortunately, this change might have some unforeseen side effects. I haven't dug through the code to see if anything breaks. There /shouldn't/ be anything looking at the SELECTED bit here, but who knows. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'ospfd/ospf_asbr.h')
0 files changed, 0 insertions, 0 deletions