diff options
| author | l0crian1 <ryan.claridge13@gmail.com> | 2024-05-15 14:54:18 -0400 | 
|---|---|---|
| committer | l0crian1 <ryan.claridge13@gmail.com> | 2024-05-15 14:54:18 -0400 | 
| commit | c6be441c86bc8fe2e938e2bd3c85f99071cbfb49 (patch) | |
| tree | b2ca9b42f785f3d5ce81a21703dbde75b974f8a1 | |
| parent | c3c81dcc0a79c1ab1bc9a13c62565a69ee5550fa (diff) | |
| download | vyos-1x-c6be441c86bc8fe2e938e2bd3c85f99071cbfb49.tar.gz vyos-1x-c6be441c86bc8fe2e938e2bd3c85f99071cbfb49.zip  | |
T6335: Add/Update EVPN op commands
Added the following commands:
show evpn
show evpn es
show evpn es <es-id>
show evpn es detail
show evpn es-evi
show evpn es-evi detail
show evpn es-evi vni <num>
show evpn vni
show evpn vni detail
show evpn vni <num>
Updated the following commands:
show evpn access-vlan
show evpn arp-cache
show evpn mac
show evpn next-hops
show evpn rmac
| -rw-r--r-- | data/op-mode-standardized.json | 1 | ||||
| -rw-r--r-- | op-mode-definitions/include/vni-tagnode-all.xml.i | 5 | ||||
| -rw-r--r-- | op-mode-definitions/include/vni-tagnode.xml.i | 5 | ||||
| -rw-r--r-- | op-mode-definitions/show-evpn.xml.in | 59 | ||||
| -rw-r--r-- | src/completion/list_esi.py | 31 | ||||
| -rw-r--r-- | src/completion/list_vni.py | 27 | ||||
| -rw-r--r-- | src/op_mode/evpn.py | 46 | 
7 files changed, 168 insertions, 6 deletions
diff --git a/data/op-mode-standardized.json b/data/op-mode-standardized.json index a4ed2bcf4..911869d09 100644 --- a/data/op-mode-standardized.json +++ b/data/op-mode-standardized.json @@ -9,6 +9,7 @@  "cpu.py",  "dhcp.py",  "dns.py", +"evpn.py",  "interfaces.py",  "ipsec.py",  "lldp.py", diff --git a/op-mode-definitions/include/vni-tagnode-all.xml.i b/op-mode-definitions/include/vni-tagnode-all.xml.i index 0fedb9371..18f74653b 100644 --- a/op-mode-definitions/include/vni-tagnode-all.xml.i +++ b/op-mode-definitions/include/vni-tagnode-all.xml.i @@ -3,9 +3,10 @@    <properties>      <help>VXLAN network identifier (VNI) number</help>      <completionHelp> -      <list>1-16777215 all</list> +      <list><1-16777215> all</list> +      <script>${vyos_completion_dir}/list_vni.py</script>      </completionHelp>    </properties> -  <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command> +  <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>  </tagNode>  <!-- included end --> diff --git a/op-mode-definitions/include/vni-tagnode.xml.i b/op-mode-definitions/include/vni-tagnode.xml.i index 22f2d33bd..363da8d5e 100644 --- a/op-mode-definitions/include/vni-tagnode.xml.i +++ b/op-mode-definitions/include/vni-tagnode.xml.i @@ -3,9 +3,10 @@    <properties>      <help>VXLAN network identifier (VNI) number</help>      <completionHelp> -      <list>1-16777215</list> +      <list><1-16777215></list> +      <script>${vyos_completion_dir}/list_vni.py</script>      </completionHelp>    </properties> -  <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command> +  <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>  </tagNode>  <!-- included end --> diff --git a/op-mode-definitions/show-evpn.xml.in b/op-mode-definitions/show-evpn.xml.in index a005cbc30..ba3b104cd 100644 --- a/op-mode-definitions/show-evpn.xml.in +++ b/op-mode-definitions/show-evpn.xml.in @@ -14,7 +14,7 @@              <children>                #include <include/frr-detail.xml.i>              </children> -            <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command> +            <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>            </node>            <tagNode name="access-vlan">              <properties> @@ -31,7 +31,7 @@                      <list><1-4094></list>                    </completionHelp>                  </properties> -                <command>${vyos_op_scripts_dir}/vtysh_wrapper.sh $@</command> +                <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>                </node>              </children>            </tagNode> @@ -43,6 +43,45 @@                #include <include/vni-tagnode-all.xml.i>              </children>            </node> +          <tagNode name="es"> +            <properties> +              <help>Show ESI information for specified ESI</help> +              <completionHelp> +                <list><esi></list> +                <script>${vyos_completion_dir}/list_esi.py</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> +              <leafNode name="detail"> +                <properties> +                  <help>Show ESI details</help> +                </properties> +                <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command> +              </leafNode> +            </children> +          </node> +          <node name="es-evi"> +            <properties> +              <help>Show ESI information per EVI</help> +            </properties> +            <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command> +            <children> +              <leafNode name="detail"> +                <properties> +                  <help>Show ESI per EVI details</help> +                </properties> +                <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command> +              </leafNode> +              #include <include/vni-tagnode.xml.i> +            </children> +          </node>            <node name="mac">              <properties>                <help>MAC addresses</help> @@ -67,7 +106,23 @@                #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> +              <leafNode name="detail"> +                <properties> +                  <help>Show VNI details</help> +                </properties> +                <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command> +              </leafNode> +            </children> +          </node>          </children> +        <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>        </node>      </children>    </node> diff --git a/src/completion/list_esi.py b/src/completion/list_esi.py new file mode 100644 index 000000000..fc40f37b6 --- /dev/null +++ b/src/completion/list_esi.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2016-2024 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +# +# This script is completion helper to list all configured VNIs that are visible to FRR + +import json +from vyos.utils.process import cmd + +def get_esi(): +    esiDict = json.loads(cmd(f"vtysh -c 'show evpn es json'")) +    esiList = [] +    for i in esiDict: +        esiList.append(i['esi']) + +    print(' '.join(esiList)) + +if __name__ == '__main__': +    get_esi() diff --git a/src/completion/list_vni.py b/src/completion/list_vni.py new file mode 100644 index 000000000..ef78eb16f --- /dev/null +++ b/src/completion/list_vni.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2016-2024 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +# +# This script is completion helper to list all configured VNIs that are visible to FRR + +import json +from vyos.utils.process import cmd + +def get_vni(): +    vniDict = json.loads(cmd(f"vtysh -c 'show evpn vni json'")) +    print(' '.join(vniDict.keys())) + +if __name__ == '__main__': +    get_vni() diff --git a/src/op_mode/evpn.py b/src/op_mode/evpn.py new file mode 100644 index 000000000..cae4ab9f5 --- /dev/null +++ b/src/op_mode/evpn.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2016-2024 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +# +# This script is a helper to run VTYSH commands for "show evpn", allowing for the --raw flag to output JSON + +import sys +import typing +import json + +import vyos.opmode +from vyos.utils.process import cmd + +def show_evpn(raw: bool, command: typing.Optional[str]): +    if raw: +        command = f"{command} json" +        evpnDict = {} +        try: +            evpnDict['evpn'] = json.loads(cmd(f"vtysh -c '{command}'")) +        except: +            raise vyos.opmode.DataUnavailable(f"\"{command.replace(' json', '')}\" is invalid or has no JSON option") + +        return evpnDict +    else: +        return cmd(f"vtysh -c '{command}'") + +if __name__ == '__main__': +    try: +        res = vyos.opmode.run(sys.modules[__name__]) +        if res: +            print(res) +    except (ValueError, vyos.opmode.Error) as e: +        print(e) +        sys.exit(1)  | 
