From c6be441c86bc8fe2e938e2bd3c85f99071cbfb49 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 --- src/completion/list_esi.py | 31 +++++++++++++++++++++++++++++++ src/completion/list_vni.py | 27 +++++++++++++++++++++++++++ src/op_mode/evpn.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 src/completion/list_esi.py create mode 100644 src/completion/list_vni.py create mode 100644 src/op_mode/evpn.py (limited to 'src') 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 From 3917e3e9f985063ab7419c903f6019116224f640 Mon Sep 17 00:00:00 2001 From: l0crian1 Date: Thu, 16 May 2024 08:07:02 -0400 Subject: T6335: Add/Update EVPN op commands Converted completion helpers from python to bash for performance Previous commit: 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 --- op-mode-definitions/include/vni-tagnode-all.xml.i | 2 +- op-mode-definitions/include/vni-tagnode.xml.i | 2 +- op-mode-definitions/show-evpn.xml.in | 2 +- src/completion/list_esi.py | 31 ----------------------- src/completion/list_esi.sh | 20 +++++++++++++++ src/completion/list_vni.py | 27 -------------------- src/completion/list_vni.sh | 20 +++++++++++++++ 7 files changed, 43 insertions(+), 61 deletions(-) delete mode 100644 src/completion/list_esi.py create mode 100755 src/completion/list_esi.sh delete mode 100644 src/completion/list_vni.py create mode 100755 src/completion/list_vni.sh (limited to 'src') diff --git a/op-mode-definitions/include/vni-tagnode-all.xml.i b/op-mode-definitions/include/vni-tagnode-all.xml.i index 18f74653b..fabab19d7 100644 --- a/op-mode-definitions/include/vni-tagnode-all.xml.i +++ b/op-mode-definitions/include/vni-tagnode-all.xml.i @@ -4,7 +4,7 @@ VXLAN network identifier (VNI) number <1-16777215> all - + ${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 363da8d5e..f5b99dcc8 100644 --- a/op-mode-definitions/include/vni-tagnode.xml.i +++ b/op-mode-definitions/include/vni-tagnode.xml.i @@ -4,7 +4,7 @@ VXLAN network identifier (VNI) number <1-16777215> - + ${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 ba3b104cd..3c1e5c7d6 100644 --- a/op-mode-definitions/show-evpn.xml.in +++ b/op-mode-definitions/show-evpn.xml.in @@ -48,7 +48,7 @@ Show ESI information for specified ESI <esi> - + ${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*" diff --git a/src/completion/list_esi.py b/src/completion/list_esi.py deleted file mode 100644 index fc40f37b6..000000000 --- a/src/completion/list_esi.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/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_esi.sh b/src/completion/list_esi.sh new file mode 100755 index 000000000..b8373fa57 --- /dev/null +++ b/src/completion/list_esi.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# +# Copyright (C) 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 valid ESEs that are visible to FRR + +esiJson=$(vtysh -c 'show evpn es json') +echo "$(echo "$esiJson" | jq -r '.[] | .esi')" diff --git a/src/completion/list_vni.py b/src/completion/list_vni.py deleted file mode 100644 index ef78eb16f..000000000 --- a/src/completion/list_vni.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/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/completion/list_vni.sh b/src/completion/list_vni.sh new file mode 100755 index 000000000..f8bd4a993 --- /dev/null +++ b/src/completion/list_vni.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# +# Copyright (C) 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 + +vniJson=$(vtysh -c 'show evpn vni json') +echo "$(echo "$vniJson" | jq -r 'keys | .[]')" -- cgit v1.2.3