summaryrefslogtreecommitdiff
path: root/python/vyos/ifconfig
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-08-23 00:04:09 +0200
committerChristian Poessinger <christian@poessinger.com>2020-08-23 01:10:46 +0200
commitec1cf7dd1508e4a84d99818c7e34d093242b3331 (patch)
treec05f822aed8f03ead38c00658350d516961b88eb /python/vyos/ifconfig
parent5a5974d5a00b482cabd3dee92bc365d3c9f399bc (diff)
downloadvyos-1x-ec1cf7dd1508e4a84d99818c7e34d093242b3331.tar.gz
vyos-1x-ec1cf7dd1508e4a84d99818c7e34d093242b3331.zip
dhcpv6-pd: T2821: support dhcpv6-pd without "address dhcpv6"
Currently DHCPv6-PD requires an interface address configured to dhcpv6 on the CLI. This is not required also sometimes there is either no dhcpv6 interface addressing available (PPPoE) or wanted. This limitation was artificial due to the old interface code. Change the implementation to spawn the DHCPv6 client and request a prefix even when there is no address request configured.
Diffstat (limited to 'python/vyos/ifconfig')
-rw-r--r--python/vyos/ifconfig/interface.py17
1 files changed, 13 insertions, 4 deletions
diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py
index 892495dec..537c4bc2d 100644
--- a/python/vyos/ifconfig/interface.py
+++ b/python/vyos/ifconfig/interface.py
@@ -901,10 +901,15 @@ class Interface(Control):
if isinstance(new_addr, str):
new_addr = [new_addr]
- # ensure DHCP/DHCPv6 is stopped (when not configured explicitly)
- for proto in ['dhcp', 'dhcpv6']:
- if proto not in new_addr:
- self.del_addr(proto)
+ # always ensure DHCP client is stopped (when not configured explicitly)
+ if 'dhcp' not in new_addr:
+ self.del_addr('dhcp')
+
+ # always ensure DHCPv6 client is stopped (when not configured as client
+ # for IPv6 address or prefix delegation
+ dhcpv6pd = jmespath.search('dhcpv6_options.pd', config)
+ if 'dhcpv6' not in new_addr or dhcpv6pd == None:
+ self.del_addr('dhcpv6')
# determine IP addresses which are assigned to the interface and build a
# list of addresses which are no longer in the dict so they can be removed
@@ -915,6 +920,10 @@ class Interface(Control):
for addr in new_addr:
self.add_addr(addr)
+ # start DHCPv6 client when only PD was configured
+ if dhcpv6pd != None:
+ self.set_dhcpv6(True)
+
# There are some items in the configuration which can only be applied
# if this instance is not bound to a bridge. This should be checked
# by the caller but better save then sorry!