summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@baturin.org>2023-01-16 16:19:42 +0000
committerDaniil Baturin <daniil@baturin.org>2023-01-16 16:23:05 +0000
commit45d0193ad16f69f64685576ba8190a5b1c35ce04 (patch)
tree826a05efef343aa5dd9f160a1d6ba659cbe29afe
parent6c9c4144df327d6c27d559c8a0c14317da3a2588 (diff)
downloadvyos-1x-45d0193ad16f69f64685576ba8190a5b1c35ce04.tar.gz
vyos-1x-45d0193ad16f69f64685576ba8190a5b1c35ce04.zip
opmode: T4837: add VRF option for route summary
-rw-r--r--op-mode-definitions/show-ip-route.xml.in7
-rw-r--r--op-mode-definitions/show-ipv6-route.xml.in7
-rwxr-xr-xsrc/op_mode/route.py20
3 files changed, 26 insertions, 8 deletions
diff --git a/op-mode-definitions/show-ip-route.xml.in b/op-mode-definitions/show-ip-route.xml.in
index 63b04fcd0..681aa089f 100644
--- a/op-mode-definitions/show-ip-route.xml.in
+++ b/op-mode-definitions/show-ip-route.xml.in
@@ -77,6 +77,12 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
+ <node name="summary">
+ <properties>
+ <help>Summary of all routes in the VRF</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/route.py show_summary --family inet --vrf $5</command>
+ </node>
#include <include/show-route-bgp.xml.i>
#include <include/show-route-connected.xml.i>
#include <include/show-route-isis.xml.i>
@@ -84,7 +90,6 @@
#include <include/show-route-ospf.xml.i>
#include <include/show-route-rip.xml.i>
#include <include/show-route-static.xml.i>
- #include <include/show-route-summary.xml.i>
#include <include/show-route-supernets-only.xml.i>
#include <include/show-route-tag.xml.i>
</children>
diff --git a/op-mode-definitions/show-ipv6-route.xml.in b/op-mode-definitions/show-ipv6-route.xml.in
index 30ea208c1..7df1a873a 100644
--- a/op-mode-definitions/show-ipv6-route.xml.in
+++ b/op-mode-definitions/show-ipv6-route.xml.in
@@ -76,6 +76,12 @@
</properties>
<command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command>
<children>
+ <node name="summary">
+ <properties>
+ <help>Summary of all routes in the VRF</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/route.py show_summary --family inet6 --vrf $5</command>
+ </node>
#include <include/show-route-bgp.xml.i>
#include <include/show-route-connected.xml.i>
#include <include/show-route-isis.xml.i>
@@ -83,7 +89,6 @@
#include <include/show-route-ospfv3.xml.i>
#include <include/show-route-ripng.xml.i>
#include <include/show-route-static.xml.i>
- #include <include/show-route-summary.xml.i>
#include <include/show-route-supernets-only.xml.i>
#include <include/show-route-table.xml.i>
#include <include/show-route-tag.xml.i>
diff --git a/src/op_mode/route.py b/src/op_mode/route.py
index 6942fba89..7f0f9cbac 100755
--- a/src/op_mode/route.py
+++ b/src/op_mode/route.py
@@ -54,7 +54,7 @@ frr_command_template = Template("""
{% endif %}
""")
-def show_summary(raw: bool, family: str, table: typing.Optional[int]):
+def show_summary(raw: bool, family: str, table: typing.Optional[int], vrf: typing.Optional[str]):
from vyos.util import cmd
if family == 'inet':
@@ -62,18 +62,26 @@ def show_summary(raw: bool, family: str, table: typing.Optional[int]):
elif family == 'inet6':
family_cmd = 'ipv6'
else:
- raise ValueError(f"Usupported address family {family}")
+ raise ValueError(f"Unsupported address family {family}")
+
+ if (table is not None) and (vrf is not None):
+ raise ValueError("table and vrf options are mutually exclusive")
# Replace with Jinja if it ever starts growing
if table:
- table_command = f"table {table}"
+ table_cmd = f"table {table}"
+ else:
+ table_cmd = ""
+
+ if vrf:
+ vrf_cmd = f"vrf {vrf}"
else:
- table_command = ""
+ vrf_cmd = ""
if raw:
from json import loads
- output = cmd(f"vtysh -c 'show {family_cmd} route summary {table_command} json'").strip()
+ output = cmd(f"vtysh -c 'show {family_cmd} route {vrf_cmd} summary {table_cmd} json'").strip()
# If there are no routes in a table, its "JSON" output is an empty string,
# as of FRR 8.4.1
@@ -82,7 +90,7 @@ def show_summary(raw: bool, family: str, table: typing.Optional[int]):
else:
return {}
else:
- output = cmd(f"vtysh -c 'show {family_cmd} route summary {table_command}'")
+ output = cmd(f"vtysh -c 'show {family_cmd} route {vrf_cmd} summary {table_cmd}'")
return output
def show(raw: bool,