summaryrefslogtreecommitdiff
path: root/python/vyos/ifconfig/ethernet.py
diff options
context:
space:
mode:
authorThomas Mangin <thomas.mangin@exa.net.uk>2020-03-26 13:04:49 +0000
committerThomas Mangin <thomas.mangin@exa.net.uk>2020-03-27 10:47:11 +0000
commit0d666d9aa45bc76322480baf30f863d714f1b0fa (patch)
tree5ac1821ee0da07483902af58b5ab4bf850cd2f25 /python/vyos/ifconfig/ethernet.py
parent583e9d907236a4a98fe40e97a378c1fb655f8a95 (diff)
downloadvyos-1x-0d666d9aa45bc76322480baf30f863d714f1b0fa.tar.gz
vyos-1x-0d666d9aa45bc76322480baf30f863d714f1b0fa.zip
ifconfig: T2158: never fail when setting flowcontrol
the result of the commands used to setup the interface is now checked. flowcontrol can not always be set on all interfaces, and when/if it fails, it prevents the interace to come up. This is problematic as it may prevent the router to come up. Therefore flowcontrol must be allowed to fail gracefully/silently.
Diffstat (limited to 'python/vyos/ifconfig/ethernet.py')
-rw-r--r--python/vyos/ifconfig/ethernet.py29
1 files changed, 18 insertions, 11 deletions
diff --git a/python/vyos/ifconfig/ethernet.py b/python/vyos/ifconfig/ethernet.py
index b3e652409..50552dc71 100644
--- a/python/vyos/ifconfig/ethernet.py
+++ b/python/vyos/ifconfig/ethernet.py
@@ -101,6 +101,8 @@ class EthernetIf(Interface):
>>> i = EthernetIf('eth0')
>>> i.set_flow_control(True)
"""
+ ifname = self.config['ifname']
+
if enable not in ['on', 'off']:
raise ValueError("Value out of range")
@@ -110,8 +112,15 @@ class EthernetIf(Interface):
return
# Get current flow control settings:
- cmd = '/sbin/ethtool --show-pause {0}'.format(self.config['ifname'])
- tmp = self._cmd(cmd)
+ cmd = f'/sbin/ethtool --show-pause {ifname}'
+ output, code = self._popen(cmd)
+ if code == 76:
+ # the interface does not support it
+ return ''
+ if code:
+ # never fail here as it prevent vyos to boot
+ print(f'unexpected return code {code} from {cmd}')
+ return ''
# The above command returns - with tabs:
#
@@ -119,23 +128,21 @@ class EthernetIf(Interface):
# Autonegotiate: on
# RX: off
# TX: off
- if re.search("Autonegotiate:\ton", tmp):
+ if re.search("Autonegotiate:\ton", output):
if enable == "on":
# flowcontrol is already enabled - no need to re-enable it again
# this will prevent the interface from flapping as applying the
# flow-control settings will take the interface down and bring
# it back up every time.
- return
+ return ''
# Assemble command executed on system. Unfortunately there is no way
# to change this setting via sysfs
- cmd = '/sbin/ethtool --pause {0} autoneg {1} tx {1} rx {1}'.format(
- self.config['ifname'], enable)
- try:
- # An exception will be thrown if the settings are not changed
- return self._cmd(cmd)
- except RuntimeError:
- pass
+ cmd = f'/sbin/ethtool --pause {ifname} autoneg {enable} tx {enable} rx {enable}'
+ output, code = self._popen(cmd)
+ if code:
+ print(f'could not set flowcontrol for {ifname}')
+ return output
def set_speed_duplex(self, speed, duplex):
"""