From 159899ed9ba5661e4bdcfdadf1292e237f117063 Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Wed, 24 Feb 2021 22:24:44 +0100 Subject: ethernet: T3163: not all NIC drivers support ring-buffer configuration In addition to commit cf1156a60e ("ethernet: T3163: probe driver for maximum rx/tx ring-buffer size") this extends the logic in a way as not every driver supports setting the buffers at all so it will properly error out. When invoking "ethtool -g" both stdout and stderr are captured and no exception is raised if it's an unsupported driver feature. The verify() section will inform the user about the illegal operation. --- python/vyos/ethtool.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'python/vyos/ethtool.py') diff --git a/python/vyos/ethtool.py b/python/vyos/ethtool.py index cef7d476f..68c8a6656 100644 --- a/python/vyos/ethtool.py +++ b/python/vyos/ethtool.py @@ -13,7 +13,7 @@ # You should have received a copy of the GNU Lesser General Public # License along with this library. If not, see . -from vyos.util import cmd +from vyos.util import popen class Ethtool: """ @@ -37,9 +37,9 @@ class Ethtool: def __init__(self, ifname): # Now populate features dictionaty - tmp = cmd(f'ethtool -k {ifname}') + out, err = popen(f'ethtool -k {ifname}') # skip the first line, it only says: "Features for eth0": - for line in tmp.splitlines()[1:]: + for line in out.splitlines()[1:]: if ":" in line: key, value = [s.strip() for s in line.strip().split(":", 1)] fixed = "fixed" in value @@ -50,10 +50,10 @@ class Ethtool: "fixed": fixed } - tmp = cmd(f'ethtool -g {ifname}') + out, err = popen(f'ethtool -g {ifname}') # We are only interested in line 2-5 which contains the device maximum # ringbuffers - for line in tmp.splitlines()[2:6]: + for line in out.splitlines()[2:6]: if ':' in line: key, value = [s.strip() for s in line.strip().split(":", 1)] key = key.lower().replace(' ', '_') @@ -91,11 +91,11 @@ class Ethtool: return self.features.get('udp-fragmentation-offload', True).get('fixed', True) def get_rx_buffer(self): - # in case of a missing configuration rather return a "small" - # buffer of only 512 bytes. - return self.ring_buffers.get('rx', '512') + # Configuration of RX ring-buffers is not supported on every device, + # thus when it's impossible return None + return self.ring_buffers.get('rx', None) def get_tx_buffer(self): - # in case of a missing configuration rather return a "small" - # buffer of only 512 bytes. - return self.ring_buffers.get('tx', '512') + # Configuration of RX ring-buffers is not supported on every device, + # thus when it's impossible return None + return self.ring_buffers.get('tx', None) -- cgit v1.2.3