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. --- src/conf_mode/interfaces-ethernet.py | 5 +++++ src/tests/test_ethtool.py | 33 +++++++++++++++++++++++++++++++++ src/tests/test_find_device_file.py | 0 src/tests/test_util.py | 4 ---- 4 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 src/tests/test_ethtool.py mode change 100755 => 100644 src/tests/test_find_device_file.py (limited to 'src') diff --git a/src/conf_mode/interfaces-ethernet.py b/src/conf_mode/interfaces-ethernet.py index e82a3e0f1..378f400b8 100755 --- a/src/conf_mode/interfaces-ethernet.py +++ b/src/conf_mode/interfaces-ethernet.py @@ -91,7 +91,12 @@ def verify(ethernet): ethtool = Ethtool(ifname) if 'ring_buffer' in ethernet: max_rx = ethtool.get_rx_buffer() + if not max_rx: + raise ConfigError('Driver does not support RX ring-buffer configuration!') + max_tx = ethtool.get_tx_buffer() + if not max_tx: + raise ConfigError('Driver does not support TX ring-buffer configuration!') rx = dict_search('ring_buffer.rx', ethernet) if rx and int(rx) > int(max_rx): diff --git a/src/tests/test_ethtool.py b/src/tests/test_ethtool.py new file mode 100644 index 000000000..bc53b938a --- /dev/null +++ b/src/tests/test_ethtool.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2021 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 . + +from unittest import TestCase +from vyos.ethtool import Ethtool + +class TestVyOSEthtool(TestCase): + def test_ring_buffer(self): + tmp = Ethtool('lo') + self.assertEqual(tmp.get_rx_buffer(), None) + self.assertEqual(tmp.get_tx_buffer(), None) + + def test_fixed_settings(self): + tmp = Ethtool('lo') + self.assertTrue(tmp.is_fixed_lro()) + self.assertFalse(tmp.is_fixed_gro()) + self.assertFalse(tmp.is_fixed_gso()) + self.assertFalse(tmp.is_fixed_sg()) + + diff --git a/src/tests/test_find_device_file.py b/src/tests/test_find_device_file.py old mode 100755 new mode 100644 diff --git a/src/tests/test_util.py b/src/tests/test_util.py index f7405cbde..22bc085c5 100644 --- a/src/tests/test_util.py +++ b/src/tests/test_util.py @@ -17,11 +17,7 @@ from unittest import TestCase from vyos.util import mangle_dict_keys - class TestVyOSUtil(TestCase): - def setUp(self): - pass - def test_key_mangline(self): data = {"foo-bar": {"baz-quux": None}} expected_data = {"foo_bar": {"baz_quux": None}} -- cgit v1.2.3