Hello,
On BIRD 3.3.2 a static route with an interface or neighbour next hop
stops reacting to interface state after the first `birdc configure`. It
is frozen at whatever state that reconfiguration evaluated and never
moves again -- it neither withdraws when the interface goes down nor
returns when it comes back -- until `birdc restart <proto>`.
`configure soft` and `configure undo` behave the same, and
`birdc reload` does not repair it. `check link` makes no difference
either way.
The attached reproducer, bird-repro-static-iface-tracking.sh, needs only
root, iproute2 and an installed bird3, cleans up after itself, and marks
any step whose result differs from expectation. On Debian's bird3
3.3.2-1~bpo13+1:
BIRD version 3.3.2
fresh: iface up route=yes want=yes
fresh: iface down route=no want=no
fresh: iface up route=yes want=yes
-- birdc configure, configuration unchanged --
after cfg: iface up route=yes want=yes
after cfg: iface down route=yes want=no <-- MISMATCH
after cfg: iface up route=yes want=yes
-- birdc restart s1 --
after restart: down route=no want=no
-- birdc configure, taken while the iface is DOWN --
still down route=no want=no
then: iface up route=no want=yes <-- MISMATCH
then: iface down route=no want=no
The same script on the same machine, with BIRD= and BIRDC= pointing at
Debian's bird2 2.17.5-0+deb13u1:
BIRD version 2.17.5
fresh: iface up route=yes want=yes
fresh: iface down route=no want=no
fresh: iface up route=yes want=yes
-- birdc configure, configuration unchanged --
after cfg: iface up route=yes want=yes
after cfg: iface down route=no want=no
after cfg: iface up route=yes want=yes
-- birdc restart s1 --
after restart: down route=no want=no
-- birdc configure, taken while the iface is DOWN --
still down route=no want=no
then: iface up route=yes want=yes
then: iface down route=no want=no