summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorViacheslav Hletenko <v.gletenko@vyos.io>2026-06-23 14:35:08 +0300
committerGitHub <noreply@github.com>2026-06-23 14:35:08 +0300
commit3edf114bed538733388252da0d23b49002273558 (patch)
treea750693b08e28f630729bcc6a7505ca22a42e20f /data
parentd1e320047348d90202a23a598cd771e41cb0be24 (diff)
parent23649ea9dec442795997aac3da148e3312018d75 (diff)
downloadvyos-1x-3edf114bed538733388252da0d23b49002273558.tar.gz
vyos-1x-3edf114bed538733388252da0d23b49002273558.zip
Merge pull request #5287 from alexk37/T8990
T8990: bgp: fix VPNv4/VPNv6 leaked routes flapping on every commit
Diffstat (limited to 'data')
-rw-r--r--data/templates/frr/bgpd.frr.j215
1 files changed, 12 insertions, 3 deletions
diff --git a/data/templates/frr/bgpd.frr.j2 b/data/templates/frr/bgpd.frr.j2
index 27d13c40c..c10aa2826 100644
--- a/data/templates/frr/bgpd.frr.j2
+++ b/data/templates/frr/bgpd.frr.j2
@@ -428,14 +428,23 @@ router bgp {{ system_as }} {{ 'vrf ' ~ vrf if vrf is vyos_defined }} {{ 'as-nota
{% if afi_config.rd.vpn.export is vyos_defined %}
rd vpn export {{ afi_config.rd.vpn.export }}
{% endif %}
+{# T8990: emit FRR's canonical "rt vpn" keyword (not the "route-target vpn" #}
+{# alias), and fold an identical import+export into "both" exactly as FRR #}
+{# does. FRR only folds on an identical, order-sensitive match, which is #}
+{# what the string compare below tests - so reordered or differing RT lists #}
+{# stay split on both sides too. This keeps the rendered config #}
+{# byte-identical to FRR's running config, so frr-reload produces no diff #}
+{# that would otherwise flap leaked routes on every commit. #}
{% if afi_config.route_target.vpn.both is vyos_defined %}
- route-target vpn both {{ afi_config.route_target.vpn.both }}
+ rt vpn both {{ afi_config.route_target.vpn.both }}
+{% elif afi_config.route_target.vpn.export is vyos_defined and afi_config.route_target.vpn.export == afi_config.route_target.vpn.import %}
+ rt vpn both {{ afi_config.route_target.vpn.export }}
{% else %}
{% if afi_config.route_target.vpn.export is vyos_defined %}
- route-target vpn export {{ afi_config.route_target.vpn.export }}
+ rt vpn export {{ afi_config.route_target.vpn.export }}
{% endif %}
{% if afi_config.route_target.vpn.import is vyos_defined %}
- route-target vpn import {{ afi_config.route_target.vpn.import }}
+ rt vpn import {{ afi_config.route_target.vpn.import }}
{% endif %}
{% endif %}
{% if afi_config.route_target.both is vyos_defined %}