Page MenuHomeVyOS Platform

configd: one failed node skips the FRR render, routing lost at boot when a NIC is missing
Open, HighPublicBUG

Description

The T8482 change "reject commits referencing an incomplete policy object" (rolling b58881fda, circinus backport b01eac4e4) made vyos-configd skip the FRR render when any node of the commit failed (should_render_frr() in src/services/vyos-configd). VyOS still commits the nodes that succeeded, so their routing changes are in the configuration but never reach FRR.

At boot all nodes are in one commit. If a configured NIC is missing (removed or replaced hardware, a detached cloud vNIC), its ethernet node fails and the whole routing configuration stays out of FRR.

Boot case: the DUT has a static route, a BGP session and an OSPF area to a peer, all working. The NIC eth2, which has an address in the config, is removed from the VM and the VM is restarted. The boot journal shows:

vyos-configd[765]: Interface "eth2" does not exist!
vyos-configd[765]: [interfaces_ethernet] Interface "eth2" does not exist!

On the circinus head the static route, BGP and OSPF are in show configuration but absent from vtysh -c 'show running-config' and from the kernel. The peer sees BGP and OSPF down. On 1.5.1 the boot commit fails the same way, but routing comes up.

Interactive case:

set protocols static route 198.51.100.0/24 blackhole
set interfaces ethernet eth99 description x
commit
[ interfaces ethernet eth99 ]
Interface "eth99" does not exist!
[[interfaces ethernet eth99]] failed
Commit failed

The route is in show configuration commands and not in vtysh -c 'show running-config'. It reaches FRR only when a later commit changes a routing node. A commit that only deletes eth99 does not render it.

Expected: either the whole commit is rejected, or FRR gets the configuration of the nodes that were committed. 1.5.1 did the latter.

Details

Version
1.5
Is it a breaking change?
Unspecified (possibly destroys the router)
Issue type
Bug (incorrect behavior)