mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-28 09:16:34 +00:00
![]() After two single-hop sessions (*no local address are configured*) on two interfaces are UP, remove one address of one interface, both of them (actually, quite independent sessions) come to be DOWN, not just one. Consider two boxes: A with `a1` and `a2` adddress on two interfaces, and B with `b1` and `b2`. Two sessions are set up and ok: `s1` with <a1,b1> and `s2` with <a2,b2>. After `a1` of A is removed, there is an unhappy coincidence: 1) On A: `s1` changes local address, and sends <a2,b1> packets with help of route. 2) On B: wrongly regarded <a2,b1> packets with non-zero remote descriminator as part of `s2`, and are dropped for mismatched remote remote descriminator. 3) On A: `s1` sends <a2,b1> packets with zero remote descriminator to initialize this session. 4) On B: wrongly regarded <a2,b1> packets with zero remote descriminator as part of `s2`. Then `s2` will vibrate. So the good sessions are overridden. In this case, the <a2,b1> packets with zero remote descriminator won't take effect until the current good sessions become bad. Since single-hop sessions are allowed to be set without bound inteface in current code, this commit adds one check in `bfd_recv_cb()` to avoid wrong override. Signed-off-by: anlan_cs <vic.lan@pica8.com> |
||
---|---|---|
.. | ||
.gitignore | ||
bfd_packet.c | ||
bfd.c | ||
bfd.h | ||
bfdctl.h | ||
bfdd_cli.c | ||
bfdd_nb_config.c | ||
bfdd_nb_state.c | ||
bfdd_nb.c | ||
bfdd_nb.h | ||
bfdd_vty.c | ||
bfdd.c | ||
bfddp_packet.h | ||
config.c | ||
control.c | ||
dplane.c | ||
event.c | ||
Makefile | ||
ptm_adapter.c | ||
subdir.am |