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 | |
| 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')
| -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  | 
