summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-08-03 21:29:18 +0200
committerGitHub <noreply@github.com>2021-08-03 21:29:18 +0200
commitbc9936e5bebd1388b17948a9fdca56da68305542 (patch)
tree6bab23f39c995b88033d3b0716775c56eb8f1e0d
parentf0148b9306846a34c86f1726fd7ffb37143c94c7 (diff)
parent7637a15bc06481f69ba1ad262151fef68f9a0eab (diff)
downloadvyos-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.py24
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}'