diff options
author | Christian Poessinger <christian@poessinger.com> | 2019-12-31 12:36:53 +0100 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2019-12-31 13:00:03 +0100 |
commit | db658825c7bb17e3221474e22b78306dc3edd2df (patch) | |
tree | de2c5ff83533e5342f0557d8e6c5e2f3791bbf15 /python/vyos | |
parent | f4a882e14ea583ca220ba1c3b3344789aeb25372 (diff) | |
download | vyos-1x-db658825c7bb17e3221474e22b78306dc3edd2df.tar.gz vyos-1x-db658825c7bb17e3221474e22b78306dc3edd2df.zip |
l2tpv3: T1923: implementation in XML/Python
Tested using:
R1:
---
set interfaces l2tpv3 l2tpeth10 address '2001:db8:beef::1/64'
set interfaces l2tpv3 l2tpeth10 address '100.0.0.1/24'
set interfaces l2tpv3 l2tpeth10 destination-port '3000'
set interfaces l2tpv3 l2tpeth10 encapsulation 'udp'
set interfaces l2tpv3 l2tpeth10 local-ip '172.18.201.10'
set interfaces l2tpv3 l2tpeth10 peer-session-id '10'
set interfaces l2tpv3 l2tpeth10 peer-tunnel-id '100'
set interfaces l2tpv3 l2tpeth10 remote-ip '172.18.204.10'
set interfaces l2tpv3 l2tpeth10 session-id '20'
set interfaces l2tpv3 l2tpeth10 source-port '6000'
set interfaces l2tpv3 l2tpeth10 tunnel-id '200'
R2:
---
set interfaces l2tpv3 l2tpeth10 address '2001:db8:beef::2/64'
set interfaces l2tpv3 l2tpeth10 address '100.0.0.2/24'
set interfaces l2tpv3 l2tpeth10 destination-port '6000'
set interfaces l2tpv3 l2tpeth10 encapsulation 'udp'
set interfaces l2tpv3 l2tpeth10 local-ip '172.18.204.10'
set interfaces l2tpv3 l2tpeth10 peer-session-id '20'
set interfaces l2tpv3 l2tpeth10 peer-tunnel-id '200'
set interfaces l2tpv3 l2tpeth10 remote-ip '172.18.201.10'
set interfaces l2tpv3 l2tpeth10 session-id '10'
set interfaces l2tpv3 l2tpeth10 source-port '3000'
set interfaces l2tpv3 l2tpeth10 tunnel-id '100'
Diffstat (limited to 'python/vyos')
-rw-r--r-- | python/vyos/ifconfig.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/python/vyos/ifconfig.py b/python/vyos/ifconfig.py index 79e52eb38..1c5a7cd14 100644 --- a/python/vyos/ifconfig.py +++ b/python/vyos/ifconfig.py @@ -1704,3 +1704,79 @@ class GeneveIf(Interface): 'remote': '' } return config + +class L2TPv3If(Interface): + """ + The Linux bonding driver provides a method for aggregating multiple network + interfaces into a single logical "bonded" interface. The behavior of the + bonded interfaces depends upon the mode; generally speaking, modes provide + either hot standby or load balancing services. Additionally, link integrity + monitoring may be performed. + """ + def __init__(self, ifname, config=''): + if config: + self._ifname = ifname + if not os.path.exists('/sys/class/net/{}'.format(self._ifname)): + # create tunnel interface + cmd = 'ip l2tp add tunnel tunnel_id {} '.format(config['tunnel_id']) + cmd += 'peer_tunnel_id {} '.format(config['peer_tunnel_id']) + cmd += 'udp_sport {} '.format(config['local_port']) + cmd += 'udp_dport {} '.format(config['remote_port']) + cmd += 'encap {} '.format(config['encapsulation']) + cmd += 'local {} '.format(config['local_address']) + cmd += 'remote {} '.format(config['remote_address']) + self._cmd(cmd) + + # setup session + cmd = 'ip l2tp add session name {} '.format(self._ifname) + cmd += 'tunnel_id {} '.format(config['tunnel_id']) + cmd += 'session_id {} '.format(config['session_id']) + cmd += 'peer_session_id {} '.format(config['peer_session_id']) + self._cmd(cmd) + + # interface is always A/D down. It needs to be enabled explicitly + self.set_state('down') + + super().__init__(ifname, type='l2tp') + + def remove(self): + """ + Remove interface from operating system. Removing the interface + deconfigures all assigned IP addresses. + Example: + >>> from vyos.ifconfig import L2TPv3If + >>> i = L2TPv3If('l2tpeth0') + >>> i.remove() + """ + + if os.path.exists('/sys/class/net/{}'.format(self._ifname)): + # interface is always A/D down. It needs to be enabled explicitly + self.set_state('down') + + #cmd = 'ip l2tp add tunnel tunnel_id {} '.format(config['tunnel_id']) + + # call remove of parent class + super().remove() + + @staticmethod + def get_config(): + """ + L2TPv3 interfaces require a configuration when they are added using + iproute2. This static method will provide the configuration dictionary + used by this class. + + Example: + >> dict = L2TPv3If().get_config() + """ + config = { + 'peer_tunnel_id': '', + 'local_port': 0, + 'remote_port': 0, + 'encapsulation': 'udp', + 'local_address': '', + 'remote_address': '', + 'session_id': '', + 'tunnel_id': '', + 'peer_session_id': '' + } + return config |