summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--data/templates/firewall/nftables-defines.j22
-rw-r--r--data/templates/firewall/nftables-zone.j236
-rw-r--r--interface-definitions/qos.xml.in19
-rw-r--r--op-mode-definitions/clear-ip.xml.in14
-rw-r--r--op-mode-definitions/clear-ipv6.xml.in14
-rw-r--r--op-mode-definitions/execute-port-scan.xml.in4
-rwxr-xr-xop-mode-definitions/firewall.xml.in58
-rw-r--r--op-mode-definitions/include/bgp/afi-common.xml.i24
-rw-r--r--op-mode-definitions/include/bgp/afi-ipv4-ipv6-common.xml.i36
-rw-r--r--op-mode-definitions/include/bgp/afi-ipv4-ipv6-flowspec.xml.i24
-rw-r--r--op-mode-definitions/include/bgp/afi-ipv4-ipv6-vpn-rd.xml.i4
-rw-r--r--op-mode-definitions/include/bgp/afi-ipv4-ipv6-vpn.xml.i24
-rw-r--r--op-mode-definitions/include/bgp/next-hop.xml.i24
-rw-r--r--op-mode-definitions/include/bgp/show-bgp-common.xml.i83
-rw-r--r--op-mode-definitions/include/bgp/show-ip-bgp-common.xml.i28
-rw-r--r--op-mode-definitions/include/isis-common.xml.i54
-rw-r--r--op-mode-definitions/include/ospf/common.xml.i538
-rw-r--r--op-mode-definitions/include/ospfv3/border-routers.xml.i18
-rw-r--r--op-mode-definitions/include/ospfv3/database.xml.i54
-rw-r--r--op-mode-definitions/include/ospfv3/interface.xml.i90
-rw-r--r--op-mode-definitions/include/ospfv3/linkstate-id-node-tag.xml.i4
-rw-r--r--op-mode-definitions/include/ospfv3/linkstate.xml.i4
-rw-r--r--op-mode-definitions/include/ospfv3/route.xml.i52
-rw-r--r--op-mode-definitions/include/show-route-table.xml.i7
-rw-r--r--op-mode-definitions/include/show-route-tag.xml.i7
-rw-r--r--op-mode-definitions/include/vtysh-generic-interface-virtualTagNode.xml11
-rw-r--r--op-mode-definitions/ipv4-route.xml.in10
-rw-r--r--op-mode-definitions/ipv6-route.xml.in10
-rw-r--r--op-mode-definitions/monitor-command.xml.in29
-rw-r--r--op-mode-definitions/monitor-protocol.xml.in20
-rw-r--r--op-mode-definitions/mtr.xml.in8
-rw-r--r--op-mode-definitions/openvpn.xml.in125
-rw-r--r--op-mode-definitions/ping.xml.in4
-rw-r--r--op-mode-definitions/pki.xml.in30
-rw-r--r--op-mode-definitions/reset-bgp.xml.in172
-rw-r--r--op-mode-definitions/reset-ip-bgp.xml.in46
-rw-r--r--op-mode-definitions/show-bridge.xml.in103
-rw-r--r--op-mode-definitions/show-evpn.xml.in71
-rw-r--r--op-mode-definitions/show-history.xml.in21
-rw-r--r--op-mode-definitions/show-interfaces-bonding.xml.in117
-rw-r--r--op-mode-definitions/show-interfaces-bridge.xml.in40
-rw-r--r--op-mode-definitions/show-interfaces-dummy.xml.in40
-rw-r--r--op-mode-definitions/show-interfaces-ethernet.xml.in131
-rw-r--r--op-mode-definitions/show-interfaces-geneve.xml.in38
-rw-r--r--op-mode-definitions/show-interfaces-input.xml.in34
-rw-r--r--op-mode-definitions/show-interfaces-l2tpv3.xml.in38
-rw-r--r--op-mode-definitions/show-interfaces-loopback.xml.in38
-rw-r--r--op-mode-definitions/show-interfaces-macsec.xml.in26
-rw-r--r--op-mode-definitions/show-interfaces-pppoe.xml.in56
-rw-r--r--op-mode-definitions/show-interfaces-pseudo-ethernet.xml.in40
-rw-r--r--op-mode-definitions/show-interfaces-sstpc.xml.in56
-rw-r--r--op-mode-definitions/show-interfaces-tunnel.xml.in40
-rw-r--r--op-mode-definitions/show-interfaces-virtual-ethernet.xml.in38
-rw-r--r--op-mode-definitions/show-interfaces-vti.xml.in38
-rw-r--r--op-mode-definitions/show-interfaces-vxlan.xml.in38
-rw-r--r--op-mode-definitions/show-interfaces-wireguard.xml.in84
-rw-r--r--op-mode-definitions/show-interfaces-wireless.xml.in90
-rw-r--r--op-mode-definitions/show-interfaces-wwan.xml.in160
-rw-r--r--op-mode-definitions/show-interfaces.xml.in44
-rw-r--r--op-mode-definitions/show-ip-bgp.xml.in10
-rw-r--r--op-mode-definitions/show-ip-route.xml.in56
-rw-r--r--op-mode-definitions/show-ipv6-prefix-list.xml.in90
-rw-r--r--op-mode-definitions/show-ipv6-route.xml.in56
-rwxr-xr-xop-mode-definitions/show-log.xml.in30
-rw-r--r--op-mode-definitions/show-mpls.xml.in80
-rw-r--r--op-mode-definitions/show-openfabric.xml.in2
-rw-r--r--op-mode-definitions/show-vrf.xml.in46
-rw-r--r--op-mode-definitions/terminal.xml.in10
-rw-r--r--op-mode-definitions/traceroute.xml.in4
-rw-r--r--op-mode-definitions/traffic-dump.xml.in4
-rw-r--r--op-mode-definitions/vrrp.xml.in38
-rw-r--r--pyproject.toml2
-rwxr-xr-xpython/vyos/firewall.py4
-rw-r--r--python/vyos/ifconfig/interface.py4
-rw-r--r--python/vyos/qos/cake.py9
-rwxr-xr-xpython/vyos/template.py4
-rwxr-xr-xpython/vyos/xml_ref/generate_op_cache.py24
-rw-r--r--python/vyos/xml_ref/op_definition.py3
-rw-r--r--schema/op-mode-definition.rnc13
-rw-r--r--schema/op-mode-definition.rng54
-rwxr-xr-xscripts/build-command-op-templates33
-rwxr-xr-xsmoketest/scripts/cli/test_qos.py19
-rwxr-xr-xsrc/conf_mode/vrf.py4
-rwxr-xr-xsrc/helpers/vyos-load-balancer.py6
-rwxr-xr-xsrc/init/vyos-router5
-rwxr-xr-xsrc/op_mode/load-balancing_wan.py2
87 files changed, 1862 insertions, 1820 deletions
diff --git a/Makefile b/Makefile
index d3248c8d2..e85ccd7f4 100644
--- a/Makefile
+++ b/Makefile
@@ -69,7 +69,7 @@ op_mode_definitions: $(op_xml_obj)
find $(BUILD_DIR)/op-mode-definitions/ -type f -name "*.xml" | xargs -I {} $(CURDIR)/scripts/build-command-op-templates {} $(CURDIR)/schema/op-mode-definition.rng $(OP_TMPL_DIR) || exit 1
- $(CURDIR)/python/vyos/xml_ref/generate_op_cache.py --xml-dir $(BUILD_DIR)/op-mode-definitions || exit 1
+ $(CURDIR)/python/vyos/xml_ref/generate_op_cache.py --check-path-ambiguity --xml-dir $(BUILD_DIR)/op-mode-definitions || exit 1
# XXX: tcpdump, ping, traceroute and mtr must be able to recursivly call themselves as the
# options are provided from the scripts themselves
diff --git a/data/templates/firewall/nftables-defines.j2 b/data/templates/firewall/nftables-defines.j2
index a1d1fa4f6..c4b6b7eba 100644
--- a/data/templates/firewall/nftables-defines.j2
+++ b/data/templates/firewall/nftables-defines.j2
@@ -111,7 +111,7 @@
flags interval
auto-merge
{% if group_conf.interface is vyos_defined or includes %}
- elements = { {{ group_conf.interface | nft_nested_group(includes, group.interface_group, 'interface') | join(",") }} }
+ elements = { {{ group_conf.interface | nft_nested_group(includes, group.interface_group, 'interface') | quoted_join(",") }} }
{% endif %}
}
{% endfor %}
diff --git a/data/templates/firewall/nftables-zone.j2 b/data/templates/firewall/nftables-zone.j2
index 645a38706..66f7e0b1c 100644
--- a/data/templates/firewall/nftables-zone.j2
+++ b/data/templates/firewall/nftables-zone.j2
@@ -9,11 +9,11 @@
{% for zone_name, zone_conf in zone.items() %}
{% if 'local_zone' not in zone_conf %}
{% if 'interface' in zone_conf.member %}
- oifname { {{ zone_conf.member.interface | join(',') }} } counter jump VZONE_{{ zone_name }}
+ oifname { {{ zone_conf.member.interface | quoted_join(',') }} } counter jump VZONE_{{ zone_name }}
{% endif %}
{% if 'vrf' in zone_conf.member %}
{% for vrf_name in zone_conf.member.vrf %}
- oifname { {{ zone_conf['vrf_interfaces'][vrf_name] }} } counter jump VZONE_{{ zone_name }}
+ oifname { "{{ zone_conf['vrf_interfaces'][vrf_name] }}" } counter jump VZONE_{{ zone_name }}
{% endfor %}
{% endif %}
{% endif %}
@@ -49,12 +49,12 @@
{% for from_zone, from_conf in zone_conf.from.items() if from_conf.firewall[fw_name] is vyos_defined %}
{% if 'interface' in zone[from_zone].member %}
- iifname { {{ zone[from_zone].member.interface | join(",") }} } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
- iifname { {{ zone[from_zone].member.interface | join(",") }} } counter return
+ iifname { {{ zone[from_zone].member.interface | quoted_join(",") }} } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
+ iifname { {{ zone[from_zone].member.interface | quoted_join(",") }} } counter return
{% endif %}
{% if 'vrf' in zone[from_zone].member %}
- iifname { {{ zone[from_zone].member.vrf | join(",") }} } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
- iifname { {{ zone[from_zone].member.vrf | join(",") }} } counter return
+ iifname { {{ zone[from_zone].member.vrf | quoted_join(",") }} } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
+ iifname { {{ zone[from_zone].member.vrf | quoted_join(",") }} } counter return
{% endif %}
{% endfor %}
{% endif %}
@@ -65,13 +65,13 @@
{% if zone_conf.from_local is vyos_defined %}
{% for from_zone, from_conf in zone_conf.from_local.items() if from_conf.firewall[fw_name] is vyos_defined %}
{% if 'interface' in zone[from_zone].member %}
- oifname { {{ zone[from_zone].member.interface | join(",") }} } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
- oifname { {{ zone[from_zone].member.interface | join(",") }} } counter return
+ oifname { {{ zone[from_zone].member.interface | quoted_join(",") }} } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
+ oifname { {{ zone[from_zone].member.interface | quoted_join(",") }} } counter return
{% endif %}
{% if 'vrf' in zone[from_zone].member %}
{% for vrf_name in zone[from_zone].member.vrf %}
- oifname { {{ zone[from_zone]['vrf_interfaces'][vrf_name] }} } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
- oifname { {{ zone[from_zone]['vrf_interfaces'][vrf_name] }} } counter return
+ oifname { "{{ zone[from_zone]['vrf_interfaces'][vrf_name] }}" } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
+ oifname { "{{ zone[from_zone]['vrf_interfaces'][vrf_name] }}" } counter return
{% endfor %}
{% endif %}
{% endfor %}
@@ -81,29 +81,29 @@
{% else %}
chain VZONE_{{ zone_name }} {
{% if 'interface' in zone_conf.member %}
- iifname { {{ zone_conf.member.interface | join(",") }} } counter {{ zone_conf | nft_intra_zone_action(ipv6) }}
+ iifname { {{ zone_conf.member.interface | quoted_join(",") }} } counter {{ zone_conf | nft_intra_zone_action(ipv6) }}
{% endif %}
{% if 'vrf' in zone_conf.member %}
- iifname { {{ zone_conf.member.vrf | join(",") }} } counter {{ zone_conf | nft_intra_zone_action(ipv6) }}
+ iifname { {{ zone_conf.member.vrf | quoted_join(",") }} } counter {{ zone_conf | nft_intra_zone_action(ipv6) }}
{% endif %}
{% if zone_conf.intra_zone_filtering is vyos_defined %}
{% if 'interface' in zone_conf.member %}
- iifname { {{ zone_conf.member.interface | join(",") }} } counter return
+ iifname { {{ zone_conf.member.interface | quoted_join(",") }} } counter return
{% endif %}
{% if 'vrf' in zone_conf.member %}
- iifname { {{ zone_conf.member.vrf | join(",") }} } counter return
+ iifname { {{ zone_conf.member.vrf | quoted_join(",") }} } counter return
{% endif %}
{% endif %}
{% if zone_conf.from is vyos_defined %}
{% for from_zone, from_conf in zone_conf.from.items() if from_conf.firewall[fw_name] is vyos_defined %}
{% if zone[from_zone].local_zone is not defined %}
{% if 'interface' in zone[from_zone].member %}
- iifname { {{ zone[from_zone].member.interface | join(",") }} } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
- iifname { {{ zone[from_zone].member.interface | join(",") }} } counter return
+ iifname { {{ zone[from_zone].member.interface | quoted_join(",") }} } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
+ iifname { {{ zone[from_zone].member.interface | quoted_join(",") }} } counter return
{% endif %}
{% if 'vrf' in zone[from_zone].member %}
- iifname { {{ zone[from_zone].member.vrf | join(",") }} } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
- iifname { {{ zone[from_zone].member.vrf | join(",") }} } counter return
+ iifname { {{ zone[from_zone].member.vrf | quoted_join(",") }} } counter jump NAME{{ suffix }}_{{ from_conf.firewall[fw_name] }}
+ iifname { {{ zone[from_zone].member.vrf | quoted_join(",") }} } counter return
{% endif %}
{% endif %}
{% endfor %}
diff --git a/interface-definitions/qos.xml.in b/interface-definitions/qos.xml.in
index c6ecb742e..aad1de629 100644
--- a/interface-definitions/qos.xml.in
+++ b/interface-definitions/qos.xml.in
@@ -135,6 +135,25 @@
<valueless/>
</properties>
</leafNode>
+ <leafNode name="no-split-gso">
+ <properties>
+ <help>Do not split GSO super-packets into on-the-wire components</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <node name="ack-filter">
+ <properties>
+ <help>Identify and filter out TCP ACK packets that do not convey significant new information</help>
+ </properties>
+ <children>
+ <leafNode name="aggressive">
+ <properties>
+ <help>Enable aggressive mode which will result in more ACK packets being compresses/filtered</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
<leafNode name="rtt">
<properties>
<help>Round-Trip-Time for Active Queue Management (AQM)</help>
diff --git a/op-mode-definitions/clear-ip.xml.in b/op-mode-definitions/clear-ip.xml.in
index 3c75ed11b..cbbd462d1 100644
--- a/op-mode-definitions/clear-ip.xml.in
+++ b/op-mode-definitions/clear-ip.xml.in
@@ -7,12 +7,6 @@
<help>Clear Internet Protocol (IP) statistics or status</help>
</properties>
<children>
- <node name="prefix-list">
- <properties>
- <help>Clear prefix-list statistics or status</help>
- </properties>
- <command>vtysh -c "$*"</command>
- </node>
<tagNode name="prefix-list">
<properties>
<help>Clear prefix-list statistics or status for specified word</help>
@@ -20,9 +14,13 @@
<list>&lt;WORD&gt;</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Clear prefix-list statistics or status</help>
+ <command>vtysh -c "$*"</command>
+ </standalone>
<command>vtysh -c "$*"</command>
<children>
- <leafNode name="node.tag">
+ <virtualTagNode>
<properties>
<help>Clear prefix-list statistics or status for given word|network</help>
<completionHelp>
@@ -30,7 +28,7 @@
</completionHelp>
</properties>
<command>vtysh -c "$*"</command>
- </leafNode>
+ </virtualTagNode>
</children>
</tagNode>
</children>
diff --git a/op-mode-definitions/clear-ipv6.xml.in b/op-mode-definitions/clear-ipv6.xml.in
index c062102fc..bdfc9eab7 100644
--- a/op-mode-definitions/clear-ipv6.xml.in
+++ b/op-mode-definitions/clear-ipv6.xml.in
@@ -7,12 +7,6 @@
<help>Clear Internet Protocol (IPv6) statistics or status</help>
</properties>
<children>
- <node name="prefix-list">
- <properties>
- <help>Clear prefix-list statistics or status</help>
- </properties>
- <command>vtysh -c "$*"</command>
- </node>
<tagNode name="prefix-list">
<properties>
<help>Clear prefix-list statistics or status for specified word</help>
@@ -20,9 +14,13 @@
<list>WORD</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Clear prefix-list statistics or status</help>
+ <command>vtysh -c "$*"</command>
+ </standalone>
<command>vtysh -c "$*"</command>
<children>
- <leafNode name="node.tag">
+ <virtualTagNode>
<properties>
<help>Clear prefix-list statistics or status for given word|network</help>
<completionHelp>
@@ -30,7 +28,7 @@
</completionHelp>
</properties>
<command>vtysh -c "$*"</command>
- </leafNode>
+ </virtualTagNode>
</children>
</tagNode>
</children>
diff --git a/op-mode-definitions/execute-port-scan.xml.in b/op-mode-definitions/execute-port-scan.xml.in
index 52cdab5f0..45221cb4c 100644
--- a/op-mode-definitions/execute-port-scan.xml.in
+++ b/op-mode-definitions/execute-port-scan.xml.in
@@ -16,7 +16,7 @@
</properties>
<command>nmap -p- -T4 --max-retries=1 --host-timeout=30s "$4"</command>
<children>
- <leafNode name="node.tag">
+ <virtualTagNode>
<properties>
<help>Port scan options</help>
<completionHelp>
@@ -24,7 +24,7 @@
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/execute_port-scan.py "${@:4}"</command>
- </leafNode>
+ </virtualTagNode>
</children>
</tagNode>
</children>
diff --git a/op-mode-definitions/firewall.xml.in b/op-mode-definitions/firewall.xml.in
index f3f9d3ded..549935de9 100755
--- a/op-mode-definitions/firewall.xml.in
+++ b/op-mode-definitions/firewall.xml.in
@@ -7,43 +7,43 @@
<help>Show firewall information</help>
</properties>
<children>
- <tagNode name="group">
+ <node name="group">
<properties>
<help>Show firewall group</help>
- <completionHelp>
- <path>firewall group address-group</path>
- <path>firewall group network-group</path>
- <path>firewall group port-group</path>
- <path>firewall group domain-group</path>
- <path>firewall group dynamic-group address-group</path>
- <path>firewall group dynamic-group ipv6-address-group</path>
- <path>firewall group interface-group</path>
- <path>firewall group ipv6-address-group</path>
- <path>firewall group ipv6-network-group</path>
- <path>firewall group mac-group</path>
- <path>firewall group network-group</path>
- <path>firewall group port-group</path>
- <path>firewall group remote-group</path>
- </completionHelp>
</properties>
<children>
- <leafNode name="detail">
+ <virtualTagNode>
<properties>
- <help>Show list view of firewall groups</help>
+ <help>Show firewall group</help>
<completionHelp>
- <path>firewall group detail</path>
+ <path>firewall group address-group</path>
+ <path>firewall group network-group</path>
+ <path>firewall group port-group</path>
+ <path>firewall group domain-group</path>
+ <path>firewall group dynamic-group address-group</path>
+ <path>firewall group dynamic-group ipv6-address-group</path>
+ <path>firewall group interface-group</path>
+ <path>firewall group ipv6-address-group</path>
+ <path>firewall group ipv6-network-group</path>
+ <path>firewall group mac-group</path>
+ <path>firewall group network-group</path>
+ <path>firewall group port-group</path>
+ <path>firewall group remote-group</path>
</completionHelp>
</properties>
- <command>${vyos_op_scripts_dir}/firewall.py --action show_group --name $4 --detail $5</command>
- </leafNode>
- </children>
- <command>${vyos_op_scripts_dir}/firewall.py --action show_group --name $4</command>
- </tagNode>
- <node name="group">
- <properties>
- <help>Show firewall group</help>
- </properties>
- <children>
+ <children>
+ <leafNode name="detail">
+ <properties>
+ <help>Show list view of firewall groups</help>
+ <completionHelp>
+ <path>firewall group detail</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/firewall.py --action show_group --name $4 --detail $5</command>
+ </leafNode>
+ </children>
+ <command>${vyos_op_scripts_dir}/firewall.py --action show_group --name $4</command>
+ </virtualTagNode>
<leafNode name="detail">
<properties>
<help>Show list view of firewall group</help>
diff --git a/op-mode-definitions/include/bgp/afi-common.xml.i b/op-mode-definitions/include/bgp/afi-common.xml.i
index acf20d950..e5a72f3b1 100644
--- a/op-mode-definitions/include/bgp/afi-common.xml.i
+++ b/op-mode-definitions/include/bgp/afi-common.xml.i
@@ -1,28 +1,4 @@
<!-- 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>
- #include <include/bgp/exact-match.xml.i>
- </children>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
-</tagNode>
-<tagNode name="large-community">
- <properties>
- <help>Display routes matching the large-communities</help>
- <completionHelp>
- <list>AA:BB:CC</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/bgp/exact-match.xml.i>
- </children>
-</tagNode>
<tagNode name="large-community-list">
<properties>
<help>Display routes matching the large-community-list</help>
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
index d5fb7f5ee..86cd27517 100644
--- a/op-mode-definitions/include/bgp/afi-ipv4-ipv6-common.xml.i
+++ b/op-mode-definitions/include/bgp/afi-ipv4-ipv6-common.xml.i
@@ -4,6 +4,18 @@
<help>Display routes matching the community</help>
</properties>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Community number where AA and NN are (0-65535)</help>
+ <completionHelp>
+ <list>AA:NN</list>
+ </completionHelp>
+ </properties>
+ <children>
+ #include <include/bgp/exact-match.xml.i>
+ </children>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </virtualTagNode>
<leafNode name="accept-own">
<properties>
<help>Should accept local VPN route if exported and imported into different VRF (well-known community)</help>
@@ -142,13 +154,21 @@
<help>Show BGP routes matching the specified large-communities</help>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ <virtualTagNode>
+ <properties>
+ <help>Display routes matching the large-communities</help>
+ <completionHelp>
+ <list>AA:BB:CC</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/bgp/exact-match.xml.i>
+ </children>
+ </virtualTagNode>
+ </children>
</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 BGP information for specified neighbor</help>
@@ -156,6 +176,10 @@
<script>vtysh -c "$(IFS=$' '; echo "${COMP_WORDS[@]:0:${#COMP_WORDS[@]}-2} summary")" | awk '/^[0-9a-f]/ {print $1}'</script>
</completionHelp>
</properties>
+ <standalone>
+ <help>Detailed information on TCP and BGP neighbor connections</help>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </standalone>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
#include <include/bgp/advertised-routes.xml.i>
diff --git a/op-mode-definitions/include/bgp/afi-ipv4-ipv6-flowspec.xml.i b/op-mode-definitions/include/bgp/afi-ipv4-ipv6-flowspec.xml.i
index 34228fdd1..996e2bd3d 100644
--- a/op-mode-definitions/include/bgp/afi-ipv4-ipv6-flowspec.xml.i
+++ b/op-mode-definitions/include/bgp/afi-ipv4-ipv6-flowspec.xml.i
@@ -1,16 +1,4 @@
<!-- included start from bgp/afi-ipv4-ipv6-flowspec.xml.i -->
-<tagNode name="flowspec">
- <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="flowspec">
<properties>
<help>Flowspec Address Family modifier</help>
@@ -19,6 +7,18 @@
#include <include/bgp/afi-common.xml.i>
#include <include/bgp/afi-ipv4-ipv6-common.xml.i>
#include <include/vtysh-generic-detail.xml.i>
+ <virtualTagNode>
+ <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>
+ </virtualTagNode>
</children>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</node>
diff --git a/op-mode-definitions/include/bgp/afi-ipv4-ipv6-vpn-rd.xml.i b/op-mode-definitions/include/bgp/afi-ipv4-ipv6-vpn-rd.xml.i
index bb95ce3f5..493207f5e 100644
--- a/op-mode-definitions/include/bgp/afi-ipv4-ipv6-vpn-rd.xml.i
+++ b/op-mode-definitions/include/bgp/afi-ipv4-ipv6-vpn-rd.xml.i
@@ -8,7 +8,7 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <tagNode name="">
+ <virtualTagNode>
<properties>
<help>Show IP routes of specified prefix</help>
<completionHelp>
@@ -16,7 +16,7 @@
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </tagNode>
+ </virtualTagNode>
</children>
</tagNode>
<!-- included end -->
diff --git a/op-mode-definitions/include/bgp/afi-ipv4-ipv6-vpn.xml.i b/op-mode-definitions/include/bgp/afi-ipv4-ipv6-vpn.xml.i
index a9fb6e255..f106b8725 100644
--- a/op-mode-definitions/include/bgp/afi-ipv4-ipv6-vpn.xml.i
+++ b/op-mode-definitions/include/bgp/afi-ipv4-ipv6-vpn.xml.i
@@ -1,16 +1,4 @@
<!-- included start from bgp/afi-ipv4-ipv6-vpn.xml.i -->
-<tagNode name="vpn">
- <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="vpn">
<properties>
<help>VPN Address Family modifier</help>
@@ -19,6 +7,18 @@
#include <include/bgp/afi-common.xml.i>
#include <include/bgp/afi-ipv4-ipv6-common.xml.i>
#include <include/bgp/afi-ipv4-ipv6-vpn-rd.xml.i>
+ <virtualTagNode>
+ <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>
+ </virtualTagNode>
</children>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</node>
diff --git a/op-mode-definitions/include/bgp/next-hop.xml.i b/op-mode-definitions/include/bgp/next-hop.xml.i
index 517a44888..23f07e135 100644
--- a/op-mode-definitions/include/bgp/next-hop.xml.i
+++ b/op-mode-definitions/include/bgp/next-hop.xml.i
@@ -5,19 +5,19 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>IPv4/IPv6 nexthop address</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt; &lt;h:h:h:h:h:h:h:h&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/vtysh-generic-detail.xml.i>
+ </children>
+ </virtualTagNode>
#include <include/vtysh-generic-detail.xml.i>
</children>
</node>
-<tagNode name="nexthop">
- <properties>
- <help>IPv4/IPv6 nexthop address</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt; &lt;h:h:h:h:h:h:h:h&gt;</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/vtysh-generic-detail.xml.i>
- </children>
-</tagNode>
<!-- included end -->
diff --git a/op-mode-definitions/include/bgp/show-bgp-common.xml.i b/op-mode-definitions/include/bgp/show-bgp-common.xml.i
index 003451a33..0e488d65f 100644
--- a/op-mode-definitions/include/bgp/show-bgp-common.xml.i
+++ b/op-mode-definitions/include/bgp/show-bgp-common.xml.i
@@ -1,23 +1,23 @@
<!-- included start from bgp/show-bgp-common.xml.i -->
#include <include/bgp/afi-common.xml.i>
#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>
+ <virtualTagNode>
+ <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>
+ </virtualTagNode>
#include <include/bgp/afi-common.xml.i>
#include <include/bgp/afi-ipv4-ipv6-common.xml.i>
#include <include/bgp/afi-ipv4-ipv6-flowspec.xml.i>
@@ -25,23 +25,23 @@
</children>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</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>
+ <virtualTagNode>
+ <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>
+ </virtualTagNode>
#include <include/bgp/afi-common.xml.i>
#include <include/bgp/afi-ipv4-ipv6-common.xml.i>
#include <include/bgp/afi-ipv4-ipv6-vpn.xml.i>
@@ -53,21 +53,21 @@
<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>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
+ <virtualTagNode>
+ <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>
+ </virtualTagNode>
#include <include/bgp/afi-common.xml.i>
<node name="all">
<properties>
@@ -188,13 +188,20 @@
#include <include/vni-tagnode-all.xml.i>
</children>
</node>
- #include <include/vni-tagnode.xml.i>
- <leafNode name="vni">
+ <tagNode name="vni">
<properties>
- <help>VXLAN network identifier (VNI)</help>
+ <help>VXLAN network identifier (VNI) number</help>
+ <completionHelp>
+ <list>&lt;1-16777215&gt;</list>
+ <script>${vyos_completion_dir}/list_vni.sh</script>
+ </completionHelp>
</properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
+ <standalone>
+ <help>VXLAN network identifier (VNI)</help>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </standalone>
+ <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
+ </tagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/include/bgp/show-ip-bgp-common.xml.i b/op-mode-definitions/include/bgp/show-ip-bgp-common.xml.i
index 48475e04e..bb62fd1bb 100644
--- a/op-mode-definitions/include/bgp/show-ip-bgp-common.xml.i
+++ b/op-mode-definitions/include/bgp/show-ip-bgp-common.xml.i
@@ -37,18 +37,21 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <leafNode name="cidr-only">
+ <virtualTagNode>
<properties>
- <help>Display only routes with non-natural netmasks</help>
+ <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>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
- <node name="community">
+ </virtualTagNode>
+ <leafNode name="cidr-only">
<properties>
- <help>Show BGP routes matching the communities</help>
+ <help>Display only routes with non-natural netmasks</help>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </node>
+ </leafNode>
<tagNode name="community">
<properties>
<help>Display routes matching the specified communities</help>
@@ -56,6 +59,10 @@
<list>&lt;AA:NN&gt; local-AS no-advertise no-export</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Show BGP routes matching the communities</help>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </standalone>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</tagNode>
<tagNode name="community-list">
@@ -123,15 +130,6 @@
</leafNode>
</children>
</node>
- <tagNode name="unicast">
- <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>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </tagNode>
</children>
</node>
<leafNode name="large-community-info">
diff --git a/op-mode-definitions/include/isis-common.xml.i b/op-mode-definitions/include/isis-common.xml.i
index 493a56633..cda46736d 100644
--- a/op-mode-definitions/include/isis-common.xml.i
+++ b/op-mode-definitions/include/isis-common.xml.i
@@ -4,19 +4,19 @@
<help>Show IS-IS link state database</help>
</properties>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Show IS-IS link state database PDU</help>
+ <completionHelp>
+ <list>lsp-id detail</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </virtualTagNode>
#include <include/vtysh-generic-detail.xml.i>
</children>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</node>
-<tagNode name="database">
- <properties>
- <help>Show IS-IS link state database PDU</help>
- <completionHelp>
- <list>lsp-id detail</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
-</tagNode>
<node name="fast-reroute">
<properties>
<help>Show IS-IS fast reroute/loop free alternate (lfa) information</help>
@@ -59,10 +59,10 @@
</properties>
<children>
#include <include/vtysh-generic-detail.xml.i>
+ #include <include/vtysh-generic-interface-virtualTagNode.xml.i>
</children>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</node>
-#include <include/vtysh-generic-interface-tagNode.xml.i>
<node name="mpls">
<properties>
<help>Show MPLS information</help>
@@ -82,13 +82,19 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</leafNode>
- <leafNode name="interface">
+ <tagNode name="interface">
<properties>
- <help>Show interface information</help>
+ <help>Show information about specific interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces</script>
+ </completionHelp>
</properties>
+ <standalone>
+ <help>Show interface information</help>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </standalone>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
- #include <include/vtysh-generic-interface-tagNode.xml.i>
+ </tagNode>
</children>
</node>
<node name="neighbor">
@@ -96,19 +102,19 @@
<help>Show IS-IS neighbor adjacencies</help>
</properties>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Show specific IS-IS neighbor adjacency </help>
+ <completionHelp>
+ <list>system-id</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </virtualTagNode>
#include <include/vtysh-generic-detail.xml.i>
</children>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</node>
-<tagNode name="neighbor">
- <properties>
- <help>Show specific IS-IS neighbor adjacency </help>
- <completionHelp>
- <list>system-id</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
-</tagNode>
<node name="route">
<properties>
<help>Show IS-IS routing table</help>
@@ -180,4 +186,4 @@
</children>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</node>
-<!-- included end --> \ No newline at end of file
+<!-- included end -->
diff --git a/op-mode-definitions/include/ospf/common.xml.i b/op-mode-definitions/include/ospf/common.xml.i
index 684073cc5..1ffe246e4 100644
--- a/op-mode-definitions/include/ospf/common.xml.i
+++ b/op-mode-definitions/include/ospf/common.xml.i
@@ -17,106 +17,86 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <tagNode name="adv-router">
+ <virtualTagNode>
<properties>
- <help>Show IPv4 OSPF ASBR summary database for given address of advertised router</help>
+ <help>Show IPv4 OSPF ASBR summary database information of given address</help>
<completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
+ <list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </tagNode>
- <node name="adv-router">
- <properties>
- <help>Show IPv4 OSPF ASBR summary database for given address of advertised router</help>
- </properties>
- </node>
- </children>
- </node>
- <tagNode name="asbr-summary">
- <properties>
- <help>Show IPv4 OSPF ASBR summary database information of given address</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <node name="adv-router">
- <properties>
- <help>Show advertising router link states</help>
- </properties>
- </node>
+ <children>
+ <tagNode name="adv-router">
+ <properties>
+ <help>Show IPv4 OSPF ASBR summary database of given address for given advertised router</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <leafNode name="self-originate">
+ <properties>
+ <help>Show summary of self-originate IPv4 OSPF ASBR database</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<tagNode name="adv-router">
<properties>
- <help>Show IPv4 OSPF ASBR summary database of given address for given advertised router</help>
+ <help>Show IPv4 OSPF ASBR summary database for given address of advertised router</help>
<completionHelp>
<list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</tagNode>
- <leafNode name="self-originate">
- <properties>
- <help>Show summary of self-originate IPv4 OSPF ASBR database</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
</children>
- </tagNode>
+ </node>
<node name="external">
<properties>
<help>Show IPv4 OSPF external database</help>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <tagNode name="adv-router">
+ <virtualTagNode>
<properties>
- <help>Show IPv4 OSPF external database for specified IP address of advertised router</help>
+ <help>Show IPv4 OSPF external database information of specified IP address</help>
<completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
+ <list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </tagNode>
- <node name="adv-router">
- <properties>
- <help>Show IPv4 OSPF external database for specified IP address of advertised router</help>
- </properties>
- </node>
- </children>
- </node>
- <tagNode name="external">
- <properties>
- <help>Show IPv4 OSPF external database information of specified IP address</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <node name="adv-router">
- <properties>
- <help>Show advertising router link states</help>
- </properties>
- </node>
+ <children>
+ <tagNode name="adv-router">
+ <properties>
+ <help>Show IPv4 OSPF external database of specified IP address for specified advertised router</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <leafNode name="self-originate">
+ <properties>
+ <help>Show self-originate IPv4 OSPF external database</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<tagNode name="adv-router">
<properties>
- <help>Show IPv4 OSPF external database of specified IP address for specified advertised router</help>
+ <help>Show IPv4 OSPF external database for specified IP address of advertised router</help>
<completionHelp>
<list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</tagNode>
- <leafNode name="self-originate">
- <properties>
- <help>Show self-originate IPv4 OSPF external database</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
</children>
- </tagNode>
+ </node>
<leafNode name="max-age">
<properties>
<help>Show IPv4 OSPF max-age database</help>
@@ -129,318 +109,258 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <tagNode name="adv-router">
+ <virtualTagNode>
<properties>
- <help>Show IPv4 OSPF network database for specified IP address of advertised router</help>
+ <help>Show IPv4 OSPF network database information of specified IP address</help>
<completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
+ <list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </tagNode>
- <node name="adv-router">
- <properties>
- <help>Show IPv4 OSPF network database for given address of advertised router</help>
- </properties>
- </node>
- </children>
- </node>
- <tagNode name="network">
- <properties>
- <help>Show IPv4 OSPF network database information of specified IP address</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <node name="adv-router">
- <properties>
- <help>Show advertising router link states</help>
- </properties>
- </node>
+ <children>
+ <tagNode name="adv-router">
+ <properties>
+ <help>Show IPv4 OSPF network database of specified IP address for specified advertised router</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <leafNode name="self-originate">
+ <properties>
+ <help>Show self-originate IPv4 OSPF network database</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<tagNode name="adv-router">
<properties>
- <help>Show IPv4 OSPF network database of specified IP address for specified advertised router</help>
+ <help>Show IPv4 OSPF network database for specified IP address of advertised router</help>
<completionHelp>
<list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</tagNode>
- <leafNode name="self-originate">
- <properties>
- <help>Show self-originate IPv4 OSPF network database</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
</children>
- </tagNode>
+ </node>
<node name="nssa-external">
<properties>
<help>Show IPv4 OSPF NSSA external database</help>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <tagNode name="adv-router">
+ <virtualTagNode>
<properties>
- <help>Show IPv4 OSPF NSSA external database for specified IP address of advertised router</help>
+ <help>Show IPv4 OSPF NSSA external database information of specified IP address</help>
<completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
+ <list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </tagNode>
- <node name="adv-router">
- <properties>
- <help>Show IPv4 OSPF NSSA external database for specified IP address of advertised router</help>
- </properties>
- </node>
- </children>
- </node>
- <tagNode name="nssa-external">
- <properties>
- <help>Show IPv4 OSPF NSSA external database information of specified IP address</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <node name="adv-router">
- <properties>
- <help>Show advertising router link states</help>
- </properties>
- </node>
+ <children>
+ <tagNode name="adv-router">
+ <properties>
+ <help>Show IPv4 OSPF NSSA external database of specified IP address for specified advertised router</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <leafNode name="self-originate">
+ <properties>
+ <help>Show self-originate IPv4 OSPF NSSA external database</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<tagNode name="adv-router">
<properties>
- <help>Show IPv4 OSPF NSSA external database of specified IP address for specified advertised router</help>
+ <help>Show IPv4 OSPF NSSA external database for specified IP address of advertised router</help>
<completionHelp>
<list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</tagNode>
- <leafNode name="self-originate">
- <properties>
- <help>Show self-originate IPv4 OSPF NSSA external database</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
</children>
- </tagNode>
+ </node>
<node name="opaque-area">
<properties>
<help>Show IPv4 OSPF opaque-area database</help>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <tagNode name="adv-router">
+ <virtualTagNode>
<properties>
- <help>Show IPv4 OSPF opaque-area database for specified IP address of advertised router</help>
+ <help>Show IPv4 OSPF opaque-area database information of specified IP address</help>
<completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
+ <list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </tagNode>
- <node name="adv-router">
- <properties>
- <help>Show IPv4 OSPF opaque-area database for specified IP address of advertised router</help>
- </properties>
- </node>
- </children>
- </node>
- <tagNode name="opaque-area">
- <properties>
- <help>Show IPv4 OSPF opaque-area database information of specified IP address</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <node name="adv-router">
- <properties>
- <help>Show advertising router link states</help>
- </properties>
- </node>
+ <children>
+ <tagNode name="adv-router">
+ <properties>
+ <help>Show IPv4 OSPF opaque-area database of specified IP address for specified advertised router</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <leafNode name="self-originate">
+ <properties>
+ <help>Show self-originate IPv4 OSPF opaque-area database</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<tagNode name="adv-router">
<properties>
- <help>Show IPv4 OSPF opaque-area database of specified IP address for specified advertised router</help>
+ <help>Show IPv4 OSPF opaque-area database for specified IP address of advertised router</help>
<completionHelp>
<list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</tagNode>
- <leafNode name="self-originate">
- <properties>
- <help>Show self-originate IPv4 OSPF opaque-area database</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
</children>
- </tagNode>
+ </node>
<node name="opaque-as">
<properties>
<help>Show IPv4 OSPF opaque-as database</help>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <tagNode name="adv-router">
+ <virtualTagNode>
<properties>
- <help>Show IPv4 OSPF opaque-as database for specified IP address of advertised router</help>
+ <help>Show IPv4 OSPF opaque-as database information of specified IP address</help>
<completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
+ <list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </tagNode>
- <node name="adv-router">
- <properties>
- <help>Show IPv4 OSPF opaque-as database for specified IP address of advertised router</help>
- </properties>
- </node>
- </children>
- </node>
- <tagNode name="opaque-as">
- <properties>
- <help>Show IPv4 OSPF opaque-as database information of specified IP address</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <node name="adv-router">
- <properties>
- <help>Show advertising router link states</help>
- </properties>
- </node>
+ <children>
+ <tagNode name="adv-router">
+ <properties>
+ <help>Show IPv4 OSPF opaque-as database of specified IP address for specified advertised router</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <leafNode name="self-originate">
+ <properties>
+ <help>Show self-originate IPv4 OSPF opaque-as database</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<tagNode name="adv-router">
<properties>
- <help>Show IPv4 OSPF opaque-as database of specified IP address for specified advertised router</help>
+ <help>Show IPv4 OSPF opaque-as database for specified IP address of advertised router</help>
<completionHelp>
<list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</tagNode>
- <leafNode name="self-originate">
- <properties>
- <help>Show self-originate IPv4 OSPF opaque-as database</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
</children>
- </tagNode>
+ </node>
<node name="opaque-link">
<properties>
<help>Show IPv4 OSPF opaque-link database</help>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <tagNode name="adv-router">
+ <virtualTagNode>
<properties>
- <help>Show IPv4 OSPF opaque-link database for specified IP address of advertised router</help>
+ <help>Show IPv4 OSPF opaque-link database information of specified IP address</help>
<completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
+ <list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </tagNode>
- <node name="adv-router">
- <properties>
- <help>Show IPv4 OSPF opaque-link database for specified IP address of advertised router</help>
- </properties>
- </node>
- </children>
- </node>
- <tagNode name="opaque-link">
- <properties>
- <help>Show IPv4 OSPF opaque-link database information of specified IP address</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <node name="adv-router">
- <properties>
- <help>Show advertising router link states</help>
- </properties>
- </node>
+ <children>
+ <tagNode name="adv-router">
+ <properties>
+ <help>Show IPv4 OSPF opaque-link database of specified IP address for specified advertised router</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <leafNode name="self-originate">
+ <properties>
+ <help>Show self-originate IPv4 OSPF opaque-link database</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<tagNode name="adv-router">
<properties>
- <help>Show IPv4 OSPF opaque-link database of specified IP address for specified advertised router</help>
+ <help>Show IPv4 OSPF opaque-link database for specified IP address of advertised router</help>
<completionHelp>
<list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</tagNode>
- <leafNode name="self-originate">
- <properties>
- <help>Show self-originate IPv4 OSPF opaque-link database</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
</children>
- </tagNode>
+ </node>
<node name="router">
<properties>
<help>Show IPv4 OSPF router database</help>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <tagNode name="adv-router">
+ <virtualTagNode>
<properties>
- <help>Show IPv4 OSPF router database for specified IP address of advertised router</help>
+ <help>Show IPv4 OSPF router database information of specified IP address</help>
<completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
+ <list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </tagNode>
- <node name="adv-router">
- <properties>
- <help>Show IPv4 OSPF router database for specified IP address of advertised router</help>
- </properties>
- </node>
- </children>
- </node>
- <tagNode name="router">
- <properties>
- <help>Show IPv4 OSPF router database information of specified IP address</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <node name="adv-router">
- <properties>
- <help>Show advertising router link states</help>
- </properties>
- </node>
+ <children>
+ <tagNode name="adv-router">
+ <properties>
+ <help>Show IPv4 OSPF router database of specified IP address for specified advertised router</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <leafNode name="self-originate">
+ <properties>
+ <help>Show self-originate IPv4 OSPF router database</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<tagNode name="adv-router">
<properties>
- <help>Show IPv4 OSPF router database of specified IP address for specified advertised router</help>
+ <help>Show IPv4 OSPF router database for specified IP address of advertised router</help>
<completionHelp>
<list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</tagNode>
- <leafNode name="self-originate">
- <properties>
- <help>Show self-originate IPv4 OSPF router database</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
</children>
- </tagNode>
+ </node>
<leafNode name="self-originate">
<properties>
<help>Show IPv4 OSPF self-originate database</help>
@@ -453,63 +373,59 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <tagNode name="adv-router">
+ <virtualTagNode>
<properties>
- <help>Show IPv4 OSPF summary database for specified IP address of advertised router</help>
+ <help>Show IPv4 OSPF summary database information of specified IP address</help>
<completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
+ <list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </tagNode>
- <node name="adv-router">
- <properties>
- <help>Show IPv4 OSPF summary database for specified IP address of advertised router</help>
- </properties>
- </node>
- </children>
- </node>
- <tagNode name="summary">
- <properties>
- <help>Show IPv4 OSPF summary database information of specified IP address</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <node name="adv-router">
- <properties>
- <help>Show advertising router link states</help>
- </properties>
- </node>
+ <children>
+ <tagNode name="adv-router">
+ <properties>
+ <help>Show IPv4 OSPF summary database of specified IP address for specified advertised router</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </tagNode>
+ <leafNode name="self-originate">
+ <properties>
+ <help>Show self-originate IPv4 OSPF summary database</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<tagNode name="adv-router">
<properties>
- <help>Show IPv4 OSPF summary database of specified IP address for specified advertised router</help>
+ <help>Show IPv4 OSPF summary database for specified IP address of advertised router</help>
<completionHelp>
<list>&lt;x.x.x.x&gt;</list>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</tagNode>
- <leafNode name="self-originate">
- <properties>
- <help>Show self-originate IPv4 OSPF summary database</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
</children>
- </tagNode>
+ </node>
</children>
</node>
#include <include/ospf/graceful-restart.xml.i>
-<node name="interface">
+<tagNode name="interface">
<properties>
- <help>Show IPv4 OSPF interface information</help>
+ <help>Show information about specific interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces</script>
+ </completionHelp>
</properties>
+ <standalone>
+ <help>Show IPv4 OSPF interface information</help>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </standalone>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
-</node>
-#include <include/vtysh-generic-interface-tagNode.xml.i>
+</tagNode>
<node name="mpls">
<properties>
<help>Show MPLS information</help>
@@ -524,19 +440,19 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Show IPv4 OSPF neighbor information for specified IP address or interface</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ <script>${vyos_completion_dir}/list_interfaces</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </virtualTagNode>
#include <include/frr-detail.xml.i>
</children>
</node>
-<tagNode name="neighbor">
- <properties>
- <help>Show IPv4 OSPF neighbor information for specified IP address or interface</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- <script>${vyos_completion_dir}/list_interfaces</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
-</tagNode>
<node name="route">
<properties>
<help>Show IPv4 OSPF route information</help>
diff --git a/op-mode-definitions/include/ospfv3/border-routers.xml.i b/op-mode-definitions/include/ospfv3/border-routers.xml.i
index e8827a2c4..4abd89e6b 100644
--- a/op-mode-definitions/include/ospfv3/border-routers.xml.i
+++ b/op-mode-definitions/include/ospfv3/border-routers.xml.i
@@ -5,16 +5,16 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Border router ID</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </virtualTagNode>
#include <include/frr-detail.xml.i>
</children>
</node>
-<tagNode name="border-routers">
- <properties>
- <help>Border router ID</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
-</tagNode>
<!-- included end -->
diff --git a/op-mode-definitions/include/ospfv3/database.xml.i b/op-mode-definitions/include/ospfv3/database.xml.i
index fdc45f184..d4e7ab695 100644
--- a/op-mode-definitions/include/ospfv3/database.xml.i
+++ b/op-mode-definitions/include/ospfv3/database.xml.i
@@ -21,7 +21,7 @@
<help>Search by Any Link state Type</help>
</properties>
<children>
- <tagNode name="any">
+ <virtualTagNode>
<properties>
<help>Search by Link state ID</help>
<completionHelp>
@@ -32,31 +32,32 @@
#include <include/frr-detail.xml.i>
#include <include/ospfv3/dump.xml.i>
#include <include/ospfv3/internal.xml.i>
+ #include <include/ospfv3/adv-router-id-node-tag.xml.i>
</children>
- </tagNode>
+ </virtualTagNode>
</children>
</node>
- <tagNode name="any">
- <properties>
- <help>Search by Link state ID</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <command>vtysh -c "show ipv6 ospf6 database * $6"</command>
- <children>
- #include <include/frr-detail.xml.i>
- #include <include/ospfv3/dump.xml.i>
- #include <include/ospfv3/internal.xml.i>
- #include <include/ospfv3/adv-router-id-node-tag.xml.i>
- </children>
- </tagNode>
<node name="as-external">
<properties>
<help>Show AS-External LSAs</help>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Search by Advertising Router IDs</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <children>
+ #include <include/frr-detail.xml.i>
+ #include <include/ospfv3/dump.xml.i>
+ #include <include/ospfv3/internal.xml.i>
+ #include <include/ospfv3/self-originated.xml.i>
+ #include <include/ospfv3/adv-router-id-node-tag.xml.i>
+ </children>
+ </virtualTagNode>
#include <include/ospfv3/adv-router.xml.i>
<tagNode name="any">
<properties>
@@ -79,21 +80,6 @@
#include <include/ospfv3/self-originated.xml.i>
</children>
</node>
- <tagNode name="as-external">
- <properties>
- <help>Search by Advertising Router IDs</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt;</list>
- </completionHelp>
- </properties>
- <children>
- #include <include/frr-detail.xml.i>
- #include <include/ospfv3/dump.xml.i>
- #include <include/ospfv3/internal.xml.i>
- #include <include/ospfv3/self-originated.xml.i>
- #include <include/ospfv3/adv-router-id-node-tag.xml.i>
- </children>
- </tagNode>
#include <include/frr-detail.xml.i>
#include <include/ospfv3/internal.xml.i>
#include <include/ospfv3/linkstate-id.xml.i>
@@ -188,7 +174,7 @@
#include <include/ospfv3/self-originated.xml.i>
</children>
</node>
- <node name="node.tag">
+ <virtualTagNode>
<properties>
<help>Show LSAs</help>
</properties>
@@ -202,7 +188,7 @@
#include <include/ospfv3/linkstate-id-node-tag.xml.i>
#include <include/ospfv3/self-originated.xml.i>
</children>
- </node>
+ </virtualTagNode>
<node name="router">
<properties>
<help>Show router LSAs</help>
diff --git a/op-mode-definitions/include/ospfv3/interface.xml.i b/op-mode-definitions/include/ospfv3/interface.xml.i
index 45d5dbd45..a918651cf 100644
--- a/op-mode-definitions/include/ospfv3/interface.xml.i
+++ b/op-mode-definitions/include/ospfv3/interface.xml.i
@@ -5,71 +5,71 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- <node name="prefix">
+ <virtualTagNode>
<properties>
- <help>Show connected prefixes to advertise</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/frr-detail.xml.i>
- </children>
- </node>
- <tagNode name="prefix">
- <properties>
- <help>Show interface prefix route specific information</help>
+ <help>Specific insterface to examine</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>
+ <script>${vyos_completion_dir}/list_interfaces</script>
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- #include <include/frr-detail.xml.i>
- <node name="match">
+ <node name="prefix">
<properties>
- <help>Matched interface prefix information</help>
+ <help>Show connected prefixes to advertise</help>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ <virtualTagNode>
+ <properties>
+ <help>Show interface prefix route specific information</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>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/frr-detail.xml.i>
+ <node name="match">
+ <properties>
+ <help>Matched interface prefix information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </node>
+ </children>
+ </virtualTagNode>
+ #include <include/frr-detail.xml.i>
+ </children>
</node>
</children>
- </tagNode>
- </children>
-</node>
-<tagNode name="interface">
- <properties>
- <help>Specific insterface to examine</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_interfaces</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
+ </virtualTagNode>
<node name="prefix">
<properties>
<help>Show connected prefixes to advertise</help>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
- #include <include/frr-detail.xml.i>
- </children>
- </node>
- <tagNode name="prefix">
- <properties>
- <help>Show interface prefix route specific information</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>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/frr-detail.xml.i>
- <node name="match">
+ <virtualTagNode>
<properties>
- <help>Matched interface prefix information</help>
+ <help>Show interface prefix route specific information</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>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </node>
+ <children>
+ #include <include/frr-detail.xml.i>
+ <node name="match">
+ <properties>
+ <help>Matched interface prefix information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </node>
+ </children>
+ </virtualTagNode>
+ #include <include/frr-detail.xml.i>
</children>
- </tagNode>
+ </node>
</children>
-</tagNode>
+</node>
<!-- included end -->
diff --git a/op-mode-definitions/include/ospfv3/linkstate-id-node-tag.xml.i b/op-mode-definitions/include/ospfv3/linkstate-id-node-tag.xml.i
index 66674e754..b5aed4c0a 100644
--- a/op-mode-definitions/include/ospfv3/linkstate-id-node-tag.xml.i
+++ b/op-mode-definitions/include/ospfv3/linkstate-id-node-tag.xml.i
@@ -1,5 +1,5 @@
<!-- included start from ospfv3/linkstate-id-node-tag.xml.i -->
-<node name="node.tag">
+<virtualTagNode>
<properties>
<help>Search by Link state ID</help>
<completionHelp>
@@ -13,5 +13,5 @@
#include <include/ospfv3/internal.xml.i>
#include <include/ospfv3/self-originated.xml.i>
</children>
-</node>
+</virtualTagNode>
<!-- included end -->
diff --git a/op-mode-definitions/include/ospfv3/linkstate.xml.i b/op-mode-definitions/include/ospfv3/linkstate.xml.i
index 030dc7923..3a08d748f 100644
--- a/op-mode-definitions/include/ospfv3/linkstate.xml.i
+++ b/op-mode-definitions/include/ospfv3/linkstate.xml.i
@@ -13,7 +13,7 @@
</completionHelp>
</properties>
<children>
- <node name="node.tag">
+ <virtualTagNode>
<properties>
<help>Specify Link state ID as IPv4 address notation</help>
<completionHelp>
@@ -21,7 +21,7 @@
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </node>
+ </virtualTagNode>
</children>
</tagNode>
<tagNode name="router">
diff --git a/op-mode-definitions/include/ospfv3/route.xml.i b/op-mode-definitions/include/ospfv3/route.xml.i
index a5b97cd05..0128bac1b 100644
--- a/op-mode-definitions/include/ospfv3/route.xml.i
+++ b/op-mode-definitions/include/ospfv3/route.xml.i
@@ -5,6 +5,32 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified route/prefix information</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>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ <node name="longer">
+ <properties>
+ <help>Show routes longer than specified prefix</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </node>
+ <node name="match">
+ <properties>
+ <help>Show routes matching specified prefix</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/frr-detail.xml.i>
+ </children>
+ </node>
+ </children>
+ </virtualTagNode>
<node name="external-1">
<properties>
<help>Show Type-1 External route information</help>
@@ -50,30 +76,4 @@
</node>
</children>
</node>
-<tagNode name="route">
- <properties>
- <help>Show specified route/prefix information</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>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <node name="longer">
- <properties>
- <help>Show routes longer than specified prefix</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </node>
- <node name="match">
- <properties>
- <help>Show routes matching specified prefix</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/frr-detail.xml.i>
- </children>
- </node>
- </children>
-</tagNode>
<!-- included end -->
diff --git a/op-mode-definitions/include/show-route-table.xml.i b/op-mode-definitions/include/show-route-table.xml.i
index c3cf82a86..7c0f574c8 100644
--- a/op-mode-definitions/include/show-route-table.xml.i
+++ b/op-mode-definitions/include/show-route-table.xml.i
@@ -1,12 +1,7 @@
<!-- included start from show-route-table.xml.i -->
-<node name="table">
- <properties>
- <help>Table to display</help>
- </properties>
-</node>
<tagNode name="table">
<properties>
- <help>The table number to display</help>
+ <help>Show routes in specific routing table</help>
<completionHelp>
<list>all</list>
<path>protocols static table</path>
diff --git a/op-mode-definitions/include/show-route-tag.xml.i b/op-mode-definitions/include/show-route-tag.xml.i
index 8bfa0ae4e..c7279e82e 100644
--- a/op-mode-definitions/include/show-route-tag.xml.i
+++ b/op-mode-definitions/include/show-route-tag.xml.i
@@ -1,12 +1,7 @@
<!-- included start from show-route-tag.xml.i -->
-<node name="tag">
- <properties>
- <help>Show only routes with tag</help>
- </properties>
-</node>
<tagNode name="tag">
<properties>
- <help>Tag value</help>
+ <help>Show route with given tag</help>
<completionHelp>
<list>&lt;1-4294967295&gt;</list>
</completionHelp>
diff --git a/op-mode-definitions/include/vtysh-generic-interface-virtualTagNode.xml b/op-mode-definitions/include/vtysh-generic-interface-virtualTagNode.xml
new file mode 100644
index 000000000..1dfcfc75e
--- /dev/null
+++ b/op-mode-definitions/include/vtysh-generic-interface-virtualTagNode.xml
@@ -0,0 +1,11 @@
+<!-- included start from vtysh-generic-interface-virtualTagNode.xml.i -->
+<virtualTagNode>
+ <properties>
+ <help>Show information about specific interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+</virtualTagNode>
+<!-- included end -->
diff --git a/op-mode-definitions/ipv4-route.xml.in b/op-mode-definitions/ipv4-route.xml.in
index e4dda2851..41a4b62ba 100644
--- a/op-mode-definitions/ipv4-route.xml.in
+++ b/op-mode-definitions/ipv4-route.xml.in
@@ -63,12 +63,6 @@
<help>Reset IP route</help>
</properties>
<children>
- <leafNode name= "cache">
- <properties>
- <help>Flush the kernel route cache</help>
- </properties>
- <command>ip route flush cache</command>
- </leafNode>
<tagNode name="cache">
<properties>
<help>Flush the kernel route cache for a given route</help>
@@ -76,6 +70,10 @@
<list>&lt;x.x.x.x&gt; &lt;x.x.x.x/x&gt;</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Flush the kernel route cache</help>
+ <command>ip route flush cache</command>
+ </standalone>
<command>ip route flush cache "$5"</command>
</tagNode>
</children>
diff --git a/op-mode-definitions/ipv6-route.xml.in b/op-mode-definitions/ipv6-route.xml.in
index 311bc6de6..7ea5a13f6 100644
--- a/op-mode-definitions/ipv6-route.xml.in
+++ b/op-mode-definitions/ipv6-route.xml.in
@@ -83,12 +83,6 @@
<help>Reset IPv6 route</help>
</properties>
<children>
- <leafNode name= "cache">
- <properties>
- <help>Flush the kernel IPv6 route cache</help>
- </properties>
- <command>ip -f inet6 route flush cache</command>
- </leafNode>
<tagNode name="cache">
<properties>
<help>Flush the kernel IPv6 route cache for a given route</help>
@@ -96,6 +90,10 @@
<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>
+ <standalone>
+ <help>Flush the kernel IPv6 route cache</help>
+ <command>ip -f inet6 route flush cache</command>
+ </standalone>
<command>ip -f inet6 route flush cache "$5"</command>
</tagNode>
</children>
diff --git a/op-mode-definitions/monitor-command.xml.in b/op-mode-definitions/monitor-command.xml.in
index 31c68f029..ba242386e 100644
--- a/op-mode-definitions/monitor-command.xml.in
+++ b/op-mode-definitions/monitor-command.xml.in
@@ -2,26 +2,31 @@
<interfaceDefinition>
<node name="monitor">
<children>
- <tagNode name="command">
+ <node name="command">
<properties>
- <help>Monitor operational mode command (refreshes every 2 seconds)</help>
+ <help>Monitor operational mode command output</help>
</properties>
- <command>watch --no-title ${vyos_op_scripts_dir}/vyos-op-cmd-wrapper.sh ${@:3}</command>
- </tagNode>
- <node name="command">
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Monitor operational mode command (refreshes every 2 seconds)</help>
+ </properties>
+ <command>watch --no-title ${vyos_op_scripts_dir}/vyos-op-cmd-wrapper.sh ${@:3}</command>
+ </virtualTagNode>
<node name="diff">
<properties>
<help>Show differences during each run</help>
</properties>
+ <children>
+ <virtualTagNode>
+ <properties>
+ <help>Monitor operational mode command (refreshes every 2 seconds)</help>
+ </properties>
+ <command>watch --no-title --differences ${vyos_op_scripts_dir}/vyos-op-cmd-wrapper.sh ${@:4}</command>
+ </virtualTagNode>
+ </children>
</node>
- <tagNode name="diff">
- <properties>
- <help>Monitor operational mode command (refreshes every 2 seconds)</help>
- </properties>
- <command>watch --no-title --differences ${vyos_op_scripts_dir}/vyos-op-cmd-wrapper.sh ${@:4}</command>
- </tagNode>
- </children>
+ </children>
</node>
</children>
</node>
diff --git a/op-mode-definitions/monitor-protocol.xml.in b/op-mode-definitions/monitor-protocol.xml.in
index f05a1945f..fec30c8a5 100644
--- a/op-mode-definitions/monitor-protocol.xml.in
+++ b/op-mode-definitions/monitor-protocol.xml.in
@@ -35,12 +35,6 @@
</properties>
<command>vtysh -c "no debug bgp ${@:5}"</command>
</node>
- <node name="bestpath">
- <properties>
- <help>Disable BGP allow best path debugging</help>
- </properties>
- <command>vtysh -c "no debug bgp ${@:5}"</command>
- </node>
<tagNode name="bestpath">
<properties>
<help>Disable BGP bestpath IPv4 IPv6</help>
@@ -48,6 +42,10 @@
<list>&lt;x.x.x.x/x&gt; &lt;h:h:h:h:h:h:h:h/h&gt;</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Disable BGP allow best path debugging</help>
+ <command>vtysh -c "no debug bgp ${@:5}"</command>
+ </standalone>
<command>vtysh -c "no debug bgp ${@:5}"</command>
</tagNode>
<node name="flowspec">
@@ -155,12 +153,6 @@
</properties>
<command>vtysh -c "debug bgp ${@:5}"</command>
</node>
- <node name="bestpath">
- <properties>
- <help>Enable BGP allow best path debugging</help>
- </properties>
- <command>vtysh -c "debug bgp ${@:5}"</command>
- </node>
<tagNode name="bestpath">
<properties>
<help>Debug bestpath IPv4 IPv6</help>
@@ -168,6 +160,10 @@
<list>&lt;x.x.x.x/x&gt; &lt;h:h:h:h:h:h:h:h/h&gt;</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Enable BGP allow best path debugging</help>
+ <command>vtysh -c "debug bgp ${@:5}"</command>
+ </standalone>
<command>vtysh -c "debug bgp ${@:5}"</command>
</tagNode>
<node name="flowspec">
diff --git a/op-mode-definitions/mtr.xml.in b/op-mode-definitions/mtr.xml.in
index 66729e2bc..ac146d520 100644
--- a/op-mode-definitions/mtr.xml.in
+++ b/op-mode-definitions/mtr.xml.in
@@ -11,7 +11,7 @@
</properties>
<command>${vyos_op_scripts_dir}/mtr.py ${@:3}</command>
<children>
- <leafNode name="node.tag">
+ <virtualTagNode>
<properties>
<help>Traceroute options</help>
<completionHelp>
@@ -19,7 +19,7 @@
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/mtr.py ${@:3}</command>
- </leafNode>
+ </virtualTagNode>
</children>
</tagNode>
</children>
@@ -33,7 +33,7 @@
</properties>
<command>${vyos_op_scripts_dir}/mtr.py ${@:2}</command>
<children>
- <leafNode name="node.tag">
+ <virtualTagNode>
<properties>
<help>mtr options</help>
<completionHelp>
@@ -41,7 +41,7 @@
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/mtr.py ${@:2}</command>
- </leafNode>
+ </virtualTagNode>
</children>
</tagNode>
</interfaceDefinition>
diff --git a/op-mode-definitions/openvpn.xml.in b/op-mode-definitions/openvpn.xml.in
index 63834a127..692eef836 100644
--- a/op-mode-definitions/openvpn.xml.in
+++ b/op-mode-definitions/openvpn.xml.in
@@ -39,91 +39,84 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-type=openvpn</command>
<children>
+ <leafNode name="client">
+ <properties>
+ <help>Show tunnel status for OpenVPN client interfaces</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/openvpn.py show --mode client</command>
+ </leafNode>
+ <leafNode name="server">
+ <properties>
+ <help>Show tunnel status for OpenVPN server interfaces</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/openvpn.py show --mode server</command>
+ </leafNode>
+ <leafNode name="site-to-site">
+ <properties>
+ <help>Show tunnel status for OpenVPN site-to-site interfaces</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/openvpn.py show --mode site_to_site</command>
+ </leafNode>
<leafNode name="detail">
<properties>
<help>Show detailed OpenVPN interface information</help>
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=openvpn</command>
</leafNode>
- </children>
- </node>
- <tagNode name="openvpn">
- <properties>
- <help>Show OpenVPN interface information</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_interfaces --type openvpn</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name=$4</command>
- <children>
- <tagNode name="user">
+ <virtualTagNode>
<properties>
- <help>Show OpenVPN interface users</help>
+ <help>Show OpenVPN interface information</help>
<completionHelp>
- <script>${vyos_completion_dir}/list_openvpn_users.py --interface ${COMP_WORDS[3]}</script>
+ <script>${vyos_completion_dir}/list_interfaces --type openvpn</script>
</completionHelp>
</properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name=$4</command>
<children>
- <node name="mfa">
+ <tagNode name="user">
<properties>
- <help>Show multi-factor authentication information</help>
+ <help>Show OpenVPN interface users</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_openvpn_users.py --interface ${COMP_WORDS[3]}</script>
+ </completionHelp>
</properties>
<children>
- <leafNode name="secret">
+ <node name="mfa">
<properties>
- <help>Show multi-factor authentication secret</help>
+ <help>Show multi-factor authentication information</help>
</properties>
- <command>${vyos_op_scripts_dir}/show_openvpn_mfa.py --user="$6" --intf="$4" --action=secret</command>
- </leafNode>
- <leafNode name="uri">
- <properties>
- <help>Show multi-factor authentication otpauth uri</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show_openvpn_mfa.py --user="$6" --intf="$4" --action=uri</command>
- </leafNode>
- <leafNode name="qrcode">
- <properties>
- <help>Show multi-factor authentication QR code</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show_openvpn_mfa.py --user="$6" --intf="$4" --action=qrcode</command>
- </leafNode>
+ <children>
+ <leafNode name="secret">
+ <properties>
+ <help>Show multi-factor authentication secret</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_openvpn_mfa.py --user="$6" --intf="$4" --action=secret</command>
+ </leafNode>
+ <leafNode name="uri">
+ <properties>
+ <help>Show multi-factor authentication otpauth uri</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_openvpn_mfa.py --user="$6" --intf="$4" --action=uri</command>
+ </leafNode>
+ <leafNode name="qrcode">
+ <properties>
+ <help>Show multi-factor authentication QR code</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_openvpn_mfa.py --user="$6" --intf="$4" --action=qrcode</command>
+ </leafNode>
+ </children>
+ </node>
</children>
- </node>
+ </tagNode>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of specified OpenVPN interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4"</command>
+ </leafNode>
</children>
- </tagNode>
- <leafNode name="brief">
- <properties>
- <help>Show summary of specified OpenVPN interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4"</command>
- </leafNode>
+ </virtualTagNode>
</children>
- </tagNode>
- </children>
- </node>
- <node name="openvpn">
- <properties>
- <help>Show OpenVPN information</help>
- </properties>
- <children>
- <leafNode name="client">
- <properties>
- <help>Show tunnel status for OpenVPN client interfaces</help>
- </properties>
- <command>${vyos_op_scripts_dir}/openvpn.py show --mode client</command>
- </leafNode>
- <leafNode name="server">
- <properties>
- <help>Show tunnel status for OpenVPN server interfaces</help>
- </properties>
- <command>${vyos_op_scripts_dir}/openvpn.py show --mode server</command>
- </leafNode>
- <leafNode name="site-to-site">
- <properties>
- <help>Show tunnel status for OpenVPN site-to-site interfaces</help>
- </properties>
- <command>${vyos_op_scripts_dir}/openvpn.py show --mode site_to_site</command>
- </leafNode>
+ </node>
</children>
</node>
</children>
diff --git a/op-mode-definitions/ping.xml.in b/op-mode-definitions/ping.xml.in
index 4c25a59ab..fd50398ba 100644
--- a/op-mode-definitions/ping.xml.in
+++ b/op-mode-definitions/ping.xml.in
@@ -9,7 +9,7 @@
</properties>
<command>${vyos_op_scripts_dir}/ping.py ${@:2}</command>
<children>
- <leafNode name="node.tag">
+ <virtualTagNode>
<properties>
<help>Ping options</help>
<completionHelp>
@@ -17,7 +17,7 @@
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/ping.py ${@:2}</command>
- </leafNode>
+ </virtualTagNode>
</children>
</tagNode>
</interfaceDefinition>
diff --git a/op-mode-definitions/pki.xml.in b/op-mode-definitions/pki.xml.in
index 542b15e9d..29b08dacb 100644
--- a/op-mode-definitions/pki.xml.in
+++ b/op-mode-definitions/pki.xml.in
@@ -492,12 +492,6 @@
</properties>
<command>${vyos_op_scripts_dir}/pki.py show_all</command>
<children>
- <leafNode name="ca">
- <properties>
- <help>Show x509 CA certificates</help>
- </properties>
- <command>${vyos_op_scripts_dir}/pki.py show_certificate_authority</command>
- </leafNode>
<tagNode name="ca">
<properties>
<help>Show x509 CA certificate by name</help>
@@ -505,6 +499,10 @@
<path>pki ca</path>
</completionHelp>
</properties>
+ <standalone>
+ <help>Show x509 CA certificates</help>
+ <command>${vyos_op_scripts_dir}/pki.py show_certificate_authority</command>
+ </standalone>
<command>${vyos_op_scripts_dir}/pki.py show_certificate_authority --name "$4"</command>
<children>
<leafNode name="pem">
@@ -515,12 +513,6 @@
</leafNode>
</children>
</tagNode>
- <leafNode name="certificate">
- <properties>
- <help>Show x509 certificates</help>
- </properties>
- <command>${vyos_op_scripts_dir}/pki.py show_certificate</command>
- </leafNode>
<tagNode name="certificate">
<properties>
<help>Show x509 certificate by name</help>
@@ -528,6 +520,10 @@
<path>pki certificate</path>
</completionHelp>
</properties>
+ <standalone>
+ <help>Show x509 certificates</help>
+ <command>${vyos_op_scripts_dir}/pki.py show_certificate</command>
+ </standalone>
<command>${vyos_op_scripts_dir}/pki.py show_certificate --name "$4"</command>
<children>
<leafNode name="pem">
@@ -547,12 +543,6 @@
</tagNode>
</children>
</tagNode>
- <leafNode name="crl">
- <properties>
- <help>Show x509 certificate revocation lists</help>
- </properties>
- <command>${vyos_op_scripts_dir}/pki.py show_crl</command>
- </leafNode>
<tagNode name="crl">
<properties>
<help>Show x509 certificate revocation lists by CA name</help>
@@ -560,6 +550,10 @@
<path>pki ca</path>
</completionHelp>
</properties>
+ <standalone>
+ <help>Show x509 certificate revocation lists</help>
+ <command>${vyos_op_scripts_dir}/pki.py show_crl</command>
+ </standalone>
<command>${vyos_op_scripts_dir}/pki.py show_crl --name "$4"</command>
<children>
<leafNode name="pem">
diff --git a/op-mode-definitions/reset-bgp.xml.in b/op-mode-definitions/reset-bgp.xml.in
index a1d42d4a3..3d73fd417 100644
--- a/op-mode-definitions/reset-bgp.xml.in
+++ b/op-mode-definitions/reset-bgp.xml.in
@@ -7,6 +7,18 @@
<help>Border Gateway Protocol (BGP) information</help>
</properties>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>BGP IPv4/IPv6 neighbor to clear</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_bgp_neighbors.sh --both</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/bgp/reset-bgp-neighbor-options.xml.i>
+ </children>
+ </virtualTagNode>
<leafNode name="all">
<properties>
<help>Clear all peers</help>
@@ -37,20 +49,20 @@
</leafNode>
#include <include/bgp/reset-bgp-afi-common.xml.i>
#include <include/bgp/reset-bgp-peer-group.xml.i>
+ <virtualTagNode>
+ <properties>
+ <help>IPv4 neighbor to clear</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv4</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/bgp/reset-bgp-neighbor-options.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
- <tagNode name="ipv4">
- <properties>
- <help>IPv4 neighbor to clear</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv4</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/bgp/reset-bgp-neighbor-options.xml.i>
- </children>
- </tagNode>
<node name="ipv6">
<properties>
<help>IPv6 Address Family</help>
@@ -64,20 +76,20 @@
</leafNode>
#include <include/bgp/reset-bgp-afi-common.xml.i>
#include <include/bgp/reset-bgp-peer-group.xml.i>
+ <virtualTagNode>
+ <properties>
+ <help>IPv6 neighbor to clear</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv6</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/bgp/reset-bgp-neighbor-options.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
- <tagNode name="ipv6">
- <properties>
- <help>IPv6 neighbor to clear</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv6</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/bgp/reset-bgp-neighbor-options.xml.i>
- </children>
- </tagNode>
<node name="l2vpn">
<properties>
<help>Layer 2 Virtual Private Network Address Family</help>
@@ -96,20 +108,20 @@
</leafNode>
#include <include/bgp/reset-bgp-afi-common.xml.i>
#include <include/bgp/reset-bgp-peer-group.xml.i>
+ <virtualTagNode>
+ <properties>
+ <help>BGP IPv4/IPv6 neighbor to clear</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_bgp_neighbors.sh --both</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/bgp/reset-bgp-neighbor-options.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
- <tagNode name="evpn">
- <properties>
- <help>BGP IPv4/IPv6 neighbor to clear</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_bgp_neighbors.sh --both</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/bgp/reset-bgp-neighbor-options.xml.i>
- </children>
- </tagNode>
</children>
</node>
<tagNode name="vrf">
@@ -120,7 +132,7 @@
</completionHelp>
</properties>
<children>
- <node name="node.tag">
+ <virtualTagNode>
<properties>
<help>IPv4/IPv6 neighbor to clear</help>
<completionHelp>
@@ -131,7 +143,7 @@
<children>
#include <include/bgp/reset-bgp-neighbor-options.xml.i>
</children>
- </node>
+ </virtualTagNode>
<leafNode name="all">
<properties>
<help>Clear all peers</help>
@@ -162,20 +174,20 @@
</leafNode>
#include <include/bgp/reset-bgp-afi-common.xml.i>
#include <include/bgp/reset-bgp-peer-group-vrf.xml.i>
+ <virtualTagNode>
+ <properties>
+ <help>IPv4 neighbor to clear</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv4 --vrf ${COMP_WORDS[3]}</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/bgp/reset-bgp-neighbor-options.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
- <tagNode name="ipv4">
- <properties>
- <help>IPv4 neighbor to clear</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv4 --vrf ${COMP_WORDS[3]}</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/bgp/reset-bgp-neighbor-options.xml.i>
- </children>
- </tagNode>
<node name="ipv6">
<properties>
<help>IPv6 Address Family</help>
@@ -189,20 +201,20 @@
</leafNode>
#include <include/bgp/reset-bgp-afi-common.xml.i>
#include <include/bgp/reset-bgp-peer-group-vrf.xml.i>
+ <virtualTagNode>
+ <properties>
+ <help>IPv6 neighbor to clear</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv6 --vrf ${COMP_WORDS[3]}</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/bgp/reset-bgp-neighbor-options.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
- <tagNode name="ipv6">
- <properties>
- <help>IPv6 neighbor to clear</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv6 --vrf ${COMP_WORDS[3]}</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/bgp/reset-bgp-neighbor-options.xml.i>
- </children>
- </tagNode>
<node name="l2vpn">
<properties>
<help>Layer 2 Virtual Private Network Address Family</help>
@@ -221,38 +233,26 @@
</leafNode>
#include <include/bgp/reset-bgp-afi-common.xml.i>
#include <include/bgp/reset-bgp-peer-group-vrf.xml.i>
+ <virtualTagNode>
+ <properties>
+ <help>BGP IPv4/IPv6 neighbor to clear</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_bgp_neighbors.sh --both --vrf ${COMP_WORDS[3]}</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/bgp/reset-bgp-neighbor-options.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
- <tagNode name="evpn">
- <properties>
- <help>BGP IPv4/IPv6 neighbor to clear</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_bgp_neighbors.sh --both --vrf ${COMP_WORDS[3]}</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/bgp/reset-bgp-neighbor-options.xml.i>
- </children>
- </tagNode>
</children>
</node>
</children>
</tagNode>
</children>
</node>
- <tagNode name="bgp">
- <properties>
- <help>BGP IPv4/IPv6 neighbor to clear</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_bgp_neighbors.sh --both</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/bgp/reset-bgp-neighbor-options.xml.i>
- </children>
- </tagNode>
</children>
</node>
</interfaceDefinition>
diff --git a/op-mode-definitions/reset-ip-bgp.xml.in b/op-mode-definitions/reset-ip-bgp.xml.in
index 34a4503d9..9201865dc 100644
--- a/op-mode-definitions/reset-ip-bgp.xml.in
+++ b/op-mode-definitions/reset-ip-bgp.xml.in
@@ -9,28 +9,38 @@
<help>Border Gateway Protocol (BGP) information</help>
</properties>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>BGP IPv4/IPv6 neighbor to clear</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv4</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ #include <include/bgp/reset-bgp-neighbor-options.xml.i>
+ </children>
+ </virtualTagNode>
<leafNode name="all">
<properties>
<help>Clear all BGP peering sessions</help>
</properties>
<command>vtysh -c "clear bgp ipv4 *"</command>
</leafNode>
- <node name="dampening">
- <properties>
- <help>Clear BGP route flap dampening information</help>
- </properties>
- <command>vtysh -c "clear ip bgp dampening"</command>
- </node>
<tagNode name="dampening">
<properties>
- <help>Clear BGP route flap dampening information for given host|network address</help>
+ <help>Clear BGP route flap dampening information for given host ornetwork address</help>
<completionHelp>
<list>&lt;x.x.x.x&gt; &lt;x.x.x.x/x&gt;</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Clear BGP route flap dampening information</help>
+ <command>vtysh -c "clear ip bgp dampening"</command>
+ </standalone>
<command>vtysh -c "clear ip bgp dampening $5"</command>
<children>
- <leafNode name="node.tag">
+ <virtualTagNode>
<properties>
<help>Clear BGP route flap dampening information for given network address</help>
<completionHelp>
@@ -38,7 +48,7 @@
</completionHelp>
</properties>
<command>vtysh -c "clear ip bgp dampening $5 $6"</command>
- </leafNode>
+ </virtualTagNode>
</children>
</tagNode>
#include <include/bgp/reset-bgp-afi-common.xml.i>
@@ -57,7 +67,7 @@
</properties>
<command>vtysh -c "clear bgp vrf $5 *"</command>
</leafNode>
- <leafNode name="node.tag">
+ <virtualTagNode>
<properties>
<help>Clear BGP neighbor IP address</help>
<completionHelp>
@@ -65,24 +75,12 @@
</completionHelp>
</properties>
<command>vtysh -c "clear bgp vrf $5 $6"</command>
- </leafNode>
+ </virtualTagNode>
</children>
</tagNode>
</children>
</node>
- <tagNode name="bgp">
- <properties>
- <help>BGP IPv4/IPv6 neighbor to clear</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv4</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- #include <include/bgp/reset-bgp-neighbor-options.xml.i>
- </children>
- </tagNode>
- </children>
+ </children>
</node>
</children>
</node>
diff --git a/op-mode-definitions/show-bridge.xml.in b/op-mode-definitions/show-bridge.xml.in
index 47c3d2e6e..c9558c315 100644
--- a/op-mode-definitions/show-bridge.xml.in
+++ b/op-mode-definitions/show-bridge.xml.in
@@ -6,7 +6,57 @@
<properties>
<help>Show bridging information</help>
</properties>
+ <command>${vyos_op_scripts_dir}/bridge.py show</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Show bridge information for a given bridge interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type bridge</script>
+ </completionHelp>
+ </properties>
+ <command>bridge -c link show | grep "master $3"</command>
+ <children>
+ <node name="spanning-tree">
+ <properties>
+ <help>View Spanning Tree info for specified bridges</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/stp.py show_stp --ifname=$3</command>
+ <children>
+ <leafNode name="detail">
+ <properties>
+ <help>Show detailed Spanning Tree info for specified bridge</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/stp.py show_stp --ifname=$3 --detail</command>
+ </leafNode>
+ </children>
+ </node>
+ <leafNode name="mdb">
+ <properties>
+ <help>Displays the multicast group database for the bridge</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/bridge.py show_mdb --interface=$3</command>
+ </leafNode>
+ <leafNode name="fdb">
+ <properties>
+ <help>Show the forwarding database of the bridge</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/bridge.py show_fdb --interface=$3</command>
+ </leafNode>
+ <leafNode name="detail">
+ <properties>
+ <help>Display bridge interface details</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/bridge.py show_detail --interface=$3</command>
+ </leafNode>
+ <leafNode name="nexthop-group">
+ <properties>
+ <help>Display bridge interface nexthop-group</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/bridge.py show_detail --nexthop-group --interface=$3</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<node name="spanning-tree">
<properties>
<help>View Spanning Tree info for all bridges</help>
@@ -43,59 +93,6 @@
</leafNode>
</children>
</node>
- <tagNode name="bridge">
- <properties>
- <help>Show bridge information for a given bridge interface</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_interfaces --type bridge</script>
- </completionHelp>
- </properties>
- <command>bridge -c link show | grep "master $3"</command>
- <standalone>
- <help>Show bridge interface information</help>
- <command>${vyos_op_scripts_dir}/bridge.py show</command>
- </standalone>
- <children>
- <node name="spanning-tree">
- <properties>
- <help>View Spanning Tree info for specified bridges</help>
- </properties>
- <command>${vyos_op_scripts_dir}/stp.py show_stp --ifname=$3</command>
- <children>
- <leafNode name="detail">
- <properties>
- <help>Show detailed Spanning Tree info for specified bridge</help>
- </properties>
- <command>${vyos_op_scripts_dir}/stp.py show_stp --ifname=$3 --detail</command>
- </leafNode>
- </children>
- </node>
- <leafNode name="mdb">
- <properties>
- <help>Displays the multicast group database for the bridge</help>
- </properties>
- <command>${vyos_op_scripts_dir}/bridge.py show_mdb --interface=$3</command>
- </leafNode>
- <leafNode name="fdb">
- <properties>
- <help>Show the forwarding database of the bridge</help>
- </properties>
- <command>${vyos_op_scripts_dir}/bridge.py show_fdb --interface=$3</command>
- </leafNode>
- <leafNode name="detail">
- <properties>
- <help>Display bridge interface details</help>
- </properties>
- <command>${vyos_op_scripts_dir}/bridge.py show_detail --interface=$3</command>
- </leafNode>
- <leafNode name="nexthop-group">
- <properties>
- <help>Display bridge interface nexthop-group</help>
- </properties>
- <command>${vyos_op_scripts_dir}/bridge.py show_detail --nexthop-group --interface=$3</command>
- </leafNode>
- </children>
- </tagNode>
</children>
</node>
</interfaceDefinition>
diff --git a/op-mode-definitions/show-evpn.xml.in b/op-mode-definitions/show-evpn.xml.in
index 3c1e5c7d6..885e0e615 100644
--- a/op-mode-definitions/show-evpn.xml.in
+++ b/op-mode-definitions/show-evpn.xml.in
@@ -11,30 +11,30 @@
<properties>
<help>Access VLANs</help>
</properties>
- <children>
- #include <include/frr-detail.xml.i>
- </children>
- <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
- </node>
- <tagNode name="access-vlan">
- <properties>
- <help>Access VLANs interface name</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_interfaces --bridgeable --no-vlan-subinterfaces</script>
- </completionHelp>
- </properties>
- <children>
- <node name="node.tag">
+ <children>
+ <virtualTagNode>
<properties>
- <help>VLAN ID</help>
+ <help>Access VLANs interface name</help>
<completionHelp>
- <list>&lt;1-4094&gt;</list>
+ <script>${vyos_completion_dir}/list_interfaces --bridgeable --no-vlan-subinterfaces</script>
</completionHelp>
</properties>
- <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
- </node>
+ <children>
+ <virtualTagNode>
+ <properties>
+ <help>VLAN ID</help>
+ <completionHelp>
+ <list>&lt;1-4094&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
+ </virtualTagNode>
+ </children>
+ </virtualTagNode>
+ #include <include/frr-detail.xml.i>
</children>
- </tagNode>
+ <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
+ </node>
<node name="arp-cache">
<properties>
<help>ARP and ND cache</help>
@@ -43,22 +43,22 @@
#include <include/vni-tagnode-all.xml.i>
</children>
</node>
- <tagNode name="es">
- <properties>
- <help>Show ESI information for specified ESI</help>
- <completionHelp>
- <list>&lt;esi&gt;</list>
- <script>${vyos_completion_dir}/list_esi.sh</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
- </tagNode>
<node name="es">
<properties>
<help>Show ESI information</help>
</properties>
<command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Show ESI information for specified ESI</help>
+ <completionHelp>
+ <list>&lt;esi&gt;</list>
+ <script>${vyos_completion_dir}/list_esi.sh</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
+ </virtualTagNode>
<leafNode name="detail">
<properties>
<help>Show ESI details</help>
@@ -106,13 +106,22 @@
#include <include/vni-tagnode-all.xml.i>
</children>
</node>
- #include <include/vni-tagnode.xml.i>
<node name="vni">
<properties>
<help>Show VNI information</help>
</properties>
<command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
- <children>
+ <children>
+ <virtualTagNode>
+ <properties>
+ <help>VXLAN network identifier (VNI) number</help>
+ <completionHelp>
+ <list>&lt;1-16777215&gt;</list>
+ <script>${vyos_completion_dir}/list_vni.sh</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
+ </virtualTagNode>
<leafNode name="detail">
<properties>
<help>Show VNI details</help>
diff --git a/op-mode-definitions/show-history.xml.in b/op-mode-definitions/show-history.xml.in
index 7fb286264..1781fa267 100644
--- a/op-mode-definitions/show-history.xml.in
+++ b/op-mode-definitions/show-history.xml.in
@@ -14,18 +14,17 @@
</properties>
<command>HISTTIMEFORMAT='%FT%T%z ' HISTFILE="$HOME/.bash_history" \set -o history; history 20</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show last N commands in history</help>
+ <completionHelp>
+ <list>&lt;NUMBER&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>HISTTIMEFORMAT='%FT%T%z ' HISTFILE="$HOME/.bash_history" \set -o history; history $3</command>
+ </virtualTagNode>
</children>
</node>
-
- <tagNode name="history">
- <properties>
- <help>Show last N commands in history</help>
- <completionHelp>
- <list>&lt;NUMBER&gt;</list>
- </completionHelp>
- </properties>
- <command>HISTTIMEFORMAT='%FT%T%z ' HISTFILE="$HOME/.bash_history" \set -o history; history $3</command>
- </tagNode>
- </children>
+ </children>
</node>
</interfaceDefinition>
diff --git a/op-mode-definitions/show-interfaces-bonding.xml.in b/op-mode-definitions/show-interfaces-bonding.xml.in
index 839a4cd91..58f754ad6 100644
--- a/op-mode-definitions/show-interfaces-bonding.xml.in
+++ b/op-mode-definitions/show-interfaces-bonding.xml.in
@@ -4,26 +4,17 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="bonding">
+ <node name="bonding">
<properties>
- <help>Show specified Bonding interface information</help>
- <completionHelp>
- <path>interfaces bonding</path>
- </completionHelp>
+ <help>Show specified bonding interface information</help>
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=bonding</command>
<children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified bonding interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=bonding</command>
- </leafNode>
<leafNode name="detail">
<properties>
- <help>Show detailed interface information</help>
+ <help>Show detailed bonding interface information</help>
</properties>
- <command>${vyos_op_scripts_dir}/show_bonding_detail.sh "$4"</command>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=bonding</command>
</leafNode>
<node name="lacp">
<properties>
@@ -34,13 +25,7 @@
<properties>
<help>Show LACP details</help>
</properties>
- <command>${vyos_op_scripts_dir}/bonding.py show_lacp_detail --interface="$4" </command>
- </leafNode>
- <leafNode name="neighbors">
- <properties>
- <help>Show LACP Neighbors</help>
- </properties>
- <command>${vyos_op_scripts_dir}/bonding.py show_lacp_neighbors --interface="$4"</command>
+ <command>${vyos_op_scripts_dir}/bonding.py show_lacp_detail</command>
</leafNode>
</children>
</node>
@@ -48,59 +33,73 @@
<properties>
<help>Show specified bonding interface information</help>
</properties>
- <command>${vyos_op_scripts_dir}/show-bond.py --interface "$4"</command>
+ <command>${vyos_op_scripts_dir}/show-bond.py --slaves</command>
</leafNode>
- <tagNode name="vif">
+ <virtualTagNode>
<properties>
- <help>Show specified virtual network interface (vif) information</help>
<completionHelp>
- <path>interfaces bonding ${COMP_WORDS[3]} vif</path>
+ <path>interfaces bonding</path>
</completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4.$6" --intf-type=bonding</command>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=bonding</command>
<children>
<leafNode name="brief">
<properties>
- <help>Show summary of specified virtual network interface (vif) information</help>
+ <help>Show summary of the specified bonding interface information</help>
</properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4.$6" --intf-type=bonding</command>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=bonding</command>
</leafNode>
- </children>
- </tagNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="bonding">
- <properties>
- <help>Show Bonding interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-type=bonding</command>
- <children>
- <leafNode name="detail">
- <properties>
- <help>Show detailed bonding interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=bonding</command>
- </leafNode>
- <node name="lacp">
- <properties>
- <help>Show LACP related info</help>
- </properties>
- <children>
<leafNode name="detail">
<properties>
- <help>Show LACP details</help>
+ <help>Show detailed interface information</help>
</properties>
- <command>${vyos_op_scripts_dir}/bonding.py show_lacp_detail</command>
+ <command>${vyos_op_scripts_dir}/show_bonding_detail.sh "$4"</command>
+ </leafNode>
+ <node name="lacp">
+ <properties>
+ <help>Show LACP related info</help>
+ </properties>
+ <children>
+ <leafNode name="detail">
+ <properties>
+ <help>Show LACP details</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/bonding.py show_lacp_detail --interface="$4" </command>
+ </leafNode>
+ <leafNode name="neighbors">
+ <properties>
+ <help>Show LACP Neighbors</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/bonding.py show_lacp_neighbors --interface="$4"</command>
+ </leafNode>
+ </children>
+ </node>
+ <leafNode name="slaves">
+ <properties>
+ <help>Show specified bonding interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show-bond.py --interface "$4"</command>
</leafNode>
+ <tagNode name="vif">
+ <properties>
+ <help>Show specified virtual network interface (vif) information</help>
+ <completionHelp>
+ <path>interfaces bonding ${COMP_WORDS[3]} vif</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4.$6" --intf-type=bonding</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of specified virtual network interface (vif) information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4.$6" --intf-type=bonding</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ #include <include/show-interface-type-event-log.xml.i>
</children>
- </node>
- <leafNode name="slaves">
- <properties>
- <help>Show specified bonding interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show-bond.py --slaves</command>
- </leafNode>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-bridge.xml.in b/op-mode-definitions/show-interfaces-bridge.xml.in
index 998dacd38..f79b7bd7f 100644
--- a/op-mode-definitions/show-interfaces-bridge.xml.in
+++ b/op-mode-definitions/show-interfaces-bridge.xml.in
@@ -4,27 +4,9 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="bridge">
+ <node name="bridge">
<properties>
- <help>Show specified Bridge interface information</help>
- <completionHelp>
- <path>interfaces bridge</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=bridge</command>
- <children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified bridge interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=bridge</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="bridge">
- <properties>
- <help>Show Bridge interface information</help>
+ <help>Show bridge interface information</help>
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-type=bridge</command>
<children>
@@ -34,6 +16,24 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=bridge</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified bridge interface information</help>
+ <completionHelp>
+ <path>interfaces bridge</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=bridge</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of the specified bridge interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=bridge</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-dummy.xml.in b/op-mode-definitions/show-interfaces-dummy.xml.in
index 18f21e97e..fdffeb96b 100644
--- a/op-mode-definitions/show-interfaces-dummy.xml.in
+++ b/op-mode-definitions/show-interfaces-dummy.xml.in
@@ -4,27 +4,9 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="dummy">
+ <node name="dummy">
<properties>
- <help>Show specified Dummy interface information</help>
- <completionHelp>
- <path>interfaces dummy</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=dummy</command>
- <children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified dummy interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=dummy</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="dummy">
- <properties>
- <help>Show Dummy interface information</help>
+ <help>Show dummy interface information</help>
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-type=dummy</command>
<children>
@@ -34,6 +16,24 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=dummy</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified dummy interface information</help>
+ <completionHelp>
+ <path>interfaces dummy</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=dummy</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of the specified dummy interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=dummy</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-ethernet.xml.in b/op-mode-definitions/show-interfaces-ethernet.xml.in
index 8a23455bf..c6e9a2ec2 100644
--- a/op-mode-definitions/show-interfaces-ethernet.xml.in
+++ b/op-mode-definitions/show-interfaces-ethernet.xml.in
@@ -4,85 +4,84 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="ethernet">
+ <node name="ethernet">
<properties>
<help>Show specified Ethernet interface information</help>
- <completionHelp>
- <path>interfaces ethernet</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=ethernet</command>
- <children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified ethernet interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=ethernet</command>
- </leafNode>
- <leafNode name="identify">
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-type=ethernet</command>
+ <children>
+ <leafNode name="detail">
<properties>
- <help>Visually identify specified ethernet interface</help>
+ <help>Show detailed ethernet interface information</help>
</properties>
- <command>echo "Blinking interface $4 for 30 seconds."; ethtool --identify "$4" 30</command>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=ethernet</command>
</leafNode>
- <node name="physical">
- <properties>
- <help>Show physical device information for specified ethernet interface</help>
- </properties>
- <command>ethtool "$4"; ethtool --show-ring "$4"; ethtool --driver "$4"</command>
+ <virtualTagNode>
+ <properties>
+ <completionHelp>
+ <path>interfaces ethernet</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=ethernet</command>
<children>
- <leafNode name="offload">
+ <leafNode name="brief">
<properties>
- <help>Show physical device offloading capabilities</help>
+ <help>Show summary of the specified ethernet interface information</help>
</properties>
- <command>ethtool --show-features "$4" | sed -e 1d -e '/fixed/d' -e 's/^\t*//g' -e 's/://' | column -t -s' '</command>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=ethernet</command>
</leafNode>
- </children>
- </node>
- <leafNode name="statistics">
- <properties>
- <help>Show physical device statistics for specified ethernet interface</help>
- </properties>
- <command>ethtool --statistics "$4"</command>
- </leafNode>
- <leafNode name="transceiver">
- <properties>
- <help>Show transceiver information from modules (e.g SFP+, QSFP)</help>
- </properties>
- <command>ethtool --module-info "$4"</command>
- </leafNode>
- <tagNode name="vif">
- <properties>
- <help>Show specified virtual network interface (vif) information</help>
- <completionHelp>
- <path>interfaces ethernet ${COMP_WORDS[3]} vif</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4.$6" --intf-type=ethernet</command>
- <children>
- <leafNode name="brief">
+ <leafNode name="identify">
<properties>
- <help>Show summary of specified virtual network interface (vif) information</help>
+ <help>Visually identify specified ethernet interface</help>
</properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4.$6" --intf-type=ethernet</command>
+ <command>echo "Blinking interface $4 for 30 seconds."; ethtool --identify "$4" 30</command>
</leafNode>
+ <node name="physical">
+ <properties>
+ <help>Show physical device information for specified ethernet interface</help>
+ </properties>
+ <command>ethtool "$4"; ethtool --show-ring "$4"; ethtool --driver "$4"</command>
+ <children>
+ <leafNode name="offload">
+ <properties>
+ <help>Show physical device offloading capabilities</help>
+ </properties>
+ <command>ethtool --show-features "$4" | sed -e 1d -e '/fixed/d' -e 's/^\t*//g' -e 's/://' | column -t -s' '</command>
+ </leafNode>
+ </children>
+ </node>
+ <leafNode name="statistics">
+ <properties>
+ <help>Show physical device statistics for specified ethernet interface</help>
+ </properties>
+ <command>ethtool --statistics "$4"</command>
+ </leafNode>
+ <leafNode name="transceiver">
+ <properties>
+ <help>Show transceiver information from modules (e.g SFP+, QSFP)</help>
+ </properties>
+ <command>ethtool --module-info "$4"</command>
+ </leafNode>
+ <tagNode name="vif">
+ <properties>
+ <help>Show specified virtual network interface (vif) information</help>
+ <completionHelp>
+ <path>interfaces ethernet ${COMP_WORDS[3]} vif</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4.$6" --intf-type=ethernet</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of specified virtual network interface (vif) information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4.$6" --intf-type=ethernet</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ #include <include/show-interface-type-event-log.xml.i>
</children>
- </tagNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="ethernet">
- <properties>
- <help>Show Ethernet interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-type=ethernet</command>
- <children>
- <leafNode name="detail">
- <properties>
- <help>Show detailed ethernet interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=ethernet</command>
- </leafNode>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-geneve.xml.in b/op-mode-definitions/show-interfaces-geneve.xml.in
index b5fe84ca7..aaaa34757 100644
--- a/op-mode-definitions/show-interfaces-geneve.xml.in
+++ b/op-mode-definitions/show-interfaces-geneve.xml.in
@@ -4,25 +4,7 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="geneve">
- <properties>
- <help>Show specified GENEVE interface information</help>
- <completionHelp>
- <path>interfaces geneve</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=geneve</command>
- <children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified GENEVE interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=geneve</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="geneve">
+ <node name="geneve">
<properties>
<help>Show GENEVE interface information</help>
</properties>
@@ -34,6 +16,24 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=geneve</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified GENEVE interface information</help>
+ <completionHelp>
+ <path>interfaces geneve</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=geneve</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of the specified GENEVE interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=geneve</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-input.xml.in b/op-mode-definitions/show-interfaces-input.xml.in
index c9856f77f..705b94a1a 100644
--- a/op-mode-definitions/show-interfaces-input.xml.in
+++ b/op-mode-definitions/show-interfaces-input.xml.in
@@ -4,9 +4,23 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="input">
+ <node name="input">
+ <properties>
+ <help>Show input (ifb) interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-type=input</command>
+ <children>
+ <leafNode name="detail">
+ <properties>
+ <help>Show detailed input interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=input</command>
+ </leafNode>
+ </children>
+ </node>
+ <virtualTagNode>
<properties>
- <help>Show specified Input interface information</help>
+ <help>Show specified input interface information</help>
<completionHelp>
<path>interfaces input</path>
</completionHelp>
@@ -21,21 +35,7 @@
</leafNode>
#include <include/show-interface-type-event-log.xml.i>
</children>
- </tagNode>
- <node name="input">
- <properties>
- <help>Show Input (ifb) interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-type=input</command>
- <children>
- <leafNode name="detail">
- <properties>
- <help>Show detailed input interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=input</command>
- </leafNode>
- </children>
- </node>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-l2tpv3.xml.in b/op-mode-definitions/show-interfaces-l2tpv3.xml.in
index 88b73d7d7..3d0345001 100644
--- a/op-mode-definitions/show-interfaces-l2tpv3.xml.in
+++ b/op-mode-definitions/show-interfaces-l2tpv3.xml.in
@@ -4,25 +4,7 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="l2tpv3">
- <properties>
- <help>Show specified L2TPv3 interface information</help>
- <completionHelp>
- <path>interfaces l2tpv3</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=l2tpv3</command>
- <children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified L2TPv3 interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=l2tpv3</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="l2tpv3">
+ <node name="l2tpv3">
<properties>
<help>Show L2TPv3 interface information</help>
</properties>
@@ -34,6 +16,24 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=l2tpv3</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified L2TPv3 interface information</help>
+ <completionHelp>
+ <path>interfaces l2tpv3</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=l2tpv3</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of the specified L2TPv3 interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=l2tpv3</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-loopback.xml.in b/op-mode-definitions/show-interfaces-loopback.xml.in
index 467e1a13d..028d1c079 100644
--- a/op-mode-definitions/show-interfaces-loopback.xml.in
+++ b/op-mode-definitions/show-interfaces-loopback.xml.in
@@ -4,25 +4,7 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="loopback">
- <properties>
- <help>Show specified Loopback interface information</help>
- <completionHelp>
- <path>interfaces loopback</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=loopback</command>
- <children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified Loopback interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=loopback</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="loopback">
+ <node name="loopback">
<properties>
<help>Show Loopback interface information</help>
</properties>
@@ -34,6 +16,24 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=loopback</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified Loopback interface information</help>
+ <completionHelp>
+ <path>interfaces loopback</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=loopback</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of the specified Loopback interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=loopback</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-macsec.xml.in b/op-mode-definitions/show-interfaces-macsec.xml.in
index 640031b77..027c05c63 100644
--- a/op-mode-definitions/show-interfaces-macsec.xml.in
+++ b/op-mode-definitions/show-interfaces-macsec.xml.in
@@ -19,21 +19,21 @@
</properties>
<command>ip -s macsec show</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified MACsec interface information</help>
+ <completionHelp>
+ <path>interfaces macsec</path>
+ </completionHelp>
+ </properties>
+ <command>ip macsec show $4</command>
+ <children>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
- <tagNode name="macsec">
- <properties>
- <help>Show specified MACsec interface information</help>
- <completionHelp>
- <path>interfaces macsec</path>
- </completionHelp>
- </properties>
- <command>ip macsec show $4</command>
- <children>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- </children>
+ </children>
</node>
</children>
</node>
diff --git a/op-mode-definitions/show-interfaces-pppoe.xml.in b/op-mode-definitions/show-interfaces-pppoe.xml.in
index 0904418bf..0e13ecdb8 100644
--- a/op-mode-definitions/show-interfaces-pppoe.xml.in
+++ b/op-mode-definitions/show-interfaces-pppoe.xml.in
@@ -4,34 +4,7 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="pppoe">
- <properties>
- <help>Show specified PPPoE interface information</help>
- <completionHelp>
- <path>interfaces pppoe</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=pppoe</command>
- <children>
- <leafNode name="log">
- <properties>
- <help>Show specified PPPoE interface log</help>
- </properties>
- <command>journalctl --no-hostname --boot --follow --unit "ppp@$4".service</command>
- </leafNode>
- <leafNode name="statistics">
- <properties>
- <help>Show specified PPPoE interface statistics</help>
- <completionHelp>
- <path>interfaces pppoe</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/show_ppp_stats.sh "$4"</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="pppoe">
+ <node name="pppoe">
<properties>
<help>Show PPPoE interface information</help>
</properties>
@@ -43,6 +16,33 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=pppoe</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified PPPoE interface information</help>
+ <completionHelp>
+ <path>interfaces pppoe</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=pppoe</command>
+ <children>
+ <leafNode name="log">
+ <properties>
+ <help>Show specified PPPoE interface log</help>
+ </properties>
+ <command>journalctl --no-hostname --boot --follow --unit "ppp@$4".service</command>
+ </leafNode>
+ <leafNode name="statistics">
+ <properties>
+ <help>Show specified PPPoE interface statistics</help>
+ <completionHelp>
+ <path>interfaces pppoe</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_ppp_stats.sh "$4"</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-pseudo-ethernet.xml.in b/op-mode-definitions/show-interfaces-pseudo-ethernet.xml.in
index a9e4257ce..140e7150d 100644
--- a/op-mode-definitions/show-interfaces-pseudo-ethernet.xml.in
+++ b/op-mode-definitions/show-interfaces-pseudo-ethernet.xml.in
@@ -4,27 +4,9 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="pseudo-ethernet">
+ <node name="pseudo-ethernet">
<properties>
- <help>Show specified Pseudo-Ethernet/MACvlan interface information</help>
- <completionHelp>
- <path>interfaces pseudo-ethernet</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=pseudo-ethernet</command>
- <children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified pseudo-ethernet/MACvlan interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=pseudo-ethernet</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="pseudo-ethernet">
- <properties>
- <help>Show Pseudo-Ethernet/MACvlan interface information</help>
+ <help>Show pseudo-ethernet/MACvlan interface information</help>
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-type=pseudo-ethernet</command>
<children>
@@ -34,6 +16,24 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=pseudo-ethernet</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified pseudo-ethernet/MACvlan interface information</help>
+ <completionHelp>
+ <path>interfaces pseudo-ethernet</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=pseudo-ethernet</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of the specified pseudo-ethernet/MACvlan interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=pseudo-ethernet</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-sstpc.xml.in b/op-mode-definitions/show-interfaces-sstpc.xml.in
index 61451db93..e0a53d9f4 100644
--- a/op-mode-definitions/show-interfaces-sstpc.xml.in
+++ b/op-mode-definitions/show-interfaces-sstpc.xml.in
@@ -4,34 +4,7 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="sstpc">
- <properties>
- <help>Show specified SSTP client interface information</help>
- <completionHelp>
- <path>interfaces sstpc</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=sstpc</command>
- <children>
- <leafNode name="log">
- <properties>
- <help>Show specified SSTP client interface log</help>
- </properties>
- <command>journalctl --no-hostname --boot --follow --unit "ppp@$4".service</command>
- </leafNode>
- <leafNode name="statistics">
- <properties>
- <help>Show specified SSTP client interface statistics</help>
- <completionHelp>
- <path>interfaces sstpc</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/show_ppp_stats.sh "$4"</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="sstpc">
+ <node name="sstpc">
<properties>
<help>Show SSTP client interface information</help>
</properties>
@@ -43,6 +16,33 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=sstpc</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified SSTP client interface information</help>
+ <completionHelp>
+ <path>interfaces sstpc</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=sstpc</command>
+ <children>
+ <leafNode name="log">
+ <properties>
+ <help>Show specified SSTP client interface log</help>
+ </properties>
+ <command>journalctl --no-hostname --boot --follow --unit "ppp@$4".service</command>
+ </leafNode>
+ <leafNode name="statistics">
+ <properties>
+ <help>Show specified SSTP client interface statistics</help>
+ <completionHelp>
+ <path>interfaces sstpc</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_ppp_stats.sh "$4"</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-tunnel.xml.in b/op-mode-definitions/show-interfaces-tunnel.xml.in
index 579b173cb..0707fe763 100644
--- a/op-mode-definitions/show-interfaces-tunnel.xml.in
+++ b/op-mode-definitions/show-interfaces-tunnel.xml.in
@@ -4,27 +4,9 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="tunnel">
+ <node name="tunnel">
<properties>
- <help>Show specified Tunnel interface information</help>
- <completionHelp>
- <path>interfaces tunnel</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=tunnel</command>
- <children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified tunnel interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=tunnel</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="tunnel">
- <properties>
- <help>Show Tunnel interface information</help>
+ <help>Show tunnel interface information</help>
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-type=tunnel</command>
<children>
@@ -34,6 +16,24 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=tunnel</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified tunnel interface information</help>
+ <completionHelp>
+ <path>interfaces tunnel</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=tunnel</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of the specified tunnel interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=tunnel</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-virtual-ethernet.xml.in b/op-mode-definitions/show-interfaces-virtual-ethernet.xml.in
index 4112a17af..20e1754e7 100644
--- a/op-mode-definitions/show-interfaces-virtual-ethernet.xml.in
+++ b/op-mode-definitions/show-interfaces-virtual-ethernet.xml.in
@@ -4,25 +4,7 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="virtual-ethernet">
- <properties>
- <help>Show specified virtual-ethernet interface information</help>
- <completionHelp>
- <path>interfaces virtual-ethernet</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=virtual-ethernet</command>
- <children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified virtual-ethernet interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=virtual-ethernet</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="virtual-ethernet">
+ <node name="virtual-ethernet">
<properties>
<help>Show virtual-ethernet interface information</help>
</properties>
@@ -34,6 +16,24 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=virtual-ethernet</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified virtual-ethernet interface information</help>
+ <completionHelp>
+ <path>interfaces virtual-ethernet</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=virtual-ethernet</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of the specified virtual-ethernet interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=virtual-ethernet</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-vti.xml.in b/op-mode-definitions/show-interfaces-vti.xml.in
index d13b3e7cc..460481bde 100644
--- a/op-mode-definitions/show-interfaces-vti.xml.in
+++ b/op-mode-definitions/show-interfaces-vti.xml.in
@@ -4,25 +4,7 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="vti">
- <properties>
- <help>Show specified VTI interface information</help>
- <completionHelp>
- <path>interfaces vti</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=vti</command>
- <children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified vti interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=vti</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="vti">
+ <node name="vti">
<properties>
<help>Show VTI interface information</help>
</properties>
@@ -34,6 +16,24 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=vti</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified VTI interface information</help>
+ <completionHelp>
+ <path>interfaces vti</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=vti</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of the specified vti interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=vti</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-vxlan.xml.in b/op-mode-definitions/show-interfaces-vxlan.xml.in
index 89c8d075b..4623e9371 100644
--- a/op-mode-definitions/show-interfaces-vxlan.xml.in
+++ b/op-mode-definitions/show-interfaces-vxlan.xml.in
@@ -4,25 +4,7 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="vxlan">
- <properties>
- <help>Show specified VXLAN interface information</help>
- <completionHelp>
- <path>interfaces vxlan</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=vxlan</command>
- <children>
- <leafNode name="brief">
- <properties>
- <help>Show summary of the specified VXLAN interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=vxlan</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="vxlan">
+ <node name="vxlan">
<properties>
<help>Show VXLAN interface information</help>
</properties>
@@ -34,6 +16,24 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=vxlan</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified VXLAN interface information</help>
+ <completionHelp>
+ <path>interfaces vxlan</path>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=vxlan</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of the specified VXLAN interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=vxlan</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-wireguard.xml.in b/op-mode-definitions/show-interfaces-wireguard.xml.in
index 6abca3a27..9457953ef 100644
--- a/op-mode-definitions/show-interfaces-wireguard.xml.in
+++ b/op-mode-definitions/show-interfaces-wireguard.xml.in
@@ -4,48 +4,6 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="wireguard">
- <properties>
- <help>Show specified WireGuard interface information</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_interfaces --type wireguard</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=wireguard</command>
- <children>
- <leafNode name="allowed-ips">
- <properties>
- <help>Show all IP addresses allowed for the specified interface</help>
- </properties>
- <command>wg show "$4" allowed-ips</command>
- </leafNode>
- <leafNode name="endpoints">
- <properties>
- <help>Show all endpoints for the specified interface</help>
- </properties>
- <command>wg show "$4" endpoints</command>
- </leafNode>
- <leafNode name="peers">
- <properties>
- <help>Show all peer IDs for the specified interface</help>
- </properties>
- <command>wg show "$4" peers</command>
- </leafNode>
- <leafNode name="public-key">
- <properties>
- <help>Show interface public-key</help>
- </properties>
- <command>wg show "$4" public-key</command>
- </leafNode>
- <leafNode name="summary">
- <properties>
- <help>Shows current configuration and device information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces_wireguard.py show_summary --intf-name="$4"</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
<node name="wireguard">
<properties>
<help>Show WireGuard interface information</help>
@@ -58,6 +16,48 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=wireguard</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified WireGuard interface information</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type wireguard</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=wireguard</command>
+ <children>
+ <leafNode name="allowed-ips">
+ <properties>
+ <help>Show all IP addresses allowed for the specified interface</help>
+ </properties>
+ <command>wg show "$4" allowed-ips</command>
+ </leafNode>
+ <leafNode name="endpoints">
+ <properties>
+ <help>Show all endpoints for the specified interface</help>
+ </properties>
+ <command>wg show "$4" endpoints</command>
+ </leafNode>
+ <leafNode name="peers">
+ <properties>
+ <help>Show all peer IDs for the specified interface</help>
+ </properties>
+ <command>wg show "$4" peers</command>
+ </leafNode>
+ <leafNode name="public-key">
+ <properties>
+ <help>Show interface public-key</help>
+ </properties>
+ <command>wg show "$4" public-key</command>
+ </leafNode>
+ <leafNode name="summary">
+ <properties>
+ <help>Shows current configuration and device information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces_wireguard.py show_summary --intf-name="$4"</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces-wireless.xml.in b/op-mode-definitions/show-interfaces-wireless.xml.in
index 16ea33d82..55e23adf5 100644
--- a/op-mode-definitions/show-interfaces-wireless.xml.in
+++ b/op-mode-definitions/show-interfaces-wireless.xml.in
@@ -6,7 +6,7 @@
<children>
<node name="wireless">
<properties>
- <help>Show Wireless (WLAN) interface information</help>
+ <help>Show wireless (WLAN) interface information</help>
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-type=wireless</command>
<children>
@@ -22,61 +22,61 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces_wireless.py show_info</command>
</leafNode>
- </children>
- </node>
- <tagNode name="wireless">
- <properties>
- <help>Show specified wireless interface information</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_interfaces --type wireless</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=wireless</command>
- <children>
- <leafNode name="brief">
+ <virtualTagNode>
<properties>
- <help>Show brief summary of the specified wireless interface</help>
+ <help>Show specified wireless interface information</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type wireless</script>
+ </completionHelp>
</properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=wireless</command>
- </leafNode>
- <node name="scan">
- <properties>
- <help>Scan for networks via specified wireless interface</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces_wireless.py show_scan --intf-name="$4"</command>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=wireless</command>
<children>
- <leafNode name="detail">
+ <leafNode name="brief">
<properties>
- <help>Show detailed scan results</help>
+ <help>Show brief summary of the specified wireless interface</help>
</properties>
- <command>/sbin/iw dev "$4" scan ap-force</command>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4" --intf-type=wireless</command>
</leafNode>
- </children>
- </node>
- <leafNode name="stations">
- <properties>
- <help>Show specified Wireless interface information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces_wireless.py show_stations --intf-name="$4"</command>
- </leafNode>
- <tagNode name="vif">
- <properties>
- <help>Show specified virtual network interface (vif) information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4.$6" --intf-type=wireless</command>
- <children>
- <leafNode name="brief">
+ <node name="scan">
<properties>
- <help>Show summary of specified virtual network interface (vif) information</help>
+ <help>Scan for networks via specified wireless interface</help>
</properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4.$6" --intf-type=wireless</command>
+ <command>${vyos_op_scripts_dir}/interfaces_wireless.py show_scan --intf-name="$4"</command>
+ <children>
+ <leafNode name="detail">
+ <properties>
+ <help>Show detailed scan results</help>
+ </properties>
+ <command>/sbin/iw dev "$4" scan ap-force</command>
+ </leafNode>
+ </children>
+ </node>
+ <leafNode name="stations">
+ <properties>
+ <help>Show specified wireless interface information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces_wireless.py show_stations --intf-name="$4"</command>
</leafNode>
+ <tagNode name="vif">
+ <properties>
+ <help>Show specified virtual network interface (vif) information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4.$6" --intf-type=wireless</command>
+ <children>
+ <leafNode name="brief">
+ <properties>
+ <help>Show summary of specified virtual network interface (vif) information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_summary --intf-name="$4.$6" --intf-type=wireless</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ #include <include/show-interface-type-event-log.xml.i>
</children>
- </tagNode>
- #include <include/show-interface-type-event-log.xml.i>
+ </virtualTagNode>
</children>
- </tagNode>
- </children>
+ </node>
+ </children>
</node>
</children>
</node>
diff --git a/op-mode-definitions/show-interfaces-wwan.xml.in b/op-mode-definitions/show-interfaces-wwan.xml.in
index 87301d6c9..6616de9dc 100644
--- a/op-mode-definitions/show-interfaces-wwan.xml.in
+++ b/op-mode-definitions/show-interfaces-wwan.xml.in
@@ -4,86 +4,7 @@
<children>
<node name="interfaces">
<children>
- <tagNode name="wwan">
- <properties>
- <help>Show specified Wireless Wire Area Network (WWAN) interface information</help>
- <completionHelp>
- <path>interfaces wwan</path>
- <script>cd /sys/class/net; ls -d wwan*</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=wirelessmodem</command>
- <children>
- <leafNode name="capabilities">
- <properties>
- <help>Show WWAN module capabilities</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --capabilities</command>
- </leafNode>
- <leafNode name="firmware">
- <properties>
- <help>Show WWAN module firmware</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --firmware</command>
- </leafNode>
- <leafNode name="imei">
- <properties>
- <help>Show WWAN module IMEI/ESN/MEID</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --imei</command>
- </leafNode>
- <leafNode name="imsi">
- <properties>
- <help>Show WWAN module IMSI</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --imsi</command>
- </leafNode>
- <leafNode name="model">
- <properties>
- <help>Show WWAN module manufacturer</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --model</command>
- </leafNode>
- <leafNode name="msisdn">
- <properties>
- <help>Show WWAN module MSISDN</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --msisdn</command>
- </leafNode>
- <leafNode name="revision">
- <properties>
- <help>Show WWAN module revision</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --revision</command>
- </leafNode>
- <leafNode name="signal">
- <properties>
- <help>Show WWAN module RF signal info</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --signal</command>
- </leafNode>
- <leafNode name="sim">
- <properties>
- <help>Show WWAN module connected SIM card information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --sim</command>
- </leafNode>
- <leafNode name="detail">
- <properties>
- <help>Show WWAN module detailed information summary</help>
- </properties>
- <command>if cli-shell-api existsActive interfaces wwan $4; then mmcli --modem ${4#wwan}; else echo "Interface \"$4\" unconfigured!"; fi</command>
- </leafNode>
- <leafNode name="log">
- <properties>
- <help>Show interface log for specified interface</help>
- </properties>
- <command>echo not implemented</command>
- </leafNode>
- #include <include/show-interface-type-event-log.xml.i>
- </children>
- </tagNode>
- <node name="wwan">
+ <node name="wwan">
<properties>
<help>Show Wireless Modem (WWAN) interface information</help>
</properties>
@@ -95,6 +16,85 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show --intf-type=wwan</command>
</leafNode>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified Wireless Wire Area Network (WWAN) interface information</help>
+ <completionHelp>
+ <path>interfaces wwan</path>
+ <script>cd /sys/class/net; ls -d wwan*</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show --intf-name="$4" --intf-type=wirelessmodem</command>
+ <children>
+ <leafNode name="capabilities">
+ <properties>
+ <help>Show WWAN module capabilities</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --capabilities</command>
+ </leafNode>
+ <leafNode name="firmware">
+ <properties>
+ <help>Show WWAN module firmware</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --firmware</command>
+ </leafNode>
+ <leafNode name="imei">
+ <properties>
+ <help>Show WWAN module IMEI/ESN/MEID</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --imei</command>
+ </leafNode>
+ <leafNode name="imsi">
+ <properties>
+ <help>Show WWAN module IMSI</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --imsi</command>
+ </leafNode>
+ <leafNode name="model">
+ <properties>
+ <help>Show WWAN module manufacturer</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --model</command>
+ </leafNode>
+ <leafNode name="msisdn">
+ <properties>
+ <help>Show WWAN module MSISDN</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --msisdn</command>
+ </leafNode>
+ <leafNode name="revision">
+ <properties>
+ <help>Show WWAN module revision</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --revision</command>
+ </leafNode>
+ <leafNode name="signal">
+ <properties>
+ <help>Show WWAN module RF signal info</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --signal</command>
+ </leafNode>
+ <leafNode name="sim">
+ <properties>
+ <help>Show WWAN module connected SIM card information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_wwan.py --interface=$4 --sim</command>
+ </leafNode>
+ <leafNode name="detail">
+ <properties>
+ <help>Show WWAN module detailed information summary</help>
+ </properties>
+ <command>if cli-shell-api existsActive interfaces wwan $4; then mmcli --modem ${4#wwan}; else echo "Interface \"$4\" unconfigured!"; fi</command>
+ </leafNode>
+ <leafNode name="log">
+ <properties>
+ <help>Show interface log for specified interface</help>
+ </properties>
+ <command>echo not implemented</command>
+ </leafNode>
+ #include <include/show-interface-type-event-log.xml.i>
+ </children>
+ </virtualTagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-interfaces.xml.in b/op-mode-definitions/show-interfaces.xml.in
index 2d94080c7..e2d7d3dd3 100644
--- a/op-mode-definitions/show-interfaces.xml.in
+++ b/op-mode-definitions/show-interfaces.xml.in
@@ -26,34 +26,34 @@
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show_summary</command>
</leafNode>
- <tagNode name="kernel">
- <properties>
- <completionHelp>
- <script>ip -j link show | jq -r '.[].ifname'</script>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_kernel --intf-name=$4</command>
- <children>
- <leafNode name="detail">
- <properties>
- <help>Show system interface in JSON format</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_kernel --intf-name=$4 --detail</command>
- </leafNode>
- <leafNode name="json">
- <properties>
- <help>Show system interface in JSON format</help>
- </properties>
- <command>${vyos_op_scripts_dir}/interfaces.py show_kernel --intf-name=$4 --raw</command>
- </leafNode>
- </children>
- </tagNode>
<node name="kernel">
<properties>
<help>Show all interfaces on this system</help>
</properties>
<command>${vyos_op_scripts_dir}/interfaces.py show_kernel</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <completionHelp>
+ <script>ip -j link show | jq -r '.[].ifname'</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_kernel --intf-name=$4</command>
+ <children>
+ <leafNode name="detail">
+ <properties>
+ <help>Show system interface in JSON format</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_kernel --intf-name=$4 --detail</command>
+ </leafNode>
+ <leafNode name="json">
+ <properties>
+ <help>Show system interface in JSON format</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/interfaces.py show_kernel --intf-name=$4 --raw</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<leafNode name="detail">
<properties>
<help>Show system interface in JSON format</help>
diff --git a/op-mode-definitions/show-ip-bgp.xml.in b/op-mode-definitions/show-ip-bgp.xml.in
index ecef320bf..f2b98582e 100644
--- a/op-mode-definitions/show-ip-bgp.xml.in
+++ b/op-mode-definitions/show-ip-bgp.xml.in
@@ -11,12 +11,6 @@
<command>vtysh -c "show ip bgp"</command>
<children>
#include <include/bgp/show-ip-bgp-common.xml.i>
- <leafNode name="vrf">
- <properties>
- <help>Show BGP VRF information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
<tagNode name="vrf">
<properties>
<help>Show BGP VRF related information</help>
@@ -25,6 +19,10 @@
<list>all</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Show BGP VRF information</help>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </standalone>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
#include <include/bgp/show-ip-bgp-common.xml.i>
diff --git a/op-mode-definitions/show-ip-route.xml.in b/op-mode-definitions/show-ip-route.xml.in
index 37279d3d2..bbac433c7 100644
--- a/op-mode-definitions/show-ip-route.xml.in
+++ b/op-mode-definitions/show-ip-route.xml.in
@@ -13,13 +13,24 @@
</properties>
<command>vtysh -c "show ip route"</command>
<children>
- #include <include/show-route-bgp.xml.i>
- <node name="cache">
+ <virtualTagNode>
<properties>
- <help>Show kernel route cache</help>
+ <help>Show IP routes of 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>ip -s route list cache</command>
- </node>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ <leafNode name="longer-prefixes">
+ <properties>
+ <help>Show longer prefixes of routes for specified prefix</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
+ #include <include/show-route-bgp.xml.i>
<tagNode name="cache">
<properties>
<help>Show kernel route cache for a given route</help>
@@ -27,15 +38,13 @@
<list>&lt;x.x.x.x&gt; &lt;x.x.x.x/x&gt;</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Show kernel route cache</help>
+ <command>ip -s route list cache</command>
+ </standalone>
<command>ip -s route list cache $5</command>
</tagNode>
#include <include/show-route-connected.xml.i>
- <node name="forward">
- <properties>
- <help>Show kernel route table</help>
- </properties>
- <command>ip route list</command>
- </node>
<tagNode name="forward">
<properties>
<help>Show kernel route table for a given route</help>
@@ -43,6 +52,10 @@
<list>&lt;x.x.x.x&gt; &lt;x.x.x.x/x&gt;</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Show kernel route table</help>
+ <command>ip route list</command>
+ </standalone>
<command>ip -s route list $5</command>
</tagNode>
#include <include/show-route-isis.xml.i>
@@ -93,7 +106,7 @@
#include <include/show-route-static.xml.i>
#include <include/show-route-supernets-only.xml.i>
#include <include/show-route-tag.xml.i>
- <node name="node.tag">
+ <virtualTagNode>
<properties>
<help>Show IP routes of specified IP address or prefix</help>
<completionHelp>
@@ -109,28 +122,11 @@
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</leafNode>
</children>
- </node>
+ </virtualTagNode>
</children>
</tagNode>
</children>
</node>
- <tagNode name="route">
- <properties>
- <help>Show IP routes of 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>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <leafNode name="longer-prefixes">
- <properties>
- <help>Show longer prefixes of routes for specified prefix</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
- </children>
- </tagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-ipv6-prefix-list.xml.in b/op-mode-definitions/show-ipv6-prefix-list.xml.in
index 9e9df5b29..db1a2754e 100644
--- a/op-mode-definitions/show-ipv6-prefix-list.xml.in
+++ b/op-mode-definitions/show-ipv6-prefix-list.xml.in
@@ -13,6 +13,50 @@
</properties>
<command>vtysh -c "show ipv6 prefix-list"</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified IPv6 prefix-list</help>
+ <completionHelp>
+ <list>WORD</list>
+ </completionHelp>
+ </properties>
+ <command>vtysh -c "show ipv6 prefix-list $4"</command>
+ <children>
+ <virtualTagNode>
+ <properties>
+ <help>Show select prefix of specified IPv6 prefix-list</help>
+ <completionHelp>
+ <list>&lt;h:h:h:h:h:h:h:h/x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>vtysh -c "show ipv6 prefix-list $4 $5"</command>
+ <children>
+ <node name="first-match">
+ <properties>
+ <help>Show first-match from select prefix of named IPv6 prefix-list</help>
+ </properties>
+ <command>vtysh -c "show ipv6 prefix-list $4 $5 first-match"</command>
+ </node>
+ <node name="longer">
+ <properties>
+ <help>Show longer match of select prefix from named IPv6 prefix-list</help>
+ </properties>
+ <command>vtysh -c "show ipv6 prefix-list $4 $5 longer"</command>
+ </node>
+ </children>
+ </virtualTagNode>
+ <tagNode name="seq">
+ <properties>
+ <help>Show specified sequence from specified IPv6 prefix-list</help>
+ </properties>
+ <standalone>
+ <help>Show specified sequence from specified IPv6 prefix-list</help>
+ <command>vtysh -c "show ipv6 prefix-list $4 seq"</command>
+ </standalone>
+ <command>vtysh -c "show ipv6 prefix-list $4 seq $6"</command>
+ </tagNode>
+ </children>
+ </virtualTagNode>
<tagNode name="detail">
<properties>
<help>Show detail of specified IPv6 prefix-list</help>
@@ -35,52 +79,6 @@
</tagNode>
</children>
</node>
- <tagNode name="prefix-list">
- <properties>
- <help>Show specified IPv6 prefix-list</help>
- <completionHelp>
- <list>WORD</list>
- </completionHelp>
- </properties>
- <command>vtysh -c "show ipv6 prefix-list $4"</command>
- <children>
- <node name="node.tag">
- <properties>
- <help>Show select prefix of specified IPv6 prefix-list</help>
- <completionHelp>
- <list>&lt;h:h:h:h:h:h:h:h/x&gt;</list>
- </completionHelp>
- </properties>
- <command>vtysh -c "show ipv6 prefix-list $4 $5"</command>
- <children>
- <node name="first-match">
- <properties>
- <help>Show first-match from select prefix of named IPv6 prefix-list</help>
- </properties>
- <command>vtysh -c "show ipv6 prefix-list $4 $5 first-match"</command>
- </node>
- <node name="longer">
- <properties>
- <help>Show longer match of select prefix from named IPv6 prefix-list</help>
- </properties>
- <command>vtysh -c "show ipv6 prefix-list $4 $5 longer"</command>
- </node>
- </children>
- </node>
- <node name="seq">
- <properties>
- <help>Show specified sequence from specified IPv6 prefix-list</help>
- </properties>
- <command>vtysh -c "show ipv6 prefix-list $4 seq"</command>
- </node>
- <tagNode name="seq">
- <properties>
- <help>Show specified sequence from specified IPv6 prefix-list</help>
- </properties>
- <command>vtysh -c "show ipv6 prefix-list $4 seq $6"</command>
- </tagNode>
- </children>
- </tagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-ipv6-route.xml.in b/op-mode-definitions/show-ipv6-route.xml.in
index f68a94971..8690ed710 100644
--- a/op-mode-definitions/show-ipv6-route.xml.in
+++ b/op-mode-definitions/show-ipv6-route.xml.in
@@ -13,13 +13,24 @@
</properties>
<command>vtysh -c "show ipv6 route"</command>
<children>
- #include <include/show-route-bgp.xml.i>
- <node name="cache">
+ <virtualTagNode>
<properties>
- <help>Show kernel IPv6 route cache</help>
+ <help>Show IPv6 routes of given 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>ip -s -f inet6 route list cache</command>
- </node>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ <children>
+ <node name="longer-prefixes">
+ <properties>
+ <help>Show longer prefixes of routes for given prefix</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </node>
+ </children>
+ </virtualTagNode>
+ #include <include/show-route-bgp.xml.i>
<tagNode name="cache">
<properties>
<help>Show kernel IPv6 route cache for a given route</help>
@@ -27,15 +38,13 @@
<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>
+ <standalone>
+ <help>Show kernel IPv6 route cache</help>
+ <command>ip -s -f inet6 route list cache</command>
+ </standalone>
<command>ip -s -f inet6 route list cache $5</command>
</tagNode>
#include <include/show-route-connected.xml.i>
- <node name="forward">
- <properties>
- <help>Show kernel IPv6 route table</help>
- </properties>
- <command>ip -f inet6 route list</command>
- </node>
<tagNode name="forward">
<properties>
<help>Show kernel IPv6 route table for a given route</help>
@@ -43,6 +52,10 @@
<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>
+ <standalone>
+ <help>Show kernel IPv6 route table</help>
+ <command>ip -f inet6 route list</command>
+ </standalone>
<command>ip -s -f inet6 route list $5</command>
</tagNode>
#include <include/show-route-isis.xml.i>
@@ -83,7 +96,7 @@
</properties>
<command>${vyos_op_scripts_dir}/route.py show_summary --family inet6 --vrf $5</command>
</node>
- <node name="node.tag">
+ <virtualTagNode>
<properties>
<help>Show IPv6 routes of given address or prefix</help>
<completionHelp>
@@ -99,7 +112,7 @@
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</node>
</children>
- </node>
+ </virtualTagNode>
#include <include/show-route-bgp.xml.i>
#include <include/show-route-connected.xml.i>
#include <include/show-route-isis.xml.i>
@@ -114,23 +127,6 @@
</tagNode>
</children>
</node>
- <tagNode name="route">
- <properties>
- <help>Show IPv6 routes of given 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>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- <children>
- <node name="longer-prefixes">
- <properties>
- <help>Show longer prefixes of routes for given prefix</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </node>
- </children>
- </tagNode>
</children>
</node>
</children>
diff --git a/op-mode-definitions/show-log.xml.in b/op-mode-definitions/show-log.xml.in
index d1320bc00..499e7f84b 100755
--- a/op-mode-definitions/show-log.xml.in
+++ b/op-mode-definitions/show-log.xml.in
@@ -5,21 +5,21 @@
<help>Show system information</help>
</properties>
<children>
- <tagNode name="log">
- <properties>
- <help>Show last number of messages in master logging buffer</help>
- <completionHelp>
- <list>&lt;1-9999&gt;</list>
- </completionHelp>
- </properties>
- <command>if ${vyos_validators_dir}/numeric --range 1-9999 "$3"; then journalctl --no-hostname --boot --lines "$3"; fi</command>
- </tagNode>
- <node name="log">
+ <node name="log">
<properties>
<help>Show contents of current master logging buffer</help>
</properties>
<command>journalctl --no-hostname --boot</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Show last number of messages in master logging buffer</help>
+ <completionHelp>
+ <list>&lt;1-9999&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>if ${vyos_validators_dir}/numeric --range 1-9999 "$3"; then journalctl --no-hostname --boot --lines "$3"; fi</command>
+ </virtualTagNode>
<leafNode name="audit">
<properties>
<help>Show audit logs</help>
@@ -858,14 +858,12 @@
<list>&lt;NUMBER&gt;</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Show last 10 lines of /var/log/messages file</help>
+ <command>tail -n 10 /var/log/messages</command>
+ </standalone>
<command>tail -n "$4" /var/log/messages | ${VYATTA_PAGER:-cat}</command>
</tagNode>
- <node name="tail">
- <properties>
- <help>Show last 10 lines of /var/log/messages file</help>
- </properties>
- <command>tail -n 10 /var/log/messages</command>
- </node>
<leafNode name="vpn">
<properties>
<help>Show log for ALL Virtual Private Network services</help>
diff --git a/op-mode-definitions/show-mpls.xml.in b/op-mode-definitions/show-mpls.xml.in
index 86f6f1bcc..43fa26b64 100644
--- a/op-mode-definitions/show-mpls.xml.in
+++ b/op-mode-definitions/show-mpls.xml.in
@@ -18,6 +18,23 @@
</properties>
<command>vtysh -c "show mpls ldp binding"</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>LDP forwarding equivalence class</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x/x&gt; &lt;h:h:h:h:h:h:h:h/h&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>vtysh -c "show mpls ldp binding $5"</command>
+ <children>
+ <leafNode name="detail">
+ <properties>
+ <help>Show detailed information</help>
+ </properties>
+ <command>vtysh -c "show mpls ldp binding $5 detail"</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
<node name="detail">
<properties>
<help>Show detailed information</help>
@@ -116,23 +133,6 @@
</tagNode>
</children>
</node>
- <tagNode name="binding">
- <properties>
- <help>LDP forwarding equivalence class</help>
- <completionHelp>
- <list>&lt;x.x.x.x/x&gt; &lt;h:h:h:h:h:h:h:h/h&gt;</list>
- </completionHelp>
- </properties>
- <command>vtysh -c "show mpls ldp binding $5"</command>
- <children>
- <leafNode name="detail">
- <properties>
- <help>Show detailed information</help>
- </properties>
- <command>vtysh -c "show mpls ldp binding $5 detail"</command>
- </leafNode>
- </children>
- </tagNode>
<node name="discovery">
<properties>
<help>Discovery hello information</help>
@@ -171,32 +171,32 @@
</properties>
<command>vtysh -c "show mpls ldp neighbor capabilities"</command>
</leafNode>
- </children>
- </node>
- <tagNode name="neighbor">
- <properties>
- <help>LDP neighbor</help>
- <completionHelp>
- <list>&lt;x.x.x.x&gt; &lt;h:h:h:h:h:h:h:h&gt;</list>
- <script>vtysh -c "show mpls ldp neighbor" | awk '{print $2}' | egrep -v "ID"</script>
- </completionHelp>
- </properties>
- <command>vtysh -c "show mpls ldp neighbor $5"</command>
- <children>
- <leafNode name="detail">
- <properties>
- <help>Show detailed information</help>
- </properties>
- <command>vtysh -c "show mpls ldp neighbor $5 detail"</command>
- </leafNode>
- <leafNode name="capabilities">
+ <virtualTagNode>
<properties>
- <help>Show neighbor capability information</help>
+ <help>LDP neighbor</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt; &lt;h:h:h:h:h:h:h:h&gt;</list>
+ <script>vtysh -c "show mpls ldp neighbor" | awk '{print $2}' | egrep -v "ID"</script>
+ </completionHelp>
</properties>
- <command>vtysh -c "show mpls ldp neighbor $5 capabilities"</command>
- </leafNode>
+ <command>vtysh -c "show mpls ldp neighbor $5"</command>
+ <children>
+ <leafNode name="detail">
+ <properties>
+ <help>Show detailed information</help>
+ </properties>
+ <command>vtysh -c "show mpls ldp neighbor $5 detail"</command>
+ </leafNode>
+ <leafNode name="capabilities">
+ <properties>
+ <help>Show neighbor capability information</help>
+ </properties>
+ <command>vtysh -c "show mpls ldp neighbor $5 capabilities"</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
</children>
- </tagNode>
+ </node>
</children>
</node>
<node name="pseudowire">
diff --git a/op-mode-definitions/show-openfabric.xml.in b/op-mode-definitions/show-openfabric.xml.in
index 2f489866e..124b9616e 100644
--- a/op-mode-definitions/show-openfabric.xml.in
+++ b/op-mode-definitions/show-openfabric.xml.in
@@ -24,11 +24,11 @@
</completionHelp>
</properties>
<children>
+ #include <include/vtysh-generic-interface-virtualTagNode.xml.i>
#include <include/vtysh-generic-detail.xml.i>
</children>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</node>
- #include <include/vtysh-generic-interface-tagNode.xml.i>
<node name="neighbor">
<properties>
<help>Show OpenFabric neighbor adjacencies</help>
diff --git a/op-mode-definitions/show-vrf.xml.in b/op-mode-definitions/show-vrf.xml.in
index c18649844..574e92bfe 100644
--- a/op-mode-definitions/show-vrf.xml.in
+++ b/op-mode-definitions/show-vrf.xml.in
@@ -14,31 +14,31 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
</leafNode>
- </children>
- </node>
- <tagNode name="vrf">
- <properties>
- <help>Show information on specific VRF instance</help>
- <completionHelp>
- <path>vrf name</path>
- </completionHelp>
- </properties>
- <command>${vyos_op_scripts_dir}/vrf.py show --name="$3"</command>
- <children>
- <leafNode name="processes">
- <properties>
- <help>Shows all process ids associated with VRF</help>
- </properties>
- <command>ip vrf pids "$3"</command>
- </leafNode>
- <leafNode name="vni">
+ <virtualTagNode>
<properties>
- <help>Show VXLAN VNI association</help>
+ <help>Show information on specific VRF instance</help>
+ <completionHelp>
+ <path>vrf name</path>
+ </completionHelp>
</properties>
- <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
- </leafNode>
+ <command>${vyos_op_scripts_dir}/vrf.py show --name="$3"</command>
+ <children>
+ <leafNode name="processes">
+ <properties>
+ <help>Shows all process ids associated with VRF</help>
+ </properties>
+ <command>ip vrf pids "$3"</command>
+ </leafNode>
+ <leafNode name="vni">
+ <properties>
+ <help>Show VXLAN VNI association</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
+ </leafNode>
+ </children>
+ </virtualTagNode>
</children>
- </tagNode>
- </children>
+ </node>
+ </children>
</node>
</interfaceDefinition>
diff --git a/op-mode-definitions/terminal.xml.in b/op-mode-definitions/terminal.xml.in
index 25b0dc046..163159846 100644
--- a/op-mode-definitions/terminal.xml.in
+++ b/op-mode-definitions/terminal.xml.in
@@ -74,12 +74,6 @@
</tagNode>
</children>
</node>
- <node name="pager">
- <properties>
- <help>Set terminal pager to default (less)</help>
- </properties>
- <command>VYATTA_PAGER=${_vyatta_default_pager}</command>
- </node>
<tagNode name="pager">
<properties>
<help>Set terminal pager</help>
@@ -87,6 +81,10 @@
<list>&lt;PROGRAM&gt;</list>
</completionHelp>
</properties>
+ <standalone>
+ <help>Set terminal pager to default (less)</help>
+ <command>VYATTA_PAGER=${_vyatta_default_pager}</command>
+ </standalone>
<command>VYATTA_PAGER=$4</command>
</tagNode>
<tagNode name="length">
diff --git a/op-mode-definitions/traceroute.xml.in b/op-mode-definitions/traceroute.xml.in
index aba0f45e3..9976bdd97 100644
--- a/op-mode-definitions/traceroute.xml.in
+++ b/op-mode-definitions/traceroute.xml.in
@@ -9,7 +9,7 @@
</properties>
<command>${vyos_op_scripts_dir}/traceroute.py ${@:2}</command>
<children>
- <leafNode name="node.tag">
+ <virtualTagNode>
<properties>
<help>Traceroute options</help>
<completionHelp>
@@ -17,7 +17,7 @@
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/traceroute.py ${@:2}</command>
- </leafNode>
+ </virtualTagNode>
</children>
</tagNode>
</interfaceDefinition>
diff --git a/op-mode-definitions/traffic-dump.xml.in b/op-mode-definitions/traffic-dump.xml.in
index e86e69736..a145742e9 100644
--- a/op-mode-definitions/traffic-dump.xml.in
+++ b/op-mode-definitions/traffic-dump.xml.in
@@ -16,7 +16,7 @@
</completionHelp>
</properties>
<children>
- <leafNode name="node.tag">
+ <virtualTagNode>
<properties>
<help>Traffic capture options</help>
<completionHelp>
@@ -24,7 +24,7 @@
</completionHelp>
</properties>
<command>${vyos_op_scripts_dir}/tcpdump.py "${@:4}"</command>
- </leafNode>
+ </virtualTagNode>
</children>
</tagNode>
</children>
diff --git a/op-mode-definitions/vrrp.xml.in b/op-mode-definitions/vrrp.xml.in
index ae204602f..b2b2886c0 100644
--- a/op-mode-definitions/vrrp.xml.in
+++ b/op-mode-definitions/vrrp.xml.in
@@ -2,31 +2,31 @@
<interfaceDefinition>
<node name="show">
<children>
- <tagNode name="vrrp">
- <properties>
- <help>Show specified VRRP (Virtual Router Redundancy Protocol) group information</help>
- </properties>
- <children>
- <node name="statistics">
- <properties>
- <help>Show VRRP statistics</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vrrp.py show_statistics --group-name="$3"</command>
- </node>
- <node name="detail">
- <properties>
- <help>Show detailed VRRP state information</help>
- </properties>
- <command>${vyos_op_scripts_dir}/vrrp.py show_detail --group-name="$3"</command>
- </node>
- </children>
- </tagNode>
<node name="vrrp">
<properties>
<help>Show VRRP (Virtual Router Redundancy Protocol) information</help>
</properties>
<command>${vyos_op_scripts_dir}/vrrp.py show_summary</command>
<children>
+ <virtualTagNode>
+ <properties>
+ <help>Show specified VRRP (Virtual Router Redundancy Protocol) group information</help>
+ </properties>
+ <children>
+ <node name="statistics">
+ <properties>
+ <help>Show VRRP statistics</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vrrp.py show_statistics --group-name="$3"</command>
+ </node>
+ <node name="detail">
+ <properties>
+ <help>Show detailed VRRP state information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/vrrp.py show_detail --group-name="$3"</command>
+ </node>
+ </children>
+ </virtualTagNode>
<node name="statistics">
<properties>
<help>Show VRRP statistics</help>
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 000000000..76597715e
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,2 @@
+[tool.black]
+skip-string-normalization = true \ No newline at end of file
diff --git a/python/vyos/firewall.py b/python/vyos/firewall.py
index 64022db84..0643107a9 100755
--- a/python/vyos/firewall.py
+++ b/python/vyos/firewall.py
@@ -361,7 +361,7 @@ def parse_rule(rule_conf, hook, fw_name, rule_id, ip_name):
if iiface[0] == '!':
operator = '!='
iiface = iiface[1:]
- output.append(f'iifname {operator} {{{iiface}}}')
+ output.append(f'iifname {operator} {{"{iiface}"}}')
elif 'group' in rule_conf['inbound_interface']:
iiface = rule_conf['inbound_interface']['group']
if iiface[0] == '!':
@@ -376,7 +376,7 @@ def parse_rule(rule_conf, hook, fw_name, rule_id, ip_name):
if oiface[0] == '!':
operator = '!='
oiface = oiface[1:]
- output.append(f'oifname {operator} {{{oiface}}}')
+ output.append(f'oifname {operator} {{"{oiface}"}}')
elif 'group' in rule_conf['outbound_interface']:
oiface = rule_conf['outbound_interface']['group']
if oiface[0] == '!':
diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py
index 91b3a0c28..33c6830bc 100644
--- a/python/vyos/ifconfig/interface.py
+++ b/python/vyos/ifconfig/interface.py
@@ -423,11 +423,11 @@ class Interface(Control):
self._cmd(f'nft {nft_command}')
def _del_interface_from_ct_iface_map(self):
- nft_command = f'delete element inet vrf_zones ct_iface_map {{ "{self.ifname}" }}'
+ nft_command = f'delete element inet vrf_zones ct_iface_map {{ \'"{self.ifname}"\' }}'
self._nft_check_and_run(nft_command)
def _add_interface_to_ct_iface_map(self, vrf_table_id: int):
- nft_command = f'add element inet vrf_zones ct_iface_map {{ "{self.ifname}" : {vrf_table_id} }}'
+ nft_command = f'add element inet vrf_zones ct_iface_map {{ \'"{self.ifname}"\' : {vrf_table_id} }}'
self._nft_check_and_run(nft_command)
def get_ifindex(self):
diff --git a/python/vyos/qos/cake.py b/python/vyos/qos/cake.py
index ca5a26917..a58df5a62 100644
--- a/python/vyos/qos/cake.py
+++ b/python/vyos/qos/cake.py
@@ -54,7 +54,16 @@ class CAKE(QoSBase):
f'Invalid flow isolation parameter: {config["flow_isolation"]}'
)
+ if 'ack_filter' in config:
+ if 'aggressive' in config['ack_filter']:
+ tmp += ' ack-filter-aggressive'
+ else:
+ tmp += ' ack-filter'
+ else:
+ tmp += ' no-ack-filter'
+
tmp += ' nat' if 'flow_isolation_nat' in config else ' nonat'
+ tmp += ' no-split-gso' if 'no_split_gso' in config else ' split-gso'
self._cmd(tmp)
diff --git a/python/vyos/template.py b/python/vyos/template.py
index bf2f13183..c6e35e9c7 100755
--- a/python/vyos/template.py
+++ b/python/vyos/template.py
@@ -582,6 +582,10 @@ def snmp_auth_oid(type):
}
return OIDs[type]
+@register_filter('quoted_join')
+def quoted_join(input_list, join_str, quote='"'):
+ return str(join_str).join(f'{quote}{elem}{quote}' for elem in input_list)
+
@register_filter('nft_action')
def nft_action(vyos_action):
if vyos_action == 'accept':
diff --git a/python/vyos/xml_ref/generate_op_cache.py b/python/vyos/xml_ref/generate_op_cache.py
index 117b080b4..0c4ae7182 100755
--- a/python/vyos/xml_ref/generate_op_cache.py
+++ b/python/vyos/xml_ref/generate_op_cache.py
@@ -140,9 +140,16 @@ def insert_node(
prop: OptElement = n.find('properties')
children: OptElement = n.find('children')
command: OptElement = n.find('command')
- # name is not None as required by schema
- name: str = n.get('name', 'schema_error')
+ standalone: OptElement = n.find('standalone')
node_type: str = n.tag
+
+ if node_type == 'virtualTagNode':
+ name = '__virtual_tag'
+ else:
+ name = n.get('name')
+ if not name:
+ raise ValueError("Node name is required for all node types except <virtualTagNode>")
+
if path is None:
path = []
@@ -156,6 +163,16 @@ def insert_node(
if command_text is not None:
command_text = translate_command(command_text, path)
+ try:
+ standalone_command = translate_command(standalone.find('command').text, path)
+ except AttributeError:
+ standalone_command = None
+
+ try:
+ standalone_help_text = translate_command(standalone.find('help').text, path)
+ except AttributeError:
+ standalone_help_text = None
+
comp_help = {}
if prop is not None:
che = prop.findall('completionHelp')
@@ -191,6 +208,8 @@ def insert_node(
cur_node_data.comp_help = comp_help
cur_node_data.help_text = help_text
cur_node_data.command = command_text
+ cur_node_data.standalone_help_text = standalone_help_text
+ cur_node_data.standalone_command = standalone_command
cur_node_data.path = path
cur_node_data.file = file
@@ -280,6 +299,7 @@ def main():
else:
print('Found the following duplicate paths:\n')
print(out)
+ sys.exit(1)
with open(op_ref_cache, 'w') as f:
f.write('from vyos.xml_ref.op_definition import NodeData\n')
diff --git a/python/vyos/xml_ref/op_definition.py b/python/vyos/xml_ref/op_definition.py
index 8e922ecb2..6a8368118 100644
--- a/python/vyos/xml_ref/op_definition.py
+++ b/python/vyos/xml_ref/op_definition.py
@@ -15,6 +15,7 @@
from typing import TypeAlias
from typing import Union
+from typing import Optional
from typing import Iterator
from dataclasses import dataclass
from dataclasses import field
@@ -31,6 +32,8 @@ class NodeData:
help_text: str = ''
comp_help: dict[str, list] = field(default_factory=dict)
command: str = ''
+ standalone_help_text: Optional[str] = None
+ standalone_command: Optional[str] = None
path: list[str] = field(default_factory=list)
file: str = ''
children: list[tuple] = field(default_factory=list)
diff --git a/schema/op-mode-definition.rnc b/schema/op-mode-definition.rnc
index 46430daa4..2fcb2ddd8 100644
--- a/schema/op-mode-definition.rnc
+++ b/schema/op-mode-definition.rnc
@@ -60,6 +60,15 @@ standalone = element standalone
help & command
}
+# Virtual tag nodes provide a way to add a variable argument
+# to a command that also needs fixed arguments,
+# like "show ip route" that can take "show ip route bgp"
+# or a network and arguments after it, like "show ip route 10.0.0.0/8 longer-prefixes"
+virtualTagNode = element virtualTagNode
+{
+ (properties? & children? & command?)
+}
+
# Leaf nodes are terminal configuration nodes that can't have children,
# but can have values.
@@ -69,9 +78,11 @@ leafNode = element leafNode
(command & properties)
}
-# Normal and tag nodes may have children
+# Normal and tag nodes may have children: nodes, leaf nodes, or tag nodes.
+# There can only be one virtual tag node child, though.
children = element children
{
+ (virtualTagNode? & (node | tagNode | leafNode)*) |
(node | tagNode | leafNode)+
}
diff --git a/schema/op-mode-definition.rng b/schema/op-mode-definition.rng
index bfd5cb50a..d7a56c6b2 100644
--- a/schema/op-mode-definition.rng
+++ b/schema/op-mode-definition.rng
@@ -102,6 +102,27 @@
</element>
</define>
<!--
+ Virtual tag nodes provide a way to add a variable argument
+ to a command that also needs fixed arguments,
+ like "show ip route" that can take "show ip route bgp"
+ or a network and arguments after it, like "show ip route 10.0.0.0/8 longer-prefixes"
+ -->
+ <define name="virtualTagNode">
+ <element name="virtualTagNode">
+ <interleave>
+ <optional>
+ <ref name="properties"/>
+ </optional>
+ <optional>
+ <ref name="children"/>
+ </optional>
+ <optional>
+ <ref name="command"/>
+ </optional>
+ </interleave>
+ </element>
+ </define>
+ <!--
Leaf nodes are terminal configuration nodes that can't have children,
but can have values.
-->
@@ -114,16 +135,33 @@
</interleave>
</element>
</define>
- <!-- Normal and tag nodes may have children -->
+ <!--
+ Normal and tag nodes may have children: nodes, leaf nodes, or tag nodes.
+ There can only be one virtual tag node child, though.
+ -->
<define name="children">
<element name="children">
- <oneOrMore>
- <choice>
- <ref name="node"/>
- <ref name="tagNode"/>
- <ref name="leafNode"/>
- </choice>
- </oneOrMore>
+ <choice>
+ <interleave>
+ <optional>
+ <ref name="virtualTagNode"/>
+ </optional>
+ <zeroOrMore>
+ <choice>
+ <ref name="node"/>
+ <ref name="tagNode"/>
+ <ref name="leafNode"/>
+ </choice>
+ </zeroOrMore>
+ </interleave>
+ <oneOrMore>
+ <choice>
+ <ref name="node"/>
+ <ref name="tagNode"/>
+ <ref name="leafNode"/>
+ </choice>
+ </oneOrMore>
+ </choice>
</element>
</define>
<!--
diff --git a/scripts/build-command-op-templates b/scripts/build-command-op-templates
index 9eef25a2f..a2b7c9ddc 100755
--- a/scripts/build-command-op-templates
+++ b/scripts/build-command-op-templates
@@ -3,7 +3,7 @@
# build-command-template: converts new style command definitions in XML
# to the old style (bunch of dirs and node.def's) command templates
#
-# Copyright (C) 2017-2024 VyOS maintainers <maintainers@vyos.net>
+# Copyright (C) 2017-2025 VyOS maintainers <maintainers@vyos.net>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -30,6 +30,8 @@ import functools
from lxml import etree as ET
from textwrap import fill
+debug = True
+
# Defaults
validator_dir = "/opt/vyatta/libexec/validators"
default_constraint_err_msg = "Invalid value"
@@ -177,7 +179,13 @@ def process_node(n, tmpl_dir):
node_type = n.tag
- my_tmpl_dir.append(name)
+ if name:
+ my_tmpl_dir.append(name)
+ else:
+ # Virtual tag nodes have no names,
+ # that's a normal situation.
+ # In that case we create subdirs at the current level.
+ pass
if debug:
print(f"Name of the node: {name};\n Created directory: ", end="")
@@ -234,6 +242,27 @@ def process_node(n, tmpl_dir):
inner_nodes = children.iterfind("*")
for inner_n in inner_nodes:
process_node(inner_n, my_tmpl_dir)
+ elif node_type == "virtualTagNode":
+ # The outer structure is already created
+
+ # Create the inner node.tag part
+ my_tmpl_dir.append("node.tag")
+ os.makedirs(make_path(my_tmpl_dir), exist_ok=True)
+ if debug:
+ print("Created path for the virtualTagNode: {}".format(make_path(my_tmpl_dir)), end="")
+
+ # Not sure if we want partially defined tag nodes, write the file unconditionally
+ nodedef_path = os.path.join(make_path(my_tmpl_dir), "node.def")
+ # Only create the "node.def" file if it exists but is empty, or if it
+ # does not exist at all.
+ if not os.path.exists(nodedef_path) or os.path.getsize(nodedef_path) == 0:
+ with open(nodedef_path, "w") as f:
+ f.write(make_node_def(props, command))
+
+ if children is not None:
+ inner_nodes = children.iterfind("*")
+ for inner_n in inner_nodes:
+ process_node(inner_n, my_tmpl_dir)
elif node_type == "leafNode":
# This is a leaf node
if debug:
diff --git a/smoketest/scripts/cli/test_qos.py b/smoketest/scripts/cli/test_qos.py
index b3ed7f6dc..4b507852f 100755
--- a/smoketest/scripts/cli/test_qos.py
+++ b/smoketest/scripts/cli/test_qos.py
@@ -884,6 +884,8 @@ class TestQoS(VyOSUnitTestSHIM.TestCase):
base_path + ['policy', 'cake', policy_name, 'bandwidth', str(bandwidth)]
)
self.cli_set(base_path + ['policy', 'cake', policy_name, 'rtt', str(rtt)])
+ self.cli_set(base_path + ['policy', 'cake', policy_name, 'no-split-gso'])
+ self.cli_set(base_path + ['policy', 'cake', policy_name, 'ack-filter', 'aggressive'])
# commit changes
self.cli_commit()
@@ -899,6 +901,23 @@ class TestQoS(VyOSUnitTestSHIM.TestCase):
self.assertFalse(tmp['options']['ingress'])
self.assertFalse(tmp['options']['nat'])
self.assertTrue(tmp['options']['raw'])
+ self.assertFalse(tmp['options']['split_gso'])
+ self.assertEqual(tmp['options']['ack-filter'], 'aggressive')
+
+ self.cli_delete(base_path + ['policy', 'cake', policy_name, 'ack-filter', 'aggressive'])
+ self.cli_commit()
+ tmp = get_tc_qdisc_json(interface)
+ self.assertEqual(tmp['options']['ack-filter'], 'enabled')
+
+ self.cli_delete(base_path + ['policy', 'cake', policy_name, 'ack-filter'])
+ self.cli_commit()
+ tmp = get_tc_qdisc_json(interface)
+ self.assertEqual(tmp['options']['ack-filter'], 'disabled')
+
+ self.cli_delete(base_path + ['policy', 'cake', policy_name, 'no-split-gso'])
+ self.cli_commit()
+ tmp = get_tc_qdisc_json(interface)
+ self.assertTrue(tmp['options']['split_gso'])
nat = True
for flow_isolation in [
diff --git a/src/conf_mode/vrf.py b/src/conf_mode/vrf.py
index 6e9d4147a..00a202df4 100755
--- a/src/conf_mode/vrf.py
+++ b/src/conf_mode/vrf.py
@@ -240,7 +240,7 @@ def apply(vrf):
vrf_iface.set_dhcpv6(False)
# Remove nftables conntrack zone map item
- nft_del_element = f'delete element inet vrf_zones ct_iface_map {{ "{tmp}" }}'
+ nft_del_element = f'delete element inet vrf_zones ct_iface_map {{ \'"{tmp}"\' }}'
# Check if deleting is possible first to avoid raising errors
_, err = popen(f'nft --check {nft_del_element}')
if not err:
@@ -320,7 +320,7 @@ def apply(vrf):
state = 'down' if 'disable' in config else 'up'
vrf_if.set_admin_state(state)
# Add nftables conntrack zone map item
- nft_add_element = f'add element inet vrf_zones ct_iface_map {{ "{name}" : {table} }}'
+ nft_add_element = f'add element inet vrf_zones ct_iface_map {{ \'"{name}"\' : {table} }}'
cmd(f'nft {nft_add_element}')
# Only call into nftables as long as there is nothing setup to avoid wasting
diff --git a/src/helpers/vyos-load-balancer.py b/src/helpers/vyos-load-balancer.py
index 30329fd5c..5852dcdf4 100755
--- a/src/helpers/vyos-load-balancer.py
+++ b/src/helpers/vyos-load-balancer.py
@@ -246,6 +246,7 @@ if __name__ == '__main__':
# Main loop
+ init = True;
try:
while True:
ip_change = False
@@ -273,6 +274,11 @@ if __name__ == '__main__':
if state_changed and state['failure_count'] >= int(health_conf['failure_count']):
state['state'] = False
state['state_changed'] = True
+
+ #Force state changed to trigger the first write
+ if init == True:
+ state['state_changed'] = True
+ init = False
if state['state_changed']:
state['if_addr'] = get_ipv4_address(ifname)
diff --git a/src/init/vyos-router b/src/init/vyos-router
index 5c88c0665..88fa573e0 100755
--- a/src/init/vyos-router
+++ b/src/init/vyos-router
@@ -420,7 +420,10 @@ gen_duid ()
UUID=$(cat ${UUID_FILE} | tr -d -)
fi
if [ -z ${UUID} ]; then
- UUID=$(uuidgen --sha1 --namespace @dns --name $(cat ${UUID_FILE_ALT}) | tr -d -)
+ file_alt="$(cat ${UUID_FILE_ALT})"
+ if [ -n "${file_alt}" ]; then
+ UUID=$(uuidgen --sha1 --namespace @dns --name ${file_alt} | tr -d -)
+ fi
fi
# Add DUID type4 (UUID) information
DUID_TYPE="0004"
diff --git a/src/op_mode/load-balancing_wan.py b/src/op_mode/load-balancing_wan.py
index 9fa473802..e1e2e8109 100755
--- a/src/op_mode/load-balancing_wan.py
+++ b/src/op_mode/load-balancing_wan.py
@@ -62,7 +62,7 @@ def _get_formatted_output(raw_data):
change_dt = datetime.fromtimestamp(latest_change) if latest_change > 0 else None
success_dt = datetime.fromtimestamp(if_data['last_success']) if if_data['last_success'] > 0 else None
failure_dt = datetime.fromtimestamp(if_data['last_failure']) if if_data['last_failure'] > 0 else None
- now = datetime.utcnow()
+ now = datetime.fromtimestamp(time.time())
fmt_data = {
'ifname': ifname,