summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--op-mode-definitions/counters.xml.in598
-rw-r--r--op-mode-definitions/wireless.xml.in40
-rw-r--r--python/vyos/ifconfig/operational.py12
-rwxr-xr-xsrc/op_mode/interfaces.py12
4 files changed, 617 insertions, 45 deletions
diff --git a/op-mode-definitions/counters.xml.in b/op-mode-definitions/counters.xml.in
new file mode 100644
index 000000000..4bf08d201
--- /dev/null
+++ b/op-mode-definitions/counters.xml.in
@@ -0,0 +1,598 @@
+<?xml version="1.0"?>
+<interfaceDefinition>
+ <node name="clear">
+ <children>
+ <node name="interfaces">
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear interface counters for all interfaces</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters</command>
+ </node>
+ <node name="bonding">
+ <properties>
+ <help>Clear Bonding interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all bonding interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="bonding">
+ <properties>
+ <help>Clear interface information for a given bonding interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type bonding</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given bonding interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="bridge">
+ <properties>
+ <help>Clear Bridge interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all bridge interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="bridge">
+ <properties>
+ <help>Clear interface information for a given bridge interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type bridge</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given bridge interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="dummy">
+ <properties>
+ <help>Clear Dummy interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all dummy interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="dummy">
+ <properties>
+ <help>Clear interface information for a given dummy interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type dummy</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given dummy interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="ethernet">
+ <properties>
+ <help>Clear Ethernet interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all ethernet interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="ethernet">
+ <properties>
+ <help>Clear interface information for a given ethernet interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type ethernet</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given ethernet interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="geneve">
+ <properties>
+ <help>Clear GENEVE interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all GENEVE interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="geneve">
+ <properties>
+ <help>Clear interface information for a given GENEVE interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type geneve</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given GENEVE interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="input">
+ <properties>
+ <help>Clear Input (ifb) interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all Input interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="input">
+ <properties>
+ <help>Clear interface information for a given Input interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type input</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given Input interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="l2tpv3">
+ <properties>
+ <help>Clear L2TPv3 interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all L2TPv3 interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="l2tpv3">
+ <properties>
+ <help>Clear interface information for a given L2TPv3 interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type l2tpeth</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given L2TPv3 interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="loopback">
+ <properties>
+ <help>Clear Loopback interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all loopback interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="loopback">
+ <properties>
+ <help>Clear interface information for a given loopback interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type loopback</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given loopback interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="macsec">
+ <properties>
+ <help>Clear MACsec interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all MACsec interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="macsec">
+ <properties>
+ <help>Clear interface information for a given MACsec interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type macsec</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given MACsec interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="openvpn">
+ <properties>
+ <help>Clear OpenVPN interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all OpenVPN interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="openvpn">
+ <properties>
+ <help>Clear interface information for a given OpenVPN interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type openvpn</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given OpenVPN interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="pppoe">
+ <properties>
+ <help>Clear PPPoE interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all PPPoE interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="pppoe">
+ <properties>
+ <help>Clear interface information for a given PPPoE interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type pppoe</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given PPPoE interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="pseudo-ethernet">
+ <properties>
+ <help>Clear Pseudo-Ethernet/MACvlan interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all Pseudo-Ethernet interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="pseudo-ethernet">
+ <properties>
+ <help>Clear interface information for a given Pseudo-Ethernet interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type pseudo-ethernet</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given Pseudo-Ethernet interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="sstp">
+ <properties>
+ <help>Clear SSTP interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all SSTP interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="sstp">
+ <properties>
+ <help>Clear interface information for a given SSTP interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type sstp</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given SSTP interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="tunnel">
+ <properties>
+ <help>Clear Tunnel interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all tunnel interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="tunnel">
+ <properties>
+ <help>Clear interface information for a given tunnel interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type tunnel</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given tunnel interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="virtual-ethernet">
+ <properties>
+ <help>Clear virtual-ethernet interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all virtual-ethernet interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="virtual-ethernet">
+ <properties>
+ <help>Clear interface information for a given virtual-ethernet interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type virtual-ethernet</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given virtual-ethernet interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="vti">
+ <properties>
+ <help>Clear VTI interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all VTI interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="vti">
+ <properties>
+ <help>Clear interface information for a given VTI interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type vti</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given VTI interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="vxlan">
+ <properties>
+ <help>Clear VXLAN interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all VXLAN interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="vxlan">
+ <properties>
+ <help>Clear interface information for a given VXLAN interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type vxlan</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given VXLAN interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="wireguard">
+ <properties>
+ <help>Clear Wireguard interface information</help>
+ </properties>
+ <children>
+ <node name="counters">
+ <properties>
+ <help>Clear all Wireguard interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </node>
+ </children>
+ </node>
+ <tagNode name="wireguard">
+ <properties>
+ <help>Clear interface information for a given Wireguard interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type wireguard</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear interface counters for a given Wireguard interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="wireless">
+ <properties>
+ <help>Clear Wireless (WLAN) interface information</help>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear all wireless interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </leafNode>
+ </children>
+ </node>
+ <tagNode name="wireless">
+ <properties>
+ <help>Clear interface information for a given wireless interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type wireless</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear counters for a given wireless interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="wwan">
+ <properties>
+ <help>Clear Wireless Modem (WWAN) interface information</help>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear all WWAN interface counters</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_type "$3"</command>
+ </leafNode>
+ </children>
+ </node>
+ <tagNode name="wwan">
+ <properties>
+ <help>Clear interface information for a given WWAN interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type wwan</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="counters">
+ <properties>
+ <help>Clear counters for a given WWAN interface</help>
+ </properties>
+ <command>sudo ${vyos_op_scripts_dir}/interfaces.py clear_counters --intf_name "$4"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ </children>
+ </node>
+ </children>
+ </node>
+</interfaceDefinition>
+
diff --git a/op-mode-definitions/wireless.xml.in b/op-mode-definitions/wireless.xml.in
deleted file mode 100644
index 25809e0b8..000000000
--- a/op-mode-definitions/wireless.xml.in
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<interfaceDefinition>
- <node name="clear">
- <children>
- <node name="interfaces">
- <children>
- <node name="wireless">
- <properties>
- <help>Clear wireless interface information</help>
- </properties>
- <children>
- <leafNode name="counters">
- <properties>
- <help>Clear all wireless interface counters</help>
- </properties>
- <command>sudo ${vyos_op_scripts_dir}/show_interfaces.py --action=clear --intf-type="$3"</command>
- </leafNode>
- </children>
- </node>
- <tagNode name="wireless">
- <properties>
- <help>Clear interface information for a given wireless interface</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_interfaces --type wireless</script>
- </completionHelp>
- </properties>
- <children>
- <leafNode name="counters">
- <properties>
- <help>Clear all wireless interface counters</help>
- </properties>
- <command>sudo ${vyos_op_scripts_dir}/show_interfaces.py --action=clear --intf="$4"</command>
- </leafNode>
- </children>
- </tagNode>
- </children>
- </node>
- </children>
- </node>
-</interfaceDefinition>
diff --git a/python/vyos/ifconfig/operational.py b/python/vyos/ifconfig/operational.py
index 33e8614f0..dc2742123 100644
--- a/python/vyos/ifconfig/operational.py
+++ b/python/vyos/ifconfig/operational.py
@@ -143,15 +143,17 @@ class Operational(Control):
except IOError:
return no_stats
- def clear_counters(self, counters=None):
- clear = self._stats_all if counters is None else []
- stats = self.load_counters()
+ def clear_counters(self):
+ stats = self.get_stats()
for counter, value in stats.items():
- stats[counter] = 0 if counter in clear else value
+ stats[counter] = value
self.save_counters(stats)
def reset_counters(self):
- os.remove(self.cachefile(self.ifname))
+ try:
+ os.remove(self.cachefile(self.ifname))
+ except FileNotFoundError:
+ pass
def get_stats(self):
""" return a dict() with the value for each interface counter """
diff --git a/src/op_mode/interfaces.py b/src/op_mode/interfaces.py
index 7d04ec4e3..dd87b5901 100755
--- a/src/op_mode/interfaces.py
+++ b/src/op_mode/interfaces.py
@@ -406,6 +406,18 @@ def show_counters(raw: bool, intf_name: typing.Optional[str],
return data
return _format_show_counters(data)
+def clear_counters(intf_name: typing.Optional[str],
+ intf_type: typing.Optional[str],
+ vif: bool, vrrp: bool):
+ for interface in filtered_interfaces(intf_name, intf_type, vif, vrrp):
+ interface.operational.clear_counters()
+
+def reset_counters(intf_name: typing.Optional[str],
+ intf_type: typing.Optional[str],
+ vif: bool, vrrp: bool):
+ for interface in filtered_interfaces(intf_name, intf_type, vif, vrrp):
+ interface.operational.reset_counters()
+
if __name__ == '__main__':
try:
res = vyos.opmode.run(sys.modules[__name__])