summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python/vyos/ethtool.py13
-rw-r--r--python/vyos/ifconfig/ethernet.py28
-rwxr-xr-xsrc/conf_mode/interfaces-ethernet.py2
3 files changed, 12 insertions, 31 deletions
diff --git a/python/vyos/ethtool.py b/python/vyos/ethtool.py
index 7e46969cf..4efc3a234 100644
--- a/python/vyos/ethtool.py
+++ b/python/vyos/ethtool.py
@@ -134,6 +134,12 @@ class Ethtool:
# ['Autonegotiate:', 'on']
self._flow_control_enabled = out.splitlines()[1].split()[-1]
+ def get_auto_negotiation(self):
+ return self._auto_negotiation
+
+ def get_driver_name(self):
+ return self._driver_name
+
def _get_generic(self, feature):
"""
Generic method to read self._features and return a tuple for feature
@@ -189,7 +195,7 @@ class Ethtool:
if duplex not in ['full', 'half']:
raise ValueError(f'Value "{duplex}" for duplex is invalid!')
- if self._driver_name in ['vmxnet3', 'virtio_net', 'xen_netfront']:
+ if self.get_driver_name() in ['vmxnet3', 'virtio_net', 'xen_netfront']:
return False
if speed in self._speed_duplex:
@@ -199,7 +205,7 @@ class Ethtool:
def check_flow_control(self):
""" Check if the NIC supports flow-control """
- if self._driver_name in ['vmxnet3', 'virtio_net', 'xen_netfront']:
+ if self.get_driver_name() in ['vmxnet3', 'virtio_net', 'xen_netfront']:
return False
return self._flow_control
@@ -208,6 +214,3 @@ class Ethtool:
raise ValueError('Interface does not support changing '\
'flow-control settings!')
return self._flow_control_enabled
-
- def get_auto_negotiation(self):
- return self._auto_negotiation
diff --git a/python/vyos/ifconfig/ethernet.py b/python/vyos/ifconfig/ethernet.py
index c4dfc7198..78fec1fa2 100644
--- a/python/vyos/ifconfig/ethernet.py
+++ b/python/vyos/ifconfig/ethernet.py
@@ -80,25 +80,6 @@ class EthernetIf(Interface):
super().__init__(ifname, **kargs)
self.ethtool = Ethtool(ifname)
- def get_driver_name(self):
- """
- Return the driver name used by NIC. Some NICs don't support all
- features e.g. changing link-speed, duplex
-
- Example:
- >>> from vyos.ifconfig import EthernetIf
- >>> i = EthernetIf('eth0')
- >>> i.get_driver_name()
- 'vmxnet3'
- """
- ifname = self.config['ifname']
- sysfs_file = f'/sys/class/net/{ifname}/device/driver/module'
- if os.path.exists(sysfs_file):
- link = os.readlink(sysfs_file)
- return os.path.basename(link)
- else:
- return None
-
def set_flow_control(self, enable):
"""
Changes the pause parameters of the specified Ethernet device.
@@ -116,8 +97,7 @@ class EthernetIf(Interface):
raise ValueError("Value out of range")
if not self.ethtool.check_flow_control():
- self._debug_msg(f'{driver_name} driver does not support changing '\
- 'flow control settings!')
+ self._debug_msg(f'NIC driver does not support changing flow control settings!')
return False
current = self.ethtool.get_flow_control()
@@ -151,10 +131,8 @@ class EthernetIf(Interface):
if duplex not in ['auto', 'full', 'half']:
raise ValueError("Value out of range (duplex)")
- driver_name = self.get_driver_name()
- if driver_name in ['vmxnet3', 'virtio_net', 'xen_netfront']:
- self._debug_msg(f'{driver_name} driver does not support changing '\
- 'speed/duplex settings!')
+ if not self.ethtool.check_speed_duplex(speed, duplex):
+ self._debug_msg(f'NIC driver does not support changing speed/duplex settings!')
return
# Get current speed and duplex settings:
diff --git a/src/conf_mode/interfaces-ethernet.py b/src/conf_mode/interfaces-ethernet.py
index 21a04f954..e7250fb49 100755
--- a/src/conf_mode/interfaces-ethernet.py
+++ b/src/conf_mode/interfaces-ethernet.py
@@ -126,7 +126,7 @@ def verify(ethernet):
if not os.path.exists(f'/sys/class/net/{ifname}/queues/rx-0/rps_cpus'):
raise ConfigError('Interface does not suport RPS!')
- driver = EthernetIf(ifname).get_driver_name()
+ driver = ethtool.get_driver_name()
# T3342 - Xen driver requires special treatment
if driver == 'vif':
if int(ethernet['mtu']) > 1500 and dict_search('offload.sg', ethernet) == None: