Page MenuHomeVyOS Platform

bgp: commits re-send unchanged BGP settings to FRR
Open, NormalPublicBUG

Description

VyOS renders some BGP lines that FRR does not print back in its running configuration, either because they are FRR defaults or inherited from a peer-group, or because FRR prints them in a different form. frr-reload therefore sees a difference on every reload and applies them again, each in its own router bgp ... block.

This task covers these three:

rendered line (data/templates/frr/bgpd.frr.j2)FRR prints instead
neighbor <member> activate: rendered for every neighbor with address-family configuration, peer-group members includednothing when the member's peer-group is active in that address family: the member inherits it (bgp_config_write_peer_af prints a member's activate only if its group is not active)
bgp conditional-advertisement timer 60: always rendered, the CLI default is 60nothing: 60 is FRR's default
route-target both <rt> under a VRF's address-family l2vpn evpnroute-target import <rt> and route-target export <rt>: FRR never prints both for EVPN, so frr-reload deletes both lines and re-adds both

Reproduced on stock VyOS 1.5.1: with BGP peer-group members that have their own address-family settings, the default conditional-advertisement timer, and a VRF with address-family l2vpn-evpn route-target both, a commit that changes nothing in BGP re-sends the member activate lines, the timer and the route-targets on every reload, each line in its own router bgp ... block, once in pass 0 and twice in pass 1. In the test configuration (17 peer-group members, the default instance and three VRFs) that is 24 blocks in pass 0 (17 activate, 4 timer, 3 route-target) and 48 in pass 1.

Possible fix direction.

  • activate: skip a member's line when its peer-group has the same address family configured (the group's own activate is rendered); keep it when the group does not have that address family. Applies to neighbor ... peer-group and neighbor ... interface peer-group.
  • timer: render bgp conditional-advertisement timer only when it is not 60.
  • EVPN route-target: render both as two lines, route-target import <rt> and route-target export <rt>, as FRR prints it.

Details

Version
1.5.1, 1.5-rolling-20261008, 1.4.5
Is it a breaking change?
Unspecified (possibly destroys the router)
Issue type
Bug (incorrect behavior)