summaryrefslogtreecommitdiff
path: root/src
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
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')
-rwxr-xr-xsrc/conf_mode/interfaces-erspan.py52
-rwxr-xr-xsrc/conf_mode/interfaces-tunnel.py34
2 files changed, 13 insertions, 73 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
diff --git a/src/conf_mode/interfaces-tunnel.py b/src/conf_mode/interfaces-tunnel.py
index f03bc9d5d..034bd6dd1 100755
--- a/src/conf_mode/interfaces-tunnel.py
+++ b/src/conf_mode/interfaces-tunnel.py
@@ -29,6 +29,7 @@ from vyos.configverify import verify_bridge_delete
from vyos.configverify import verify_interface_exists
from vyos.configverify import verify_mtu_ipv6
from vyos.configverify import verify_vrf
+from vyos.configverify import verify_tunnel
from vyos.ifconfig import Interface
from vyos.ifconfig import GREIf
from vyos.ifconfig import GRETapIf
@@ -84,38 +85,7 @@ def verify(tunnel):
verify_mtu_ipv6(tunnel)
verify_address(tunnel)
verify_vrf(tunnel)
-
- if 'local_ip' not in tunnel and 'dhcp_interface' not in tunnel:
- raise ConfigError('local-ip is mandatory for tunnel')
-
- if 'remote_ip' not in tunnel and tunnel['encapsulation'] != 'gre':
- raise ConfigError('remote-ip is mandatory for tunnel')
-
- if {'local_ip', 'dhcp_interface'} <= set(tunnel):
- raise ConfigError('Can not use both local-ip and dhcp-interface')
-
- if tunnel['encapsulation'] in ['ipip6', 'ip6ip6', 'ip6gre']:
- error_ipv6 = 'Encapsulation mode requires IPv6'
- if 'local_ip' in tunnel and not is_ipv6(tunnel['local_ip']):
- raise ConfigError(f'{error_ipv6} local-ip')
-
- if 'remote_ip' in tunnel and not is_ipv6(tunnel['remote_ip']):
- raise ConfigError(f'{error_ipv6} remote-ip')
- else:
- error_ipv4 = 'Encapsulation mode requires IPv4'
- if 'local_ip' in tunnel and not is_ipv4(tunnel['local_ip']):
- raise ConfigError(f'{error_ipv4} local-ip')
-
- if 'remote_ip' in tunnel and not is_ipv4(tunnel['remote_ip']):
- raise ConfigError(f'{error_ipv4} remote-ip')
-
- if tunnel['encapsulation'] in ['sit', 'gre-bridge']:
- if 'source_interface' in tunnel:
- raise ConfigError('Option source-interface can not be used with ' \
- 'encapsulation "sit" or "gre-bridge"')
- elif tunnel['encapsulation'] == 'gre':
- if 'local_ip' in tunnel and is_ipv6(tunnel['local_ip']):
- raise ConfigError('Can not use local IPv6 address is for mGRE tunnels')
+ verify_tunnel(tunnel)
if 'source_interface' in tunnel:
verify_interface_exists(tunnel['source_interface'])