Skip to content

Commit

Permalink
Merge pull request #3465 from vyos/mergify/bp/sagitta/pr-3458
Browse files Browse the repository at this point in the history
T6335: Add/Update EVPN op commands (backport #3458)
  • Loading branch information
c-po authored May 16, 2024
2 parents 899ed3c + 9eab810 commit badc6a2
Show file tree
Hide file tree
Showing 7 changed files with 150 additions and 6 deletions.
1 change: 1 addition & 0 deletions data/op-mode-standardized.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"cpu.py",
"dhcp.py",
"dns.py",
"evpn.py",
"interfaces.py",
"ipsec.py",
"lldp.py",
Expand Down
5 changes: 3 additions & 2 deletions op-mode-definitions/include/vni-tagnode-all.xml.i
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
<properties>
<help>VXLAN network identifier (VNI) number</help>
<completionHelp>
<list>1-16777215 all</list>
<list>&lt;1-16777215&gt; all</list>
<script>${vyos_completion_dir}/list_vni.sh</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 -->
5 changes: 3 additions & 2 deletions op-mode-definitions/include/vni-tagnode.xml.i
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
<properties>
<help>VXLAN network identifier (VNI) number</help>
<completionHelp>
<list>1-16777215</list>
<list>&lt;1-16777215&gt;</list>
<script>${vyos_completion_dir}/list_vni.sh</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 -->
59 changes: 57 additions & 2 deletions op-mode-definitions/show-evpn.xml.in
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -31,7 +31,7 @@
<list>&lt;1-4094&gt;</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>
Expand All @@ -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>&lt;esi&gt;</list>
<script>${vyos_completion_dir}/list_esi.sh</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>
Expand All @@ -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>
Expand Down
20 changes: 20 additions & 0 deletions src/completion/list_esi.sh
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
#
# 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')"
20 changes: 20 additions & 0 deletions src/completion/list_vni.sh
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
#
# 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 | .[]')"
46 changes: 46 additions & 0 deletions src/op_mode/evpn.py
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit badc6a2

Please sign in to comment.