diff options
author | Christian Breunig <christian@breunig.cc> | 2024-02-11 09:31:38 +0100 |
---|---|---|
committer | Mergify <37929162+mergify[bot]@users.noreply.github.com> | 2024-02-13 16:34:17 +0000 |
commit | af90428a276c1dc4f40640a22f970e3695ac35a0 (patch) | |
tree | d194c0444ab2c5ba80a05a47164298b5f21d7691 | |
parent | 6f64847213a01f125147aa2e7193951caad83f35 (diff) | |
download | vyos-1x-af90428a276c1dc4f40640a22f970e3695ac35a0.tar.gz vyos-1x-af90428a276c1dc4f40640a22f970e3695ac35a0.zip |
bgp: T6032: add EVPN MAC-VRF Site-of-Origin support
In some EVPN deployments it is useful to associate a logical VTEP's Layer 2
domain (MAC-VRF) with a Site-of-Origin "site" identifier. This provides a BGP
topology-independent means of marking and import-filtering EVPN routes
originated from a particular L2 domain. One situation where this is valuable
is when deploying EVPN using anycast VTEPs
set protocols bgp address-family l2vpn-evpn mac-vrf soo
(cherry picked from commit f308df322bd62024e29dd458642cb6bcac8a5ad6)
-rw-r--r-- | data/templates/frr/bgpd.frr.j2 | 5 | ||||
-rw-r--r-- | interface-definitions/include/bgp/protocol-common-config.xml.i | 24 | ||||
-rwxr-xr-x | smoketest/scripts/cli/test_protocols_bgp.py | 4 |
3 files changed, 31 insertions, 2 deletions
diff --git a/data/templates/frr/bgpd.frr.j2 b/data/templates/frr/bgpd.frr.j2 index ed55db3f2..e9422b257 100644 --- a/data/templates/frr/bgpd.frr.j2 +++ b/data/templates/frr/bgpd.frr.j2 @@ -390,7 +390,7 @@ router bgp {{ system_as }} {{ 'vrf ' ~ vrf if vrf is vyos_defined }} {% endif %} {% if afi_config.ead_es_route_target.export is vyos_defined %} {% for route_target in afi_config.ead_es_route_target.export %} - ead-es-route-target export {{ route_target }} + ead-es-route-target export {{ route_target }} {% endfor %} {% endif %} {% if afi_config.rt_auto_derive is vyos_defined %} @@ -402,6 +402,9 @@ router bgp {{ system_as }} {{ 'vrf ' ~ vrf if vrf is vyos_defined }} {% if afi_config.flooding.head_end_replication is vyos_defined %} flooding head-end-replication {% endif %} +{% if afi_config.mac_vrf.soo is vyos_defined %} + mac-vrf soo {{ afi_config.mac_vrf.soo }} +{% endif %} {% if afi_config.nexthop.vpn.export is vyos_defined %} nexthop vpn export {{ afi_config.nexthop.vpn.export }} {% endif %} diff --git a/interface-definitions/include/bgp/protocol-common-config.xml.i b/interface-definitions/include/bgp/protocol-common-config.xml.i index ea6e75bbd..ca67eaf3c 100644 --- a/interface-definitions/include/bgp/protocol-common-config.xml.i +++ b/interface-definitions/include/bgp/protocol-common-config.xml.i @@ -894,6 +894,30 @@ </leafNode> </children> </node> + <node name="mac-vrf"> + <properties> + <help>EVPN MAC-VRF</help> + </properties> + <children> + <leafNode name="soo"> + <properties> + <help>Site-of-Origin extended community</help> + <valueHelp> + <format>ASN:NN</format> + <description>based on autonomous system number in format <0-65535:0-4294967295></description> + </valueHelp> + <valueHelp> + <format>IP:NN</format> + <description>Based on a router-id IP address in format <IP:0-65535></description> + </valueHelp> + <constraint> + <validator name="bgp-extended-community"/> + </constraint> + <constraintErrorMessage>Should be in form: ASN:NN or IPADDR:NN where ASN is autonomous system number</constraintErrorMessage> + </properties> + </leafNode> + </children> + </node> <tagNode name="vni"> <properties> <help>VXLAN Network Identifier</help> diff --git a/smoketest/scripts/cli/test_protocols_bgp.py b/smoketest/scripts/cli/test_protocols_bgp.py index eadd8a004..1d68ae08b 100755 --- a/smoketest/scripts/cli/test_protocols_bgp.py +++ b/smoketest/scripts/cli/test_protocols_bgp.py @@ -751,7 +751,7 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase): def test_bgp_07_l2vpn_evpn(self): vnis = ['10010', '10020', '10030'] - neighbors = ['192.0.2.10', '192.0.2.20', '192.0.2.30'] + soo = '1.2.3.4:10000' evi_limit = '1000' route_targets = ['1.1.1.1:100', '1.1.1.1:200', '1.1.1.1:300'] @@ -763,6 +763,7 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase): self.cli_set(base_path + ['address-family', 'l2vpn-evpn', 'default-originate', 'ipv6']) self.cli_set(base_path + ['address-family', 'l2vpn-evpn', 'disable-ead-evi-rx']) self.cli_set(base_path + ['address-family', 'l2vpn-evpn', 'disable-ead-evi-tx']) + self.cli_set(base_path + ['address-family', 'l2vpn-evpn', 'mac-vrf', 'soo', soo]) for vni in vnis: self.cli_set(base_path + ['address-family', 'l2vpn-evpn', 'vni', vni, 'advertise-default-gw']) self.cli_set(base_path + ['address-family', 'l2vpn-evpn', 'vni', vni, 'advertise-svi-ip']) @@ -786,6 +787,7 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase): self.assertIn(f' disable-ead-evi-rx', frrconfig) self.assertIn(f' disable-ead-evi-tx', frrconfig) self.assertIn(f' flooding disable', frrconfig) + self.assertIn(f' mac-vrf soo {soo}', frrconfig) for vni in vnis: vniconfig = self.getFRRconfig(f' vni {vni}') self.assertIn(f'vni {vni}', vniconfig) |