summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJernej Jakob <jernej.jakob@gmail.com>2020-04-22 12:39:22 +0200
committerJernej Jakob <jernej.jakob@gmail.com>2020-04-23 16:09:37 +0200
commit4940bea4f7b8574d30876fd3d0456e75f6f29877 (patch)
treee422582794edcdc00d14f3ae8578138da43eb6e6
parentd6c08414d55eadd8232b693303f2b14bfe121c01 (diff)
downloadvyos-1x-4940bea4f7b8574d30876fd3d0456e75f6f29877.tar.gz
vyos-1x-4940bea4f7b8574d30876fd3d0456e75f6f29877.zip
interfaces: T2362: allow setting multiple 'ipv6 address eui64'
-rw-r--r--interface-definitions/include/ipv6-address.xml.i5
-rw-r--r--python/vyos/configdict.py11
-rwxr-xr-xsrc/conf_mode/interfaces-bonding.py11
-rwxr-xr-xsrc/conf_mode/interfaces-bridge.py11
-rwxr-xr-xsrc/conf_mode/interfaces-ethernet.py11
-rwxr-xr-xsrc/conf_mode/interfaces-l2tpv3.py4
-rwxr-xr-xsrc/conf_mode/interfaces-openvpn.py12
-rwxr-xr-xsrc/conf_mode/interfaces-pseudo-ethernet.py11
-rwxr-xr-xsrc/conf_mode/interfaces-vxlan.py4
-rwxr-xr-xsrc/conf_mode/interfaces-wireless.py11
10 files changed, 43 insertions, 48 deletions
diff --git a/interface-definitions/include/ipv6-address.xml.i b/interface-definitions/include/ipv6-address.xml.i
index 507d5dcc1..ffc6ef933 100644
--- a/interface-definitions/include/ipv6-address.xml.i
+++ b/interface-definitions/include/ipv6-address.xml.i
@@ -8,14 +8,15 @@
</leafNode>
<leafNode name="eui64">
<properties>
- <help>ssign IPv6 address using EUI-64 based on MAC address</help>
+ <help>Prefix for IPv6 address with MAC-based EUI-64</help>
<valueHelp>
<format>ipv6net</format>
- <description>IPv6 address and prefix length</description>
+ <description>IPv6 network and prefix length</description>
</valueHelp>
<constraint>
<validator name="ipv6-prefix"/>
</constraint>
+ <multi/>
</properties>
</leafNode>
</children>
diff --git a/python/vyos/configdict.py b/python/vyos/configdict.py
index 71c85b36d..9ea89194f 100644
--- a/python/vyos/configdict.py
+++ b/python/vyos/configdict.py
@@ -201,15 +201,14 @@ def vlan_to_dict(conf):
if conf.exists('ipv6 address autoconf'):
vlan['ipv6_autoconf'] = 1
- # Get prefix for IPv6 addressing based on MAC address (EUI-64)
+ # Get prefixes for IPv6 addressing based on MAC address (EUI-64)
if conf.exists('ipv6 address eui64'):
- vlan['ipv6_eui64_prefix'].append(conf.return_value('ipv6 address eui64'))
+ vlan['ipv6_eui64_prefix'] = conf.return_values('ipv6 address eui64')
- # Determine currently effective EUI64 address - to determine which
+ # Determine currently effective EUI64 addresses - to determine which
# address is no longer valid and needs to be removed
- eff_addr = conf.return_effective_value('ipv6 address eui64')
- if eff_addr and eff_addr not in vlan['ipv6_eui64_prefix']:
- vlan['ipv6_eui64_prefix_remove'].append(eff_addr)
+ eff_addr = conf.return_effective_values('ipv6 address eui64')
+ vlan['ipv6_eui64_prefix_remove'] = list_diff(eff_addr, vlan['ipv6_eui64_prefix'])
# add the link-local by default to make IPv6 work
vlan['ipv6_eui64_prefix'].append('fe80::/64')
diff --git a/src/conf_mode/interfaces-bonding.py b/src/conf_mode/interfaces-bonding.py
index 001da081c..6693f3a13 100755
--- a/src/conf_mode/interfaces-bonding.py
+++ b/src/conf_mode/interfaces-bonding.py
@@ -203,15 +203,14 @@ def get_config():
if conf.exists('ipv6 address autoconf'):
bond['ipv6_autoconf'] = 1
- # Get prefix for IPv6 addressing based on MAC address (EUI-64)
+ # Get prefixes for IPv6 addressing based on MAC address (EUI-64)
if conf.exists('ipv6 address eui64'):
- bond['ipv6_eui64_prefix'].append(conf.return_value('ipv6 address eui64'))
+ bond['ipv6_eui64_prefix'] = conf.return_values('ipv6 address eui64')
- # Determine currently effective EUI64 address - to determine which
+ # Determine currently effective EUI64 addresses - to determine which
# address is no longer valid and needs to be removed
- eff_addr = conf.return_effective_value('ipv6 address eui64')
- if eff_addr and eff_addr not in bond['ipv6_eui64_prefix']:
- bond['ipv6_eui64_prefix_remove'].append(eff_addr)
+ eff_addr = conf.return_effective_values('ipv6 address eui64')
+ bond['ipv6_eui64_prefix_remove'] = list_diff(eff_addr, bond['ipv6_eui64_prefix'])
# add the link-local by default to make IPv6 work
bond['ipv6_eui64_prefix'].append('fe80::/64')
diff --git a/src/conf_mode/interfaces-bridge.py b/src/conf_mode/interfaces-bridge.py
index 2ad5ecf2b..d4470ef26 100755
--- a/src/conf_mode/interfaces-bridge.py
+++ b/src/conf_mode/interfaces-bridge.py
@@ -161,15 +161,14 @@ def get_config():
if conf.exists('ipv6 address autoconf'):
bridge['ipv6_autoconf'] = 1
- # Get prefix for IPv6 addressing based on MAC address (EUI-64)
+ # Get prefixes for IPv6 addressing based on MAC address (EUI-64)
if conf.exists('ipv6 address eui64'):
- bridge['ipv6_eui64_prefix'].append(conf.return_value('ipv6 address eui64'))
+ bridge['ipv6_eui64_prefix'] = conf.return_values('ipv6 address eui64')
- # Determine currently effective EUI64 address - to determine which
+ # Determine currently effective EUI64 addresses - to determine which
# address is no longer valid and needs to be removed
- eff_addr = conf.return_effective_value('ipv6 address eui64')
- if eff_addr and eff_addr not in bridge['ipv6_eui64_prefix']:
- bridge['ipv6_eui64_prefix_remove'].append(eff_addr)
+ eff_addr = conf.return_effective_values('ipv6 address eui64')
+ bridge['ipv6_eui64_prefix_remove'] = list_diff(eff_addr, bridge['ipv6_eui64_prefix'])
# add the link-local by default to make IPv6 work
bridge['ipv6_eui64_prefix'].append('fe80::/64')
diff --git a/src/conf_mode/interfaces-ethernet.py b/src/conf_mode/interfaces-ethernet.py
index f620cc6ab..db8e2cd3c 100755
--- a/src/conf_mode/interfaces-ethernet.py
+++ b/src/conf_mode/interfaces-ethernet.py
@@ -176,15 +176,14 @@ def get_config():
if conf.exists('ipv6 address autoconf'):
eth['ipv6_autoconf'] = 1
- # Get prefix for IPv6 addressing based on MAC address (EUI-64)
+ # Get prefixes for IPv6 addressing based on MAC address (EUI-64)
if conf.exists('ipv6 address eui64'):
- eth['ipv6_eui64_prefix'].append(conf.return_value('ipv6 address eui64'))
+ eth['ipv6_eui64_prefix'] = conf.return_values('ipv6 address eui64')
- # Determine currently effective EUI64 address - to determine which
+ # Determine currently effective EUI64 addresses - to determine which
# address is no longer valid and needs to be removed
- eff_addr = conf.return_effective_value('ipv6 address eui64')
- if eff_addr and eff_addr not in eth['ipv6_eui64_prefix']:
- eth['ipv6_eui64_prefix_remove'].append(eff_addr)
+ eff_addr = conf.return_effective_values('ipv6 address eui64')
+ eth['ipv6_eui64_prefix_remove'] = list_diff(eff_addr, eth['ipv6_eui64_prefix'])
# add the link-local by default to make IPv6 work
eth['ipv6_eui64_prefix'].append('fe80::/64')
diff --git a/src/conf_mode/interfaces-l2tpv3.py b/src/conf_mode/interfaces-l2tpv3.py
index 45b618148..a18cc6161 100755
--- a/src/conf_mode/interfaces-l2tpv3.py
+++ b/src/conf_mode/interfaces-l2tpv3.py
@@ -113,9 +113,9 @@ def get_config():
if conf.exists('ipv6 address autoconf'):
l2tpv3['ipv6_autoconf'] = 1
- # Get prefix for IPv6 addressing based on MAC address (EUI-64)
+ # Get prefixes for IPv6 addressing based on MAC address (EUI-64)
if conf.exists('ipv6 address eui64'):
- l2tpv3['ipv6_eui64_prefix'].append(conf.return_value('ipv6 address eui64'))
+ l2tpv3['ipv6_eui64_prefix'] = conf.return_values('ipv6 address eui64')
# add the link-local by default to make IPv6 work
l2tpv3['ipv6_eui64_prefix'].append('fe80::/64')
diff --git a/src/conf_mode/interfaces-openvpn.py b/src/conf_mode/interfaces-openvpn.py
index 469793910..668dcabb4 100755
--- a/src/conf_mode/interfaces-openvpn.py
+++ b/src/conf_mode/interfaces-openvpn.py
@@ -25,6 +25,7 @@ from time import sleep
from shutil import rmtree
from vyos.config import Config
+from vyos.configdict import list_diff
from vyos.ifconfig import VTunIf
from vyos.template import render
from vyos.util import call, chown, chmod_600, chmod_755
@@ -315,15 +316,14 @@ def get_config():
if conf.exists('ipv6 address autoconf'):
openvpn['ipv6_autoconf'] = 1
- # Get prefix for IPv6 addressing based on MAC address (EUI-64)
+ # Get prefixes for IPv6 addressing based on MAC address (EUI-64)
if conf.exists('ipv6 address eui64'):
- openvpn['ipv6_eui64_prefix'].append(conf.return_value('ipv6 address eui64'))
+ openvpn['ipv6_eui64_prefix'] = conf.return_values('ipv6 address eui64')
- # Determine currently effective EUI64 address - to determine which
+ # Determine currently effective EUI64 addresses - to determine which
# address is no longer valid and needs to be removed
- eff_addr = conf.return_effective_value('ipv6 address eui64')
- if eff_addr and eff_addr not in openvpn['ipv6_eui64_prefix']:
- openvpn['ipv6_eui64_prefix_remove'].append(eff_addr)
+ eff_addr = conf.return_effective_values('ipv6 address eui64')
+ openvpn['ipv6_eui64_prefix_remove'] = list_diff(eff_addr, openvpn['ipv6_eui64_prefix'])
# add the link-local by default to make IPv6 work
openvpn['ipv6_eui64_prefix'].append('fe80::/64')
diff --git a/src/conf_mode/interfaces-pseudo-ethernet.py b/src/conf_mode/interfaces-pseudo-ethernet.py
index bf19e46b9..2f86a3bea 100755
--- a/src/conf_mode/interfaces-pseudo-ethernet.py
+++ b/src/conf_mode/interfaces-pseudo-ethernet.py
@@ -158,15 +158,14 @@ def get_config():
if conf.exists('ipv6 address autoconf'):
peth['ipv6_autoconf'] = 1
- # Get prefix for IPv6 addressing based on MAC address (EUI-64)
+ # Get prefixes for IPv6 addressing based on MAC address (EUI-64)
if conf.exists('ipv6 address eui64'):
- peth['ipv6_eui64_prefix'].append(conf.return_value('ipv6 address eui64'))
+ peth['ipv6_eui64_prefix'] = conf.return_values('ipv6 address eui64')
- # Determine currently effective EUI64 address - to determine which
+ # Determine currently effective EUI64 addresses - to determine which
# address is no longer valid and needs to be removed
- eff_addr = conf.return_effective_value('ipv6 address eui64')
- if eff_addr and eff_addr not in peth['ipv6_eui64_prefix']:
- peth['ipv6_eui64_prefix_remove'].append(eff_addr)
+ eff_addr = conf.return_effective_values('ipv6 address eui64')
+ peth['ipv6_eui64_prefix_remove'] = list_diff(eff_addr, peth['ipv6_eui64_prefix'])
# add the link-local by default to make IPv6 work
peth['ipv6_eui64_prefix'].append('fe80::/64')
diff --git a/src/conf_mode/interfaces-vxlan.py b/src/conf_mode/interfaces-vxlan.py
index 69dbe32d8..3ff051eed 100755
--- a/src/conf_mode/interfaces-vxlan.py
+++ b/src/conf_mode/interfaces-vxlan.py
@@ -116,9 +116,9 @@ def get_config():
if conf.exists('ipv6 address autoconf'):
vxlan['ipv6_autoconf'] = 1
- # Get prefix for IPv6 addressing based on MAC address (EUI-64)
+ # Get prefixes for IPv6 addressing based on MAC address (EUI-64)
if conf.exists('ipv6 address eui64'):
- vxlan['ipv6_eui64_prefix'].append(conf.return_value('ipv6 address eui64'))
+ vxlan['ipv6_eui64_prefix'] = conf.return_values('ipv6 address eui64')
# add the link-local by default to make IPv6 work
vxlan['ipv6_eui64_prefix'].append('fe80::/64')
diff --git a/src/conf_mode/interfaces-wireless.py b/src/conf_mode/interfaces-wireless.py
index 82a5a892a..b25a094e2 100755
--- a/src/conf_mode/interfaces-wireless.py
+++ b/src/conf_mode/interfaces-wireless.py
@@ -369,15 +369,14 @@ def get_config():
if conf.exists('ipv6 address autoconf'):
wifi['ipv6_autoconf'] = 1
- # Get prefix for IPv6 addressing based on MAC address (EUI-64)
+ # Get prefixes for IPv6 addressing based on MAC address (EUI-64)
if conf.exists('ipv6 address eui64'):
- wifi['ipv6_eui64_prefix'].append(conf.return_value('ipv6 address eui64'))
+ wifi['ipv6_eui64_prefix'] = conf.return_values('ipv6 address eui64')
- # Determine currently effective EUI64 address - to determine which
+ # Determine currently effective EUI64 addresses - to determine which
# address is no longer valid and needs to be removed
- eff_addr = conf.return_effective_value('ipv6 address eui64')
- if eff_addr and eff_addr not in wifi['ipv6_eui64_prefix']:
- wifi['ipv6_eui64_prefix_remove'].append(eff_addr)
+ eff_addr = conf.return_effective_values('ipv6 address eui64')
+ wifi['ipv6_eui64_prefix_remove'] = list_diff(eff_addr, wifi['ipv6_eui64_prefix'])
# add the link-local by default to make IPv6 work
wifi['ipv6_eui64_prefix'].append('fe80::/64')