summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-03-10 20:33:36 +0100
committerChristian Poessinger <christian@poessinger.com>2021-03-10 20:33:36 +0100
commitc14098b7b1517d77bf53318cc7964295d54db119 (patch)
treef8c5ec0ee68d8f1c44b5b31577c3553b02875aec
parent607339f6593514a4b4b37b95fd97e5e2d2039585 (diff)
downloadvyos-1x-c14098b7b1517d77bf53318cc7964295d54db119.tar.gz
vyos-1x-c14098b7b1517d77bf53318cc7964295d54db119.zip
bgp: evpn: T1513: add support for per VNI route-distinguished and route-target
set protocols bgp 65010 address-family l2vpn-evpn vni 100 route-target both 516:10516 set protocols bgp 65010 address-family l2vpn-evpn vni 100 rd 192.168.0.1:514 Todo: add verify() step to check if at least one evpn enabled BGP neighbor exits, else FRR will error out with: This command is only supported under EVPN VRF
-rw-r--r--data/templates/frr/bgp.frr.tmpl14
-rw-r--r--interface-definitions/include/bgp-afi-l2vpn-common.xml.i13
-rw-r--r--interface-definitions/include/bgp-route-target.xml.i45
-rw-r--r--interface-definitions/protocols-bgp.xml.in55
4 files changed, 72 insertions, 55 deletions
diff --git a/data/templates/frr/bgp.frr.tmpl b/data/templates/frr/bgp.frr.tmpl
index 3101de7ea..f7aeaeb9d 100644
--- a/data/templates/frr/bgp.frr.tmpl
+++ b/data/templates/frr/bgp.frr.tmpl
@@ -280,6 +280,20 @@ router bgp {{ asn }}
{% if vni_config.advertise_svi_ip is defined %}
advertise-svi-ip
{% endif %}
+{% if vni_config.rd is defined and vni_config.rd is not none %}
+ rd {{ vni_config.rd }}
+{% endif %}
+{% if vni_config.route_target is defined and vni_config.route_target is not none %}
+{% if vni_config.route_target.both is defined and vni_config.route_target.both is not none %}
+ route-target both {{ vni_config.route_target.both }}
+{% endif %}
+{% if vni_config.route_target.export is defined and vni_config.route_target.export is not none %}
+ route-target export {{ vni_config.route_target.export }}
+{% endif %}
+{% if vni_config.route_target.import is defined and vni_config.route_target.import is not none %}
+ route-target import {{ vni_config.route_target.import }}
+{% endif %}
+{% endif %}
exit-vni
{% endfor %}
{% endif %}
diff --git a/interface-definitions/include/bgp-afi-l2vpn-common.xml.i b/interface-definitions/include/bgp-afi-l2vpn-common.xml.i
index 11b1cf6bf..2bbf57532 100644
--- a/interface-definitions/include/bgp-afi-l2vpn-common.xml.i
+++ b/interface-definitions/include/bgp-afi-l2vpn-common.xml.i
@@ -11,4 +11,17 @@
<valueless/>
</properties>
</leafNode>
+<leafNode name="rd">
+ <properties>
+ <help>Route Distinguisher</help>
+ <valueHelp>
+ <format>txt</format>
+ <description>Route Distinguisher, (x.x.x.x:yyy|xxxx:yyyy)</description>
+ </valueHelp>
+ <constraint>
+ <regex>^((25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)(\.(25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)){3}|[0-9]{1,10}):[0-9]{1,5}$</regex>
+ </constraint>
+ </properties>
+</leafNode>
+#include <include/bgp-route-target.xml.i>
<!-- included end -->
diff --git a/interface-definitions/include/bgp-route-target.xml.i b/interface-definitions/include/bgp-route-target.xml.i
new file mode 100644
index 000000000..c3df56a74
--- /dev/null
+++ b/interface-definitions/include/bgp-route-target.xml.i
@@ -0,0 +1,45 @@
+<!-- included start from bgp-route-target.xml.i -->
+<node name="route-target">
+ <properties>
+ <help>Route Target</help>
+ </properties>
+ <children>
+ <leafNode name="both">
+ <properties>
+ <help>Route Target both import and export</help>
+ <valueHelp>
+ <format>txt</format>
+ <description>Route target (x.x.x.x:yyy|xxxx:yyyy)</description>
+ </valueHelp>
+ <constraint>
+ <regex>^((25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)(\.(25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)){3}|[0-9]{1,10}):[0-9]{1,5}$</regex>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="export">
+ <properties>
+ <help>Route Target export</help>
+ <valueHelp>
+ <format>txt</format>
+ <description>Route target (x.x.x.x:yyy|xxxx:yyyy)</description>
+ </valueHelp>
+ <constraint>
+ <regex>^((25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)(\.(25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)){3}|[0-9]{1,10}):[0-9]{1,5}$</regex>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="import">
+ <properties>
+ <help>Route Target import</help>
+ <valueHelp>
+ <format>txt</format>
+ <description>Route target (x.x.x.x:yyy|xxxx:yyyy)</description>
+ </valueHelp>
+ <constraint>
+ <regex>^((25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)(\.(25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)){3}|[0-9]{1,10}):[0-9]{1,5}$</regex>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+</node>
+<!-- included end -->
diff --git a/interface-definitions/protocols-bgp.xml.in b/interface-definitions/protocols-bgp.xml.in
index 96a0b1315..afcd8f727 100644
--- a/interface-definitions/protocols-bgp.xml.in
+++ b/interface-definitions/protocols-bgp.xml.in
@@ -276,61 +276,6 @@
</leafNode>
</children>
</node>
- <leafNode name="rd">
- <properties>
- <help>Route Distinguisher</help>
- <valueHelp>
- <format>txt</format>
- <description>Route Distinguisher, asn:xxx</description>
- </valueHelp>
- <constraint>
- <regex>^[0-9]{1,10}:[0-9]{1,5}$</regex>
- </constraint>
- </properties>
- </leafNode>
- <node name="route-target">
- <properties>
- <help>Route Target</help>
- </properties>
- <children>
- <leafNode name="both">
- <properties>
- <help>Route Target both import and export</help>
- <valueHelp>
- <format>txt</format>
- <description>Route target (x.x.x.x:yyy|xxxx:yyyy)</description>
- </valueHelp>
- <constraint>
- <regex>^((25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)(\.(25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)){3}|[0-9]{1,10}):[0-9]{1,5}$</regex>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="export">
- <properties>
- <help>Route Target export</help>
- <valueHelp>
- <format>txt</format>
- <description>Route target (x.x.x.x:yyy|xxxx:yyyy)</description>
- </valueHelp>
- <constraint>
- <regex>^((25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)(\.(25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)){3}|[0-9]{1,10}):[0-9]{1,5}$</regex>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="import">
- <properties>
- <help>Route Target import</help>
- <valueHelp>
- <format>txt</format>
- <description>Route target (x.x.x.x:yyy|xxxx:yyyy)</description>
- </valueHelp>
- <constraint>
- <regex>^((25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)(\.(25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1-9][0-9]|[0-9]?)){3}|[0-9]{1,10}):[0-9]{1,5}$</regex>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </node>
<tagNode name="vni">
<properties>
<help>VXLAN Network Identifier</help>