diff options
| -rw-r--r-- | op-mode-definitions/show-ip-route.xml.in | 7 | ||||
| -rw-r--r-- | op-mode-definitions/show-ipv6-route.xml.in | 7 | ||||
| -rwxr-xr-x | 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 @@                  </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, | 
