diff options
author | Lucas Christian <lucas@lucasec.com> | 2024-07-03 23:14:45 -0700 |
---|---|---|
committer | Lucas Christian <lucas@lucasec.com> | 2024-07-26 18:26:30 -0700 |
commit | 376e2d898f26c13a31f80d877f4e2621fd6efb0f (patch) | |
tree | 8537e50f3c62b4dc880af60b57c4ccce612bdf44 /python/vyos/ifconfig/vti.py | |
parent | 4d2c89dcd50d3c158dc76ac5ab843dd66105bc02 (diff) | |
download | vyos-1x-376e2d898f26c13a31f80d877f4e2621fd6efb0f.tar.gz vyos-1x-376e2d898f26c13a31f80d877f4e2621fd6efb0f.zip |
T5873: vpn ipsec: re-write of ipsec updown hook
Diffstat (limited to 'python/vyos/ifconfig/vti.py')
-rw-r--r-- | python/vyos/ifconfig/vti.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/python/vyos/ifconfig/vti.py b/python/vyos/ifconfig/vti.py index 9511386f4..251cbeb36 100644 --- a/python/vyos/ifconfig/vti.py +++ b/python/vyos/ifconfig/vti.py @@ -15,6 +15,7 @@ from vyos.ifconfig.interface import Interface from vyos.utils.dict import dict_search +from vyos.utils.vti_updown_db import vti_updown_db_exists, open_vti_updown_db_readonly @Interface.register class VTIIf(Interface): @@ -27,6 +28,10 @@ class VTIIf(Interface): }, } + def __init__(self, ifname, **kwargs): + self.bypass_vti_updown_db = kwargs.pop("bypass_vti_updown_db", False) + super().__init__(ifname, **kwargs) + def _create(self): # This table represents a mapping from VyOS internal config dict to # arguments used by iproute2. For more information please refer to: @@ -57,8 +62,18 @@ class VTIIf(Interface): self.set_interface('admin_state', 'down') def set_admin_state(self, state): - """ Handled outside by /etc/ipsec.d/vti-up-down """ - pass + """ + Set interface administrative state to be 'up' or 'down'. + + The interface will only be brought 'up' if ith is attached to an + active ipsec site-to-site connection or remote access connection. + """ + if state == 'down' or self.bypass_vti_updown_db: + super().set_admin_state(state) + elif vti_updown_db_exists(): + with open_vti_updown_db_readonly() as db: + if db.wantsInterfaceUp(self.ifname): + super().set_admin_state(state) def get_mac(self): """ Get a synthetic MAC address. """ |