summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/templates/frr/bgp.frr.tmpl7
-rw-r--r--op-mode-definitions/include/bgp-afi-common.xml.i40
-rw-r--r--op-mode-definitions/include/bgp-afi-ipv4-ipv6-common.xml.i243
-rw-r--r--op-mode-definitions/include/bgp-prefix-bestpath-multipath.xml.i20
-rw-r--r--op-mode-definitions/include/vtysh-generic-detail.xml.i8
-rw-r--r--op-mode-definitions/show-bgp.xml.in262
-rw-r--r--op-mode-definitions/show-ip-bgp.xml.in228
-rw-r--r--op-mode-definitions/show-ipv6-bgp.xml.in203
-rw-r--r--python/vyos/ethtool.py80
-rwxr-xr-xsrc/conf_mode/interfaces-ethernet.py9
-rwxr-xr-xsrc/conf_mode/protocols_bgp.py8
11 files changed, 676 insertions, 432 deletions
diff --git a/data/templates/frr/bgp.frr.tmpl b/data/templates/frr/bgp.frr.tmpl
index 6ba223196..30741aa27 100644
--- a/data/templates/frr/bgp.frr.tmpl
+++ b/data/templates/frr/bgp.frr.tmpl
@@ -116,8 +116,11 @@
{% if afi_config.attribute_unchanged is defined and afi_config.attribute_unchanged is not none %}
neighbor {{ neighbor }} attribute-unchanged {{ 'as-path ' if afi_config.attribute_unchanged.as_path is defined }}{{ 'med ' if afi_config.attribute_unchanged.med is defined }}{{ 'next-hop ' if afi_config.attribute_unchanged.next_hop is defined }}
{% endif %}
-{% if afi_config.capability is defined and afi_config.capability.orf is defined and afi_config.capability.orf.prefix_list is defined and afi_config.capability.orf.prefix_list is not none %}
- neighbor {{ neighbor }} capability orf prefix-list {{ afi_config.capability.orf.prefix_list }}
+{% if afi_config.capability is defined and afi_config.capability.orf is defined and afi_config.capability.orf.prefix_list is defined and afi_config.capability.orf.prefix_list.send is defined %}
+ neighbor {{ neighbor }} capability orf prefix-list send
+{% endif %}
+{% if afi_config.capability is defined and afi_config.capability.orf is defined and afi_config.capability.orf.prefix_list is defined and afi_config.capability.orf.prefix_list.receive is defined %}
+ neighbor {{ neighbor }} capability orf prefix-list receive
{% endif %}
{% if afi_config.default_originate is defined %}
neighbor {{ neighbor }} default-originate {{ 'route-map ' + afi_config.default_originate.route_map if afi_config.default_originate.route_map is defined }}
diff --git a/op-mode-definitions/include/bgp-afi-common.xml.i b/op-mode-definitions/include/bgp-afi-common.xml.i
new file mode 100644
index 000000000..06cfc42a5
--- /dev/null
+++ b/op-mode-definitions/include/bgp-afi-common.xml.i
@@ -0,0 +1,40 @@
+<!-- included start from bgp-afi-common.xml.i -->
+<tagNode name="community">
+ <properties>
+ <help>Community number where AA and NN are (0-65535)</help>
+ <completionHelp>
+ <list>AA:NN</list>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="exact-match">
+ <properties>
+ <help>Exact match of the communities</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</tagNode>
+<tagNode name="large-community">
+ <properties>
+ <help>List of large-community numbers</help>
+ <completionHelp>
+ <list>AA:BB:CC</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</tagNode>
+<leafNode name="statistics">
+ <properties>
+ <help>RIB advertisement statistics</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</leafNode>
+<leafNode name="summary">
+ <properties>
+ <help>Summary of BGP neighbor status</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</leafNode>
+<!-- included end -->
diff --git a/op-mode-definitions/include/bgp-afi-ipv4-ipv6-common.xml.i b/op-mode-definitions/include/bgp-afi-ipv4-ipv6-common.xml.i
new file mode 100644
index 000000000..dc0926375
--- /dev/null
+++ b/op-mode-definitions/include/bgp-afi-ipv4-ipv6-common.xml.i
@@ -0,0 +1,243 @@
+<!-- included start from bgp-afi-ipv4-ipv6-common.xml.i -->
+<node name="community">
+ <properties>
+ <help>Display routes matching the community</help>
+ </properties>
+ <children>
+ <leafNode name="accept-own">
+ <properties>
+ <help>Should accept local VPN route if exported and imported into different VRF (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="accept-own-nexthop">
+ <properties>
+ <help>Should accept VPN route with local nexthop (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="blackhole">
+ <properties>
+ <help>Inform EBGP peers to blackhole traffic to prefix (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="exact-match">
+ <properties>
+ <help>Exact match of the communities</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="graceful-shutdown">
+ <properties>
+ <help>Graceful shutdown (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="llgr-stale">
+ <properties>
+ <help>Staled Long-lived Graceful Restart VPN route (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="local-AS">
+ <properties>
+ <help>Do not send outside local AS (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="no-advertise">
+ <properties>
+ <help>Do not advertise to any peer (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="no-export">
+ <properties>
+ <help>Do not export to next AS (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="no-llgr">
+ <properties>
+ <help>Removed because Long-lived Graceful Restart was not enabled for VPN route (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="no-peer">
+ <properties>
+ <help>Do not export to any peer (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="route-filter-translated-v4">
+ <properties>
+ <help>RT translated VPNv4 route filtering (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="route-filter-translated-v6">
+ <properties>
+ <help>RT translated VPNv6 route filtering (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="route-filter-v4">
+ <properties>
+ <help>RT VPNv4 route filtering (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="route-filter-v6">
+ <properties>
+ <help>RT VPNv6 route filtering (well-known community)</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</node>
+<tagNode name="community-list">
+ <properties>
+ <help>Display routes matching the community-list</help>
+ <completionHelp>
+ <list>1-500 name</list>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="exact-match">
+ <properties>
+ <help>Show BGP routes exactly matching specified community list</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</tagNode>
+<node name="dampening">
+ <properties>
+ <help>Display detailed information about dampening</help>
+ </properties>
+ <children>
+ <leafNode name="dampened-paths">
+ <properties>
+ <help>Display paths suppressed due to dampening</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="flap-statistics">
+ <properties>
+ <help>Display flap statistics of routes</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="parameters">
+ <properties>
+ <help>Display detail of configured dampening parameters</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+</node>
+<tagNode name="filter-list">
+ <properties>
+ <help>Display routes conforming to the filter-list</help>
+ <completionHelp>
+ <script>vtysh -c 'show bgp as-path-access-list' | grep 'AS path access list' | awk '{print $NF}'</script>
+ </completionHelp>
+ </properties>
+</tagNode>
+<node name="large-community">
+ <properties>
+ <help>Show BGP routes matching the specified large-communities</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</node>
+<leafNode name="neighbors">
+ <properties>
+ <help>Detailed information on TCP and BGP neighbor connections</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</leafNode>
+<tagNode name="neighbors">
+ <properties>
+ <help>Show detailed BGP IPv4 unicast neighbor information</help>
+ <completionHelp>
+ <script>vtysh -c 'show bgp summary' | awk '{print $1'} | grep -e '^[0-9a-f]'</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ <leafNode name="advertised-routes">
+ <properties>
+ <help>Show routes advertised to a BGP neighbor</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="dampened-routes">
+ <properties>
+ <help>Show dampened routes received from BGP neighbor</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="flap-statistics">
+ <properties>
+ <help>Show flap statistics of the routes learned from BGP neighbor</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="prefix-counts">
+ <properties>
+ <help>Show detailed prefix count information for BGP neighbor</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <node name="received">
+ <properties>
+ <help>Show information received from BGP neighbor</help>
+ </properties>
+ <children>
+ <leafNode name="prefix-filter">
+ <properties>
+ <help>Show prefixlist filter</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </node>
+ <leafNode name="received-routes">
+ <properties>
+ <help>Show received routes from BGP neighbor</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="routes">
+ <properties>
+ <help>Show routes learned from BGP neighbor</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+</tagNode>
+<tagNode name="prefix-list">
+ <properties>
+ <help>Display routes conforming to the prefix-list</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</tagNode>
+<tagNode name="regexp">
+ <properties>
+ <help>Display routes matching the AS path regular expression</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</tagNode>
+<tagNode name="route-map">
+ <properties>
+ <help>Show BGP routes matching the specified route map</help>
+ <completionHelp>
+ <path>policy route-map</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</tagNode>
+<!-- included end -->
diff --git a/op-mode-definitions/include/bgp-prefix-bestpath-multipath.xml.i b/op-mode-definitions/include/bgp-prefix-bestpath-multipath.xml.i
new file mode 100644
index 000000000..224fa6b45
--- /dev/null
+++ b/op-mode-definitions/include/bgp-prefix-bestpath-multipath.xml.i
@@ -0,0 +1,20 @@
+<!-- included start from bgp-prefix-bestpath-multipath.xml.i -->
+<leafNode name="bestpath">
+ <properties>
+ <help>Display only the bestpath</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</leafNode>
+<leafNode name="multipath">
+ <properties>
+ <help>Display only multipaths</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</leafNode>
+<leafNode name="longer-prefixes">
+ <properties>
+ <help>Display route and more specific routes</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</leafNode>
+<!-- included end -->
diff --git a/op-mode-definitions/include/vtysh-generic-detail.xml.i b/op-mode-definitions/include/vtysh-generic-detail.xml.i
new file mode 100644
index 000000000..5a3097a77
--- /dev/null
+++ b/op-mode-definitions/include/vtysh-generic-detail.xml.i
@@ -0,0 +1,8 @@
+<!-- included start from vtysh-generic-detail.xml.i -->
+<leafNode name="detail">
+ <properties>
+ <help>Detailed information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</leafNode>
+<!-- included end -->
diff --git a/op-mode-definitions/show-bgp.xml.in b/op-mode-definitions/show-bgp.xml.in
new file mode 100644
index 000000000..cd0c5a9e5
--- /dev/null
+++ b/op-mode-definitions/show-bgp.xml.in
@@ -0,0 +1,262 @@
+<?xml version="1.0"?>
+<interfaceDefinition>
+ <node name="show">
+ <children>
+ <node name="bgp">
+ <properties>
+ <help>BGP information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/bgp-afi-ipv4-ipv6-common.xml.i>
+ <tagNode name="ipv4">
+ <properties>
+ <help>Network in the BGP routing table to display</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt; &lt;x.x.x.x/x&gt; &lt;h:h:h:h:h:h:h:h&gt; &lt;h:h:h:h:h:h:h:h/x&gt;</list>
+ </completionHelp>
+ </properties>
+ <children>
+ #include <include/bgp-prefix-bestpath-multipath.xml.i>
+ </children>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <node name="ipv4">
+ <properties>
+ <help>IPv4 Address Family</help>
+ </properties>
+ <children>
+ #include <include/bgp-afi-common.xml.i>
+ #include <include/bgp-afi-ipv4-ipv6-common.xml.i>
+ </children>
+ </node>
+ <tagNode name="ipv6">
+ <properties>
+ <help>Network in the BGP routing table to display</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt; &lt;x.x.x.x/x&gt; &lt;h:h:h:h:h:h:h:h&gt; &lt;h:h:h:h:h:h:h:h/x&gt;</list>
+ </completionHelp>
+ </properties>
+ <children>
+ #include <include/bgp-prefix-bestpath-multipath.xml.i>
+ </children>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <node name="ipv6">
+ <properties>
+ <help>IPv6 Address Family</help>
+ </properties>
+ <children>
+ #include <include/bgp-afi-common.xml.i>
+ #include <include/bgp-afi-ipv4-ipv6-common.xml.i>
+ </children>
+ </node>
+ <node name="l2vpn">
+ <properties>
+ <help>Layer 2 Virtual Private Network</help>
+ </properties>
+ <children>
+ <tagNode name="evpn">
+ <properties>
+ <help>Network in the BGP routing table to display</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt; &lt;x.x.x.x/x&gt; &lt;h:h:h:h:h:h:h:h&gt; &lt;h:h:h:h:h:h:h:h/x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <node name="evpn">
+ <properties>
+ <help>Ethernet Virtual Private Network</help>
+ </properties>
+ <children>
+ #include <include/bgp-afi-common.xml.i>
+ <node name="all">
+ <properties>
+ <help>Display information about all EVPN NLRIs</help>
+ </properties>
+ <children>
+ <leafNode name="overlay">
+ <properties>
+ <help>Display BGP Overlay Information for prefixes</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="tags">
+ <properties>
+ <help>Display BGP tags for prefixes</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </node>
+ <node name="es">
+ <properties>
+ <help>Ethernet Segment</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/vtysh-generic-detail.xml.i>
+ </children>
+ </node>
+ <node name="es-evi">
+ <properties>
+ <help>Ethernet Segment per EVI</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/vtysh-generic-detail.xml.i>
+ <tagNode name="vni">
+ <properties>
+ <help>VxLAN Network Identifier</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ </children>
+ </node>
+ <leafNode name="import-rt">
+ <properties>
+ <help>Show import route target</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <tagNode name="neighbors">
+ <properties>
+ <help>Show detailed BGP neighbor information</help>
+ <completionHelp>
+ <script>vtysh -c 'show bgp summary' | awk '{print $1'} | grep -e '^[0-9a-f]'</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ <leafNode name="advertised-routes">
+ <properties>
+ <help>Show routes advertised to a BGP neighbor</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="routes">
+ <properties>
+ <help>Show routes learned from BGP neighbor</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <tagNode name="rd">
+ <properties>
+ <help>Show detailed BGP neighbor information</help>
+ <completionHelp>
+ <list>ASN:NN IPADDRESS:NN</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ <leafNode name="overlay">
+ <properties>
+ <help>Display BGP Overlay Information for prefixes</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="tags">
+ <properties>
+ <help>Display BGP tags for prefixes</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="route">
+ <properties>
+ <help>EVPN route information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/vtysh-generic-detail.xml.i>
+ <node name="type">
+ <properties>
+ <help>Specify Route type</help>
+ </properties>
+ <children>
+ <leafNode name="1">
+ <properties>
+ <help>EAD (Type-1) route</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="2">
+ <properties>
+ <help>MAC-IP (Type-2) route</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="3">
+ <properties>
+ <help>Multicast (Type-3) route</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="4">
+ <properties>
+ <help>Ethernet Segment (Type-4) route</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="5">
+ <properties>
+ <help>Prefix (Type-5) route</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="ead">
+ <properties>
+ <help>EAD (Type-1) route</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="es">
+ <properties>
+ <help>Ethernet Segment (Type-4) route</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="macip">
+ <properties>
+ <help>MAC-IP (Type-2) route</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="multicast">
+ <properties>
+ <help>Multicast (Type-3) route</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ <leafNode name="prefix">
+ <properties>
+ <help>Prefix (Type-5) route</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </node>
+ <tagNode name="vni">
+ <properties>
+ <help>VXLAN Network Identifier</help>
+ <completionHelp>
+ <list>1-16777215 all</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ </children>
+ </node>
+ </children>
+ </node>
+ </children>
+ </node>
+ </children>
+ </node>
+ </children>
+ </node>
+</interfaceDefinition>
diff --git a/op-mode-definitions/show-ip-bgp.xml.in b/op-mode-definitions/show-ip-bgp.xml.in
index 311f9e6ae..690de0a1d 100644
--- a/op-mode-definitions/show-ip-bgp.xml.in
+++ b/op-mode-definitions/show-ip-bgp.xml.in
@@ -22,59 +22,21 @@
</properties>
<command>vtysh -c "show ip bgp cidr-only"</command>
</leafNode>
- <node name="community">
- <properties>
- <help>Show BGP routes matching the communities</help>
- </properties>
- <command>vtysh -c "show ip bgp community"</command>
- </node>
- <tagNode name="community">
- <properties>
- <help>Display routes matching the specified communities</help>
- <completionHelp>
- <list>&lt;AA:NN&gt; local-AS no-advertise no-export</list>
- </completionHelp>
- </properties>
- <command>vtysh -c "show ip bgp community $5"</command>
- </tagNode>
<leafNode name="community-info">
<properties>
<help>List all bgp community information</help>
</properties>
<command>vtysh -c "show ip bgp community-info"</command>
</leafNode>
- <tagNode name="community-list">
- <properties>
- <help>Show BGP routes matching specified community list</help>
- </properties>
- <command>vtysh -c "show ip bgp community-list $5"</command>
- <children>
- <leafNode name="exact-match">
- <properties>
- <help>Show BGP routes exactly matching specified community list</help>
- </properties>
- <command>vtysh -c "show ip bgp community-list $5 exact-match"</command>
- </leafNode>
- </children>
- </tagNode>
- <leafNode name="dampened-paths">
- <properties>
- <help>Show dampened BGP paths</help>
- </properties>
- <command>vtysh -c "show ip bgp dampening dampened-paths"</command>
- </leafNode>
- <tagNode name="filter-list">
+ #include <include/bgp-afi-common.xml.i>
+ #include <include/bgp-afi-ipv4-ipv6-common.xml.i>
+ <tagNode name="prefix-list">
<properties>
- <help>Show BGP information for specified word</help>
+ <completionHelp>
+ <path>policy prefix-list</path>
+ </completionHelp>
</properties>
- <command>vtysh -c "show ip bgp filter-list $5"</command>
</tagNode>
- <leafNode name="flap-statistics">
- <properties>
- <help>Show flap statistics of routes</help>
- </properties>
- <command>vtysh -c "show ip bgp dampening flap-statistics"</command>
- </leafNode>
<node name="ipv4">
<properties>
<help>Show BGP IPv4 information</help>
@@ -120,12 +82,6 @@
</leafNode>
</children>
</tagNode>
- <tagNode name="filter-list">
- <properties>
- <help>Show BGP information for specified word</help>
- </properties>
- <command>vtysh -c "show ip bgp filter-list $5"</command>
- </tagNode>
<tagNode name="neighbors">
<properties>
<help>Show detailed BGP IPv4 unicast neighbor information</help>
@@ -204,198 +160,26 @@
</tagNode>
</children>
</node>
- <node name="l2vpn">
- <properties>
- <help>Layer 2 Virtual Private Network</help>
- </properties>
- <children>
- <node name="evpn">
- <properties>
- <help>Ethernet Virtual Private Network</help>
- </properties>
- <children>
- <node name="all">
- <properties>
- <help>Display information about all EVPN NLRIs</help>
- </properties>
- <children>
- <leafNode name="overlay">
- <properties>
- <help>Display BGP Overlay Information for prefixes</help>
- </properties>
- <command>vtysh -c "show ip bgp l2vpn evpn all overlay"</command>
- </leafNode>
- <leafNode name="tags">
- <properties>
- <help>Display BGP tags for prefixes</help>
- </properties>
- <command>vtysh -c "show ip bgp l2vpn evpn all tags"</command>
- </leafNode>
- </children>
- </node>
- <tagNode name="neighbors">
- <properties>
- <help>Show detailed BGP IPv4 unicast neighbor information</help>
- <completionHelp>
- <script>vtysh -c "show ip bgp summary" | awk '{print $1}' | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"</script>
- </completionHelp>
- </properties>
- <children>
- <leafNode name="advertised-routes">
- <properties>
- <help>Show routes advertised to a BGP neighbor</help>
- </properties>
- <command>vtysh -c "show ip bgp l2vpn evpn neighbor $7 advertised-routes"</command>
- </leafNode>
- <leafNode name="routes">
- <properties>
- <help>Show routes learned from BGP neighbor</help>
- </properties>
- <command>vtysh -c "show ip bgp l2vpn evpn neighbor $7 routes"</command>
- </leafNode>
- </children>
- </tagNode>
- <leafNode name="update-groups">
- <properties>
- <help>Detailed info about dynamic update groups</help>
- </properties>
- <command>vtysh -c "show ip bgp l2vpn evpn update-groups"</command>
- </leafNode>
- </children>
- </node>
- </children>
- </node>
- <node name="large-community">
- <properties>
- <help>Show BGP routes matching the specified large-communities</help>
- </properties>
- <command>vtysh -c "show ip bgp large-community"</command>
- </node>
<leafNode name="large-community-info">
<properties>
<help>Show BGP large-community information</help>
</properties>
<command>vtysh -c "show ip bgp large-community-info"</command>
</leafNode>
- <tagNode name="large-community-list">
- <properties>
- <help>Show BGP routes matching the specified large-community list</help>
- </properties>
- <command>vtysh -c "show ip bgp large-community-list $5"</command>
- </tagNode>
<leafNode name="memory">
<properties>
<help>Show BGP memory usage</help>
</properties>
<command>vtysh -c "show ip bgp memory"</command>
</leafNode>
- <tagNode name="neighbors">
- <properties>
- <help>Show detailed BGP IPv4 unicast neighbor information</help>
- <completionHelp>
- <script>vtysh -c "show ip bgp summary" | awk '{print $1}' | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"</script>
- </completionHelp>
- </properties>
- <command>vtysh -c "show ip bgp neighbors $5"</command>
- <children>
- <leafNode name="advertised-routes">
- <properties>
- <help>Show routes advertised to a BGP neighbor</help>
- </properties>
- <command>vtysh -c "show ip bgp neighbor $5 advertised-routes"</command>
- </leafNode>
- <leafNode name="dampened-routes">
- <properties>
- <help>Show dampened routes received from BGP neighbor</help>
- </properties>
- <command>vtysh -c "show ip bgp neighbor $5 dampened-routes"</command>
- </leafNode>
- <leafNode name="flap-statistics">
- <properties>
- <help>Show flap statistics of the routes learned from BGP neighbor</help>
- </properties>
- <command>vtysh -c "show ip bgp neighbor $5 flap-statistics"</command>
- </leafNode>
- <leafNode name="prefix-counts">
- <properties>
- <help>Show detailed prefix count information for BGP neighbor</help>
- </properties>
- <command>vtysh -c "show ip bgp neighbor $5 prefix-counts"</command>
- </leafNode>
- <node name="received">
- <properties>
- <help>Show information received from BGP neighbor</help>
- </properties>
- <children>
- <leafNode name="prefix-filter">
- <properties>
- <help>Show prefixlist filter</help>
- </properties>
- <command>vtysh -c "show ip bgp neighbor $5 received prefix-filter"</command>
- </leafNode>
- </children>
- </node>
- <leafNode name="received-routes">
- <properties>
- <help>Show received routes from BGP neighbor</help>
- </properties>
- <command>vtysh -c "show ip bgp neighbor $5 received-routes"</command>
- </leafNode>
- <leafNode name="routes">
- <properties>
- <help>Show routes learned from BGP neighbor</help>
- </properties>
- <command>vtysh -c "show ip bgp neighbor $5 routes"</command>
- </leafNode>
- </children>
- </tagNode>
<leafNode name="paths">
<properties>
<help>Show BGP path information</help>
</properties>
<command>vtysh -c "show ip bgp paths"</command>
</leafNode>
- <tagNode name="prefix-list">
- <properties>
- <help>Show BGP routes matching the specified prefix list</help>
- </properties>
- <command>vtysh -c "show ip bgp prefix-list $5"</command>
- </tagNode>
- <tagNode name="regexp">
- <properties>
- <help>Show BGP routes matching the specified AS path regular expression</help>
- </properties>
- <command>vtysh -c "show ip bgp regexp $5"</command>
- </tagNode>
- <tagNode name="route-map">
- <properties>
- <help>Show BGP routes matching the specified route map</help>
- </properties>
- <command>vtysh -c "show ip bgp route-map $5"</command>
- </tagNode>
- <leafNode name="statistics">
- <properties>
- <help>Show summary of BGP information</help>
- </properties>
- <command>vtysh -c "show ip bgp statistics"</command>
- </leafNode>
- <leafNode name="summary">
- <properties>
- <help>Show summary of BGP information</help>
- </properties>
- <command>vtysh -c "show ip bgp summary"</command>
- </leafNode>
</children>
</node>
- <tagNode name="bgp">
- <properties>
- <help>Show BGP information for specified IP address or prefix</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt; &lt;x.x.x.x/x&gt;</list>
- </completionHelp>
- </properties>
- <command>vtysh -c "show ip bgp $4"</command>
- </tagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-ipv6-bgp.xml.in b/op-mode-definitions/show-ipv6-bgp.xml.in
deleted file mode 100644
index aad61b97a..000000000
--- a/op-mode-definitions/show-ipv6-bgp.xml.in
+++ /dev/null
@@ -1,203 +0,0 @@
-<?xml version="1.0"?>
-<interfaceDefinition>
- <node name="show">
- <children>
- <node name="ipv6">
- <properties>
- <help>Show IPv6 routing information</help>
- </properties>
- <children>
- <node name="bgp">
- <properties>
- <help>Show Border Gateway Protocol (BGP) information</help>
- </properties>
- <command>vtysh -c "show bgp ipv6"</command>
- <children>
- <leafNode name="summary">
- <properties>
- <help>Show summary of BGP neighbor status</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 summary"</command>
- </leafNode>
- <tagNode name="regexp">
- <properties>
- <help>Show routes matching AS path regular expression</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 regexp $5"</command>
- </tagNode>
- <tagNode name="prefix-list">
- <properties>
- <help>Show routes matching the IPv6 prefix-list name</help>
- <completionHelp>
- <path>policy prefix-list6</path>
- </completionHelp>
- </properties>
- <command>vtysh -c "show bgp ipv6 prefix-list $5"</command>
- </tagNode>
- <tagNode name="neighbors">
- <properties>
- <help>Show detailed information on TCP and BGP neighbor connections for given address</help>
- <completionHelp>
- <script>vtysh -c "show bgp ipv6 summary" | awk '{print $1}' | grep -oE "\b([0-9a-f]{1,4}\:{0,2}){0,20}\b"</script>
- </completionHelp>
- </properties>
- <command>vtysh -c "show bgp ipv6 neighbor $5"</command>
- <children>
- <leafNode name="advertised-routes">
- <properties>
- <help>Show routes advertised to a BGP neighbor</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 neighbor $5 advertised-routes"</command>
- </leafNode>
- <leafNode name="filtered-routes">
- <properties>
- <help>Show routes filtered from a BGP neighbor</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 neighbor $5 filtered-routes"</command>
- </leafNode>
- <leafNode name="dampened-routes">
- <properties>
- <help>Show dampened routes received from BGP neighbor</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 neighbor $5 dampened-routes"</command>
- </leafNode>
- <leafNode name="flap-statistics">
- <properties>
- <help>Show flap statistics of the routes learned from BGP neighbor</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 neighbor $5 flap-statistics"</command>
- </leafNode>
- <leafNode name="prefix-counts">
- <properties>
- <help>Show detailed prefix count information for BGP neighbor</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 neighbor $5 prefix-counts"</command>
- </leafNode>
- <node name="received">
- <properties>
- <help>Show information received from BGP neighbor</help>
- </properties>
- <children>
- <leafNode name="prefix-filter">
- <properties>
- <help>Show prefixlist filter</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 neighbor $5 received prefix-filter"</command>
- </leafNode>
- </children>
- </node>
- <leafNode name="received-routes">
- <properties>
- <help>Show received routes from BGP neighbor</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 neighbor $5 received-routes"</command>
- </leafNode>
- <leafNode name="routes">
- <properties>
- <help>Show routes learned from BGP neighbor</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 neighbor $5 routes"</command>
- </leafNode>
- </children>
- </tagNode>
- <tagNode name="large-community">
- <properties>
- <help>Show routes matching the large-community-list number or name</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 large-community-list $5"</command>
- <children>
- <node name="exact-match">
- <properties>
- <help>Show routes matching the large-community-list number or name</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 large-community-list $5 exact-match"</command>
- </node>
- </children>
- </tagNode>
- <tagNode name="large-community-list">
- <properties>
- <help>Show routes matching the large-community-list number or name</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 large-community-list $5"</command>
- <children>
- <node name="exact-match">
- <properties>
- <help>Show routes matching the large-community-list number or name</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 large-community-list $5 exact-match"</command>
- </node>
- </children>
- </tagNode>
- <tagNode name="filter-list">
- <properties>
- <help>Show routes conforming to regular expression access list name</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 filter-list $5"</command>
- </tagNode>
- <tagNode name="community">
- <properties>
- <help>Show BGP information for specified community number</help>
- <completionHelp>
- <list>&lt;AA:NN&gt; local-AS no-advertise no-export</list>
- </completionHelp>
- </properties>
- <command>vtysh -c "show bgp ipv6 community $5"</command>
- <children>
- <node name="exact-match">
- <properties>
- <help>Show routes from community that exactly matches the community number</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 community $5 exact-match"</command>
- </node>
- </children>
- </tagNode>
- <tagNode name="community-list">
- <properties>
- <help>Show routes matching the community-list number or name</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 community-list $5"</command>
- <children>
- <node name="exact-match">
- <properties>
- <help>Show routes exactly matching the community-list name or number</help>
- </properties>
- <command>vtysh -c "show bgp ipv6 community-list $5 exact-match"</command>
- </node>
- </children>
- </tagNode>
- <tagNode name="route-map">
- <properties>
- <help>Show BGP routes matching the specified route map</help>
- <completionHelp>
- <path>policy route-map</path>
- </completionHelp>
- </properties>
- <command>vtysh -c "show bgp ipv6 route-map $5"</command>
- </tagNode>
- </children>
- </node>
- <tagNode name="bgp">
- <properties>
- <help>Show BGP information for specified IP address or prefix</help>
- <completionHelp>
- <list>&lt;h:h:h:h:h:h:h:h&gt; &lt;h:h:h:h:h:h:h:h/x&gt;</list>
- </completionHelp>
- </properties>
- <command>vtysh -c "show bgp ipv6 $4"</command>
- <children>
- <node name="longer-prefixes">
- <properties>
- <help>Show route and more specific routes</help>
- <completionHelp>
- <list>&lt;h:h:h:h:h:h:h:h&gt; &lt;h:h:h:h:h:h:h:h/x&gt;</list>
- </completionHelp>
- </properties>
- <command>vtysh -c "show bgp ipv6 $4 longer-prefixes"</command>
- </node>
- </children>
- </tagNode>
- </children>
- </node>
- </children>
- </node>
-</interfaceDefinition>
diff --git a/python/vyos/ethtool.py b/python/vyos/ethtool.py
new file mode 100644
index 000000000..e8a339d2f
--- /dev/null
+++ b/python/vyos/ethtool.py
@@ -0,0 +1,80 @@
+# Copyright 2021 VyOS maintainers and contributors <maintainers@vyos.io>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+from vyos.util import cmd
+
+class Ethtool:
+ """
+ Class is used to retrive and cache information about an ethernet adapter
+ """
+
+ # dictionary containing driver featurs, it will be populated on demand and
+ # the content will look like:
+ # {
+ # 'tls-hw-tx-offload': {'fixed': True, 'on': False},
+ # 'tx-checksum-fcoe-crc': {'fixed': True, 'on': False},
+ # 'tx-checksum-ip-generic': {'fixed': False, 'on': True},
+ # 'tx-checksum-ipv4': {'fixed': True, 'on': False},
+ # 'tx-checksum-ipv6': {'fixed': True, 'on': False},
+ # 'tx-checksum-sctp': {'fixed': True, 'on': False},
+ # 'tx-checksumming': {'fixed': False, 'on': True},
+ # 'tx-esp-segmentation': {'fixed': True, 'on': False},
+ # }
+ features = { }
+
+ def __init__(self, ifname):
+ # Now populate features dictionaty
+ tmp = cmd(f'ethtool -k {ifname}')
+ # skip the first line, it only says: "Features for eth0":
+ for line in tmp.splitlines()[1:]:
+ if ":" in line:
+ key, value = [s.strip() for s in line.strip().split(":", 1)]
+ fixed = "fixed" in value
+ if fixed:
+ value = value.split()[0].strip()
+ self.features[key.strip()] = {
+ "on": value == "on",
+ "fixed": fixed
+ }
+
+ def is_fixed_lro(self):
+ # in case of a missing configuration, rather return "fixed". In Ethtool
+ # terminology "fixed" means the setting can not be changed by the user.
+ return self.features.get('large-receive-offload', True).get('fixed', True)
+
+ def is_fixed_gro(self):
+ # in case of a missing configuration, rather return "fixed". In Ethtool
+ # terminology "fixed" means the setting can not be changed by the user.
+ return self.features.get('generic-receive-offload', True).get('fixed', True)
+
+ def is_fixed_gso(self):
+ # in case of a missing configuration, rather return "fixed". In Ethtool
+ # terminology "fixed" means the setting can not be changed by the user.
+ return self.features.get('generic-segmentation-offload', True).get('fixed', True)
+
+ def is_fixed_sg(self):
+ # in case of a missing configuration, rather return "fixed". In Ethtool
+ # terminology "fixed" means the setting can not be changed by the user.
+ return self.features.get('scatter-gather', True).get('fixed', True)
+
+ def is_fixed_tso(self):
+ # in case of a missing configuration, rather return "fixed". In Ethtool
+ # terminology "fixed" means the setting can not be changed by the user.
+ return self.features.get('tcp-segmentation-offload', True).get('fixed', True)
+
+ def is_fixed_ufo(self):
+ # in case of a missing configuration, rather return "fixed". In Ethtool
+ # terminology "fixed" means the setting can not be changed by the user.
+ return self.features.get('udp-fragmentation-offload', True).get('fixed', True)
diff --git a/src/conf_mode/interfaces-ethernet.py b/src/conf_mode/interfaces-ethernet.py
index e7f0cd6a5..bf4650773 100755
--- a/src/conf_mode/interfaces-ethernet.py
+++ b/src/conf_mode/interfaces-ethernet.py
@@ -76,10 +76,17 @@ def verify(ethernet):
verify_mirror(ethernet)
# verify offloading capabilities
- if 'offload' in ethernet and 'rps' in ethernet['offload']:
+ if dict_search('offload.rps', ethernet) != None:
if not os.path.exists(f'/sys/class/net/{ifname}/queues/rx-0/rps_cpus'):
raise ConfigError('Interface does not suport RPS!')
+ driver = EthernetIf(ifname).get_driver_name()
+ # T3342 - Xen driver requires special treatment
+ if driver == "vif":
+ if int(ethernet['mtu']) > 1500 and dict_search('offload.sg', ethernet) == None:
+ raise ConfigError('Xen netback drivers requires scatter-gatter offloading '\
+ 'for MTU size larger then 1500 bytes')
+
# XDP requires multiple TX queues
if 'xdp' in ethernet:
queues = glob(f'/sys/class/net/{ifname}/queues/tx-*')
diff --git a/src/conf_mode/protocols_bgp.py b/src/conf_mode/protocols_bgp.py
index b5bb018ae..baf5c4159 100755
--- a/src/conf_mode/protocols_bgp.py
+++ b/src/conf_mode/protocols_bgp.py
@@ -142,10 +142,10 @@ def verify(bgp):
if 'remote_as' in peer_config and asn != peer_config['remote_as']:
raise ConfigError('route-reflector-client only supported for iBGP peers')
else:
- peer_group_as = dict_search(f'peer_group.{peer_group}.remote_as', asn_config)
- if 'peer_group' in peer_config and peer_group_as != None and peer_group_as != asn:
- raise ConfigError('route-reflector-client only supported for iBGP peers')
-
+ if 'peer_group' in peer_config:
+ peer_group_as = dict_search(f'peer_group.{peer_group}.remote_as', asn_config)
+ if peer_group_as != None and peer_group_as != asn:
+ raise ConfigError('route-reflector-client only supported for iBGP peers')
# Throw an error if a peer group is not configured for allow range
for prefix in dict_search('listen.range', asn_config) or []: