With protocols bgp parameters reject-as-sets configured, every commit that changes FRR configuration (BGP, other routing protocols, policy, static routes, anything that makes VyOS reload FRR) resets every established BGP session of that BGP instance, even when the commit has nothing to do with BGP. FRR sends NOTIFICATION Cease / Other Configuration Change to each peer and the session goes down and comes back; the peer withdraws and re-learns every route. This is the behaviour of rolling and 1.5.x (circinus), which render and reload the whole FRR configuration on such commits. It was measured on stock 1.5.1 (FRR 10.5.2) and on stock rolling (FRR 10.6.1); a commit that only changed a route-map description reset the session each time.
Root cause.
- Since FRR 10.5 bgp reject-as-sets is the default, and VyOS (T7664) renders bgp reject-as-sets when the option is set and no bgp reject-as-sets when it is not.
- FRR prints only the no bgp reject-as-sets form in show running-config. With the option set, the running configuration never contains the line that the rendered file has.
- frr-reload compares the rendered file with the running configuration, sees the line as missing, and sends it again on every reload.
- FRR's handler for bgp reject-as-sets resets every peer of the instance whether or not the value changed.