From 71a2b2502a2e44d45fa34b87b7fff85ee1975ba0 Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Wed, 16 Oct 2019 07:46:47 +0200 Subject: Revert "Python/ifconfig: T1712: wait when changing interface state" This reverts commit 1257d7851866d42287018b38dd871f279b87286a. It will delay network interface configuration everywhere when e.g. no network cable is plugged in. We should find the root cause why DHCPd sometimes did not start. --- python/vyos/ifconfig.py | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) (limited to 'python/vyos/ifconfig.py') diff --git a/python/vyos/ifconfig.py b/python/vyos/ifconfig.py index 3225971ef..0692f77f3 100644 --- a/python/vyos/ifconfig.py +++ b/python/vyos/ifconfig.py @@ -71,7 +71,6 @@ class Interface: >>> i = Interface('eth0') """ self._ifname = str(ifname) - self._statechange_wait = True if not os.path.exists('/sys/class/net/{}'.format(ifname)) and not type: raise Exception('interface "{}" not found'.format(self._ifname)) @@ -320,22 +319,7 @@ class Interface: # Assemble command executed on system. Unfortunately there is no way # to up/down an interface via sysfs cmd = 'ip link set dev {} {}'.format(self._ifname, state) - tmp = self._cmd(cmd) - - if self._statechange_wait: - # better safe then sorry - wait until the interface is really up - # but only for a given period of time to avoid potential deadlocks! - cnt = 0 - while self.get_state() != state: - cnt += 1 - if cnt == 50: - print('Interface {} could not be brought up in time ...'.format(self._ifname)) - break - - # sleep 250ms - sleep(0.250) - - return tmp + return self._cmd(cmd) def set_proxy_arp(self, enable): """ @@ -1408,7 +1392,6 @@ class WireGuardIf(Interface): def __init__(self, ifname): super().__init__(ifname, type='wireguard') - self._statechange_wait = False self.config = { 'port': 0, -- cgit v1.2.3 From ca4f0dc76f918323c69905399a2dba9b2a21a8ec Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Fri, 18 Oct 2019 18:05:46 +0200 Subject: Python/ifconfig: T1557: get_status() must use admin state not operstate --- python/vyos/ifconfig.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'python/vyos/ifconfig.py') diff --git a/python/vyos/ifconfig.py b/python/vyos/ifconfig.py index 0692f77f3..1ffa10978 100644 --- a/python/vyos/ifconfig.py +++ b/python/vyos/ifconfig.py @@ -16,6 +16,7 @@ import os import re import jinja2 +import json from vyos.validate import * from ipaddress import IPv4Network, IPv6Address @@ -116,7 +117,7 @@ class Interface: self._debug_msg("returned:\n{}".format(tmp.decode())) # do we need some error checking code here? - return tmp + return tmp.decode() def _read_sysfs(self, filename): """ @@ -300,8 +301,10 @@ class Interface: >>> Interface('eth0').get_state() 'up' """ - return self._read_sysfs('/sys/class/net/{}/operstate' - .format(self._ifname)) + cmd = 'ip -json link show dev {}'.format(self._ifname) + tmp = self._cmd(cmd) + out = json.loads(tmp) + return out[0]['operstate'].lower() def set_state(self, state): """ -- cgit v1.2.3 From 04c02bcd100f253832e9a57736cf0d1a9f32fc5f Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Fri, 18 Oct 2019 18:07:21 +0200 Subject: Python/ifconfig: T1712: always start DHCP when configured DHCP was only started when the interface operstate was set to up but this is wrong. An interface can be configured as DHCP interface and DHCP client must be launched even when the physical interface becomes available n-minutes later. DHCP client then can ask for an IP assignemnt by DHCP. Tested by starting DHCP client on a not connected ethernet interface. Address was assigned later on after link became ready. --- python/vyos/ifconfig.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'python/vyos/ifconfig.py') diff --git a/python/vyos/ifconfig.py b/python/vyos/ifconfig.py index 1ffa10978..3470b3aa6 100644 --- a/python/vyos/ifconfig.py +++ b/python/vyos/ifconfig.py @@ -521,14 +521,13 @@ class Interface: with open(self._dhcp_cfg_file, 'w') as f: f.write(dhcp_text) - if self.get_state() == 'up': - cmd = 'start-stop-daemon --start --quiet --pidfile ' + \ - self._dhcp_pid_file - cmd += ' --exec /sbin/dhclient --' - # now pass arguments to dhclient binary - cmd += ' -4 -nw -cf {} -pf {} -lf {} {}'.format( - self._dhcp_cfg_file, self._dhcp_pid_file, self._dhcp_lease_file, self._ifname) - return self._cmd(cmd) + cmd = 'start-stop-daemon --start --quiet --pidfile ' + \ + self._dhcp_pid_file + cmd += ' --exec /sbin/dhclient --' + # now pass arguments to dhclient binary + cmd += ' -4 -nw -cf {} -pf {} -lf {} {}'.format( + self._dhcp_cfg_file, self._dhcp_pid_file, self._dhcp_lease_file, self._ifname) + return self._cmd(cmd) def _del_dhcp(self): -- cgit v1.2.3