From 53d6eb10d9c275cd7665eec4d2137c2e3bf202e7 Mon Sep 17 00:00:00 2001 From: l0crian1 Date: Wed, 15 May 2024 14:54:18 -0400 Subject: T6335: Add/Update EVPN op commands Added the following commands: show evpn show evpn es show evpn es show evpn es detail show evpn es-evi show evpn es-evi detail show evpn es-evi vni show evpn vni show evpn vni detail show evpn vni Updated the following commands: show evpn access-vlan show evpn arp-cache show evpn mac show evpn next-hops show evpn rmac (cherry picked from commit c6be441c86bc8fe2e938e2bd3c85f99071cbfb49) --- data/op-mode-standardized.json | 1 + op-mode-definitions/include/vni-tagnode-all.xml.i | 5 +- op-mode-definitions/include/vni-tagnode.xml.i | 5 +- op-mode-definitions/show-evpn.xml.in | 59 ++++++++++++++++++++++- src/completion/list_esi.py | 31 ++++++++++++ src/completion/list_vni.py | 27 +++++++++++ src/op_mode/evpn.py | 46 ++++++++++++++++++ 7 files changed, 168 insertions(+), 6 deletions(-) create mode 100644 src/completion/list_esi.py create mode 100644 src/completion/list_vni.py create mode 100644 src/op_mode/evpn.py 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 @@ VXLAN network identifier (VNI) number - 1-16777215 all + <1-16777215> all + - ${vyos_op_scripts_dir}/vtysh_wrapper.sh $@ + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" 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 @@ VXLAN network identifier (VNI) number - 1-16777215 + <1-16777215> + - ${vyos_op_scripts_dir}/vtysh_wrapper.sh $@ + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" 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 @@ #include - ${vyos_op_scripts_dir}/vtysh_wrapper.sh $@ + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" @@ -31,7 +31,7 @@ <1-4094> - ${vyos_op_scripts_dir}/vtysh_wrapper.sh $@ + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" @@ -43,6 +43,45 @@ #include + + + Show ESI information for specified ESI + + <esi> + + + + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" + + + + Show ESI information + + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" + + + + Show ESI details + + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" + + + + + + Show ESI information per EVI + + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" + + + + Show ESI per EVI details + + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" + + #include + + MAC addresses @@ -67,7 +106,23 @@ #include + #include + + + Show VNI information + + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" + + + + Show VNI details + + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" + + + + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" 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 . +# +# 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 . +# +# 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 . +# +# 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) -- cgit v1.2.3