From 45d0193ad16f69f64685576ba8190a5b1c35ce04 Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Mon, 16 Jan 2023 16:19:42 +0000 Subject: opmode: T4837: add VRF option for route summary --- op-mode-definitions/show-ip-route.xml.in | 7 ++++++- op-mode-definitions/show-ipv6-route.xml.in | 7 ++++++- src/op_mode/route.py | 20 ++++++++++++++------ 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 @@ ${vyos_op_scripts_dir}/vtysh_wrapper.sh $@ + + + Summary of all routes in the VRF + + ${vyos_op_scripts_dir}/route.py show_summary --family inet --vrf $5 + #include #include #include @@ -84,7 +90,6 @@ #include #include #include - #include #include #include 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 @@ ${vyos_op_scripts_dir}/vtysh_wrapper.sh $@ + + + Summary of all routes in the VRF + + ${vyos_op_scripts_dir}/route.py show_summary --family inet6 --vrf $5 + #include #include #include @@ -83,7 +89,6 @@ #include #include #include - #include #include #include #include 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, -- cgit v1.2.3