diff options
author | Christian Poessinger <christian@poessinger.com> | 2021-08-03 21:29:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-03 21:29:18 +0200 |
commit | bc9936e5bebd1388b17948a9fdca56da68305542 (patch) | |
tree | 6bab23f39c995b88033d3b0716775c56eb8f1e0d | |
parent | f0148b9306846a34c86f1726fd7ffb37143c94c7 (diff) | |
parent | 7637a15bc06481f69ba1ad262151fef68f9a0eab (diff) | |
download | vyos-1x-bc9936e5bebd1388b17948a9fdca56da68305542.tar.gz vyos-1x-bc9936e5bebd1388b17948a9fdca56da68305542.zip |
Merge pull request #950 from sever-sever/T1594
l2tpv3: T1594: Fix timeout before set l2tpv3 interface
-rw-r--r-- | python/vyos/ifconfig/l2tpv3.py | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/python/vyos/ifconfig/l2tpv3.py b/python/vyos/ifconfig/l2tpv3.py index 7ff0fdd0e..fcd1fbf81 100644 --- a/python/vyos/ifconfig/l2tpv3.py +++ b/python/vyos/ifconfig/l2tpv3.py @@ -13,8 +13,28 @@ # You should have received a copy of the GNU Lesser General Public # License along with this library. If not, see <http://www.gnu.org/licenses/>. +from time import sleep +from time import time +from vyos.util import run from vyos.ifconfig.interface import Interface +def wait_for_add_l2tpv3(timeout=10, sleep_interval=1, cmd=None): + ''' + In some cases, we need to wait until local address is assigned. + And only then can the l2tpv3 tunnel be configured. + For example when ipv6 address in tentative state + or we wait for some routing daemon for remote address. + ''' + start_time = time() + test_command = cmd + while True: + if (start_time + timeout) < time(): + return None + result = run(test_command) + if result == 0: + return True + sleep(sleep_interval) + @Interface.register class L2TPv3If(Interface): """ @@ -43,7 +63,9 @@ class L2TPv3If(Interface): cmd += ' encap {encapsulation}' cmd += ' local {source_address}' cmd += ' remote {remote}' - self._cmd(cmd.format(**self.config)) + c = cmd.format(**self.config) + # wait until the local/remote address is available, but no more 10 sec. + wait_for_add_l2tpv3(cmd=c) # setup session cmd = 'ip l2tp add session name {ifname}' |