summaryrefslogtreecommitdiff
path: root/src/conf_mode/interfaces-erspan.py
diff options
context:
space:
mode:
authorjack9603301 <jack9603301@163.com>2020-12-13 20:30:23 +0800
committerjack9603301 <jack9603301@163.com>2021-02-02 13:58:00 +0800
commitc7d0865455c9bbf078765b7a53811286cf3dfb8b (patch)
tree7c3cbc94fe67fe1b97f58850da438625ef4fb3ae /src/conf_mode/interfaces-erspan.py
parenta8028063b3ed7a897aa265755dde37abaeb7520f (diff)
downloadvyos-1x-c7d0865455c9bbf078765b7a53811286cf3dfb8b.tar.gz
vyos-1x-c7d0865455c9bbf078765b7a53811286cf3dfb8b.zip
tunnel: T3030: Modify the command line to streamline configuration (support package type automatic detection)
Diffstat (limited to 'src/conf_mode/interfaces-erspan.py')
-rwxr-xr-xsrc/conf_mode/interfaces-erspan.py52
1 files changed, 11 insertions, 41 deletions
diff --git a/src/conf_mode/interfaces-erspan.py b/src/conf_mode/interfaces-erspan.py
index 1bb5a4a9d..2d65b834c 100755
--- a/src/conf_mode/interfaces-erspan.py
+++ b/src/conf_mode/interfaces-erspan.py
@@ -25,9 +25,8 @@ from vyos.configdict import dict_merge
from vyos.configdict import get_interface_dict
from vyos.configdict import node_changed
from vyos.configdict import leaf_node_changed
-from vyos.configverify import verify_vrf
-from vyos.configverify import verify_address
from vyos.configverify import verify_mtu_ipv6
+from vyos.configverify import verify_tunnel
from vyos.ifconfig import Interface
from vyos.ifconfig import ERSpanIf
from vyos.ifconfig import ER6SpanIf
@@ -51,7 +50,7 @@ def get_config(config=None):
erspan = get_interface_dict(conf, base)
tmp = leaf_node_changed(conf, ['encapsulation'])
- if tmp:
+ if tmp:
erspan.update({'encapsulation_changed': {}})
return erspan
@@ -61,57 +60,28 @@ def verify(erspan):
return None
if 'encapsulation' not in erspan:
- raise ConfigError('Must configure the ERSPAN tunnel encapsulation for '\
+ raise ConfigError('Unable to detect the following ERSPAN tunnel encapsulation'\
'{ifname}!'.format(**erspan))
verify_mtu_ipv6(erspan)
- verify_address(erspan)
- verify_vrf(erspan)
-
- if 'local_ip' not in erspan:
- raise ConfigError('local-ip is mandatory for ERSPAN tunnel')
-
- if 'remote_ip' not in erspan:
- raise ConfigError('remote-ip is mandatory for ERSPAN tunnel')
-
- if erspan['encapsulation'] in ['ip6erspan']:
- error_ipv6 = 'Encapsulation mode requires IPv6'
- if 'local_ip' in erspan and not is_ipv6(erspan['local_ip']):
- raise ConfigError(f'{error_ipv6} local-ip')
-
- if 'remote_ip' in erspan and not is_ipv6(erspan['remote_ip']):
- raise ConfigError(f'{error_ipv6} remote-ip')
- else:
- error_ipv4 = 'Encapsulation mode requires IPv4'
- if 'local_ip' in erspan and not is_ipv4(erspan['local_ip']):
- raise ConfigError(f'{error_ipv4} local-ip')
-
- if 'remote_ip' in erspan and not is_ipv4(erspan['remote_ip']):
- raise ConfigError(f'{error_ipv4} remote-ip')
-
- if 'parameters' not in erspan:
- raise ConfigError('parameters is mandatory for ERSPAN tunnel')
+ verify_tunnel(erspan)
key = dict_search('parameters.ip.key',erspan)
if key == None:
raise ConfigError('parameters.ip.key is mandatory for ERSPAN tunnel')
-
- if erspan['encapsulation'] == 'erspan':
- if 'local_ip' in erspan and is_ipv6(erspan['local_ip']):
- raise ConfigError('Can not use local IPv6 address is for ERSPAN tunnels')
def generate(erspan):
return None
def apply(erspan):
- if 'deleted' in erspan or 'encapsulation_changed' in erspan:
- if erspan['ifname'] in interfaces():
- tmp = Interface(erspan['ifname'])
- tmp.remove()
- if 'deleted' in erspan:
- return None
-
+ if 'deleted' in erspan or 'encapsulation_changed' in erspan:
+ if erspan['ifname'] in interfaces():
+ tmp = Interface(erspan['ifname'])
+ tmp.remove()
+ if 'deleted' in erspan:
+ return None
+
dispatch = {
'erspan': ERSpanIf,
'ip6erspan': ER6SpanIf