summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interface-definitions/include/dhcpv6-options.xml.i46
-rw-r--r--interface-definitions/interfaces-pppoe.xml.in54
-rw-r--r--python/vyos/configdict.py132
-rw-r--r--python/vyos/ifconfig_vlan.py3
-rwxr-xr-xsrc/conf_mode/interfaces-bonding.py31
-rwxr-xr-xsrc/conf_mode/interfaces-bridge.py30
-rwxr-xr-xsrc/conf_mode/interfaces-ethernet.py31
-rwxr-xr-xsrc/conf_mode/interfaces-pseudo-ethernet.py29
-rwxr-xr-xsrc/conf_mode/interfaces-wireless.py31
9 files changed, 157 insertions, 230 deletions
diff --git a/interface-definitions/include/dhcpv6-options.xml.i b/interface-definitions/include/dhcpv6-options.xml.i
index c55a5271f..2c5058d2c 100644
--- a/interface-definitions/include/dhcpv6-options.xml.i
+++ b/interface-definitions/include/dhcpv6-options.xml.i
@@ -3,6 +3,52 @@
<help>DHCPv6 options</help>
</properties>
<children>
+ <tagNode name="delegate">
+ <properties>
+ <help>Delegate IPv6 prefix from provider to this interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces.py --broadcast</script>
+ </completionHelp>
+ </properties>
+ <children>
+ <leafNode name="interface-id">
+ <properties>
+ <help>Interface address identifier</help>
+ <valueHelp>
+ <format>0-</format>
+ <description>Used to form IPv6 interface address (default: EUI-64)</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--non-negative"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="sla-id">
+ <properties>
+ <help>Interface site-Level aggregator (SLA)</help>
+ <valueHelp>
+ <format>0-128</format>
+ <description>Decimal integer which fits in the length of SLA IDs</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-128"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ <leafNode name="sla-len">
+ <properties>
+ <help>Site-Level aggregator (SLA) length</help>
+ <valueHelp>
+ <format>0-128</format>
+ <description>Length of delegated prefix</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-128"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+ </tagNode>
<leafNode name="parameters-only">
<properties>
<help>Acquire only config parameters, no address</help>
diff --git a/interface-definitions/interfaces-pppoe.xml.in b/interface-definitions/interfaces-pppoe.xml.in
index 4337b6fc7..0092f9ce5 100644
--- a/interface-definitions/interfaces-pppoe.xml.in
+++ b/interface-definitions/interfaces-pppoe.xml.in
@@ -72,59 +72,7 @@
</valueHelp>
</properties>
</leafNode>
- <node name="dhcpv6-options">
- <properties>
- <help>DHCPv6 options</help>
- </properties>
- <children>
- <tagNode name="delegate">
- <properties>
- <help>Delegate IPv6 prefix from provider to this interface</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_interfaces.py --broadcast</script>
- </completionHelp>
- </properties>
- <children>
- <leafNode name="interface-id">
- <properties>
- <help>Interface address identifier</help>
- <valueHelp>
- <format>0-</format>
- <description>Used to form IPv6 interface address (default: EUI-64)</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--non-negative"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="sla-id">
- <properties>
- <help>Interface site-Level aggregator (SLA)</help>
- <valueHelp>
- <format>0-128</format>
- <description>Decimal integer which fits in the length of SLA IDs</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-128"/>
- </constraint>
- </properties>
- </leafNode>
- <leafNode name="sla-len">
- <properties>
- <help>Site-Level aggregator (SLA) length</help>
- <valueHelp>
- <format>0-128</format>
- <description>Length of delegated prefix</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 0-128"/>
- </constraint>
- </properties>
- </leafNode>
- </children>
- </tagNode>
- </children>
- </node>
+ #include <include/dhcpv6-options.xml.i>
#include <include/interface-description.xml.i>
#include <include/interface-disable.xml.i>
#include <include/interface-vrf.xml.i>
diff --git a/python/vyos/configdict.py b/python/vyos/configdict.py
index 8325355e8..eec64e964 100644
--- a/python/vyos/configdict.py
+++ b/python/vyos/configdict.py
@@ -103,8 +103,7 @@ def get_ethertype(ethertype_val):
else:
raise ConfigError('invalid ethertype "{}"'.format(ethertype_val))
-
-vlan_default = {
+interface_default_data = {
'address': [],
'address_remove': [],
'description': '',
@@ -113,10 +112,9 @@ vlan_default = {
'dhcp_vendor_class_id': '',
'dhcpv6_prm_only': False,
'dhcpv6_temporary': False,
+ 'dhcpv6_pd': [],
'disable': False,
'disable_link_detect': 1,
- 'egress_qos': '',
- 'egress_qos_changed': False,
'ip_disable_arp_filter': 1,
'ip_enable_arp_accept': 0,
'ip_enable_arp_announce': 0,
@@ -128,16 +126,22 @@ vlan_default = {
'ipv6_eui64_prefix_remove': [],
'ipv6_forwarding': 1,
'ipv6_dup_addr_detect': 1,
- 'ingress_qos': '',
- 'ingress_qos_changed': False,
'is_bridge_member': False,
'mac': '',
'mtu': 1500,
- 'vif_c': {},
- 'vif_c_remove': [],
'vrf': ''
}
+vlan_default = {
+ **interface_default_data,
+ 'egress_qos': '',
+ 'egress_qos_changed': False,
+ 'ingress_qos': '',
+ 'ingress_qos_changed': False,
+ 'vif_c': {},
+ 'vif_c_remove': []
+}
+
# see: https://docs.python.org/3/library/enum.html#functional-api
disable = Enum('disable','none was now both')
@@ -203,117 +207,140 @@ def intf_to_dict(conf, default):
intf['intf'] = ifname_from_config(conf)
# retrieve interface description
- if conf.exists('description'):
- intf['description'] = conf.return_value('description')
+ if conf.exists(['description']):
+ intf['description'] = conf.return_value(['description'])
# get DHCP client identifier
- if conf.exists('dhcp-options client-id'):
- intf['dhcp_client_id'] = conf.return_value('dhcp-options client-id')
+ if conf.exists(['dhcp-options', 'client-id']):
+ intf['dhcp_client_id'] = conf.return_value(['dhcp-options', 'client-id'])
# DHCP client host name (overrides the system host name)
- if conf.exists('dhcp-options host-name'):
- intf['dhcp_hostname'] = conf.return_value('dhcp-options host-name')
+ if conf.exists(['dhcp-options', 'host-name']):
+ intf['dhcp_hostname'] = conf.return_value(['dhcp-options', 'host-name'])
# DHCP client vendor identifier
- if conf.exists('dhcp-options vendor-class-id'):
+ if conf.exists(['dhcp-options', 'vendor-class-id']):
intf['dhcp_vendor_class_id'] = conf.return_value(
- 'dhcp-options vendor-class-id')
+ ['dhcp-options', 'vendor-class-id'])
# DHCPv6 only acquire config parameters, no address
- if conf.exists('dhcpv6-options parameters-only'):
+ if conf.exists(['dhcpv6-options', 'parameters-only']):
intf['dhcpv6_prm_only'] = True
+ # DHCPv6 prefix delegation (RFC3633)
+ current_level = conf.get_level()
+ if conf.exists(['dhcpv6-options', 'delegate']):
+ for interface in conf.list_nodes(['dhcpv6-options', 'delegate']):
+ conf.set_level(current_level + ['dhcpv6-options', 'delegate', interface])
+ pd = {
+ 'ifname': interface,
+ 'sla_id': '',
+ 'sla_len': '',
+ 'if_id': ''
+ }
+
+ if conf.exists(['sla-id']):
+ pd['sla_id'] = conf.return_value(['sla-id'])
+
+ if conf.exists(['sla-len']):
+ pd['sla_len'] = conf.return_value(['sla-len'])
+
+ if conf.exists(['interface-id']):
+ pd['if_id'] = conf.return_value(['interface-id'])
+
+ intf['dhcpv6_pd'].append(pd)
+
+ # re-set config level
+ conf.set_level(current_level)
+
# DHCPv6 temporary IPv6 address
- if conf.exists('dhcpv6-options temporary'):
+ if conf.exists(['dhcpv6-options', 'temporary']):
intf['dhcpv6_temporary'] = True
# ignore link state changes
- if conf.exists('disable-link-detect'):
+ if conf.exists(['disable-link-detect']):
intf['disable_link_detect'] = 2
# ARP filter configuration
- if conf.exists('ip disable-arp-filter'):
+ if conf.exists(['ip', 'disable-arp-filter']):
intf['ip_disable_arp_filter'] = 0
# ARP enable accept
- if conf.exists('ip enable-arp-accept'):
+ if conf.exists(['ip', 'enable-arp-accept']):
intf['ip_enable_arp_accept'] = 1
# ARP enable announce
- if conf.exists('ip enable-arp-announce'):
+ if conf.exists(['ip', 'enable-arp-announce']):
intf['ip_enable_arp_announce'] = 1
# ARP enable ignore
- if conf.exists('ip enable-arp-ignore'):
+ if conf.exists(['ip', 'enable-arp-ignore']):
intf['ip_enable_arp_ignore'] = 1
# Enable Proxy ARP
- if conf.exists('ip enable-proxy-arp'):
+ if conf.exists(['ip', 'enable-proxy-arp']):
intf['ip_proxy_arp'] = 1
# Enable acquisition of IPv6 address using stateless autoconfig (SLAAC)
- if conf.exists('ipv6 address autoconf'):
+ if conf.exists(['ipv6', 'address', 'autoconf']):
intf['ipv6_autoconf'] = 1
# Disable IPv6 forwarding on this interface
- if conf.exists('ipv6 disable-forwarding'):
+ if conf.exists(['ipv6', 'disable-forwarding']):
intf['ipv6_forwarding'] = 0
# check if interface is member of a bridge
intf['is_bridge_member'] = is_member(conf, intf['intf'], 'bridge')
# IPv6 Duplicate Address Detection (DAD) tries
- if conf.exists('ipv6 dup-addr-detect-transmits'):
+ if conf.exists(['ipv6', 'dup-addr-detect-transmits']):
intf['ipv6_dup_addr_detect'] = int(
- conf.return_value('ipv6 dup-addr-detect-transmits'))
+ conf.return_value(['ipv6', 'dup-addr-detect-transmits']))
# Media Access Control (MAC) address
- if conf.exists('mac'):
- intf['mac'] = conf.return_value('mac')
+ if conf.exists(['mac']):
+ intf['mac'] = conf.return_value(['mac'])
# Maximum Transmission Unit (MTU)
- if conf.exists('mtu'):
- intf['mtu'] = int(conf.return_value('mtu'))
+ if conf.exists(['mtu']):
+ intf['mtu'] = int(conf.return_value(['mtu']))
# retrieve VRF instance
- if conf.exists('vrf'):
- intf['vrf'] = conf.return_value('vrf')
+ if conf.exists(['vrf']):
+ intf['vrf'] = conf.return_value(['vrf'])
# egress QoS
- if conf.exists('egress-qos'):
- intf['egress_qos'] = conf.return_value('egress-qos')
+ if conf.exists(['egress-qos']):
+ intf['egress_qos'] = conf.return_value(['egress-qos'])
# egress changes QoS require VLAN interface recreation
- if conf.return_effective_value('egress-qos'):
- if intf['egress_qos'] != conf.return_effective_value('egress-qos'):
+ if conf.return_effective_value(['egress-qos']):
+ if intf['egress_qos'] != conf.return_effective_value(['egress-qos']):
intf['egress_qos_changed'] = True
# ingress QoS
- if conf.exists('ingress-qos'):
- intf['ingress_qos'] = conf.return_value('ingress-qos')
+ if conf.exists(['ingress-qos']):
+ intf['ingress_qos'] = conf.return_value(['ingress-qos'])
# ingress changes QoS require VLAN interface recreation
- if conf.return_effective_value('ingress-qos'):
- if intf['ingress_qos'] != conf.return_effective_value('ingress-qos'):
+ if conf.return_effective_value(['ingress-qos']):
+ if intf['ingress_qos'] != conf.return_effective_value(['ingress-qos']):
intf['ingress_qos_changed'] = True
# Get the interface addresses
- intf['address'] = conf.return_values('address')
+ intf['address'] = conf.return_values(['address'])
# addresses to remove - difference between effective and working config
intf['address_remove'] = list_diff(
- conf.return_effective_values('address'),
- intf['address']
- )
+ conf.return_effective_values(['address']), intf['address'])
# Get prefixes for IPv6 addressing based on MAC address (EUI-64)
- intf['ipv6_eui64_prefix'] = conf.return_values('ipv6 address eui64')
+ intf['ipv6_eui64_prefix'] = conf.return_values(['ipv6', 'address', 'eui64'])
# EUI64 to remove - difference between effective and working config
intf['ipv6_eui64_prefix_remove'] = list_diff(
- conf.return_effective_values('ipv6 address eui64'),
- intf['ipv6_eui64_prefix']
- )
+ conf.return_effective_values(['ipv6', 'address', 'eui64']),
+ intf['ipv6_eui64_prefix'])
# Determine if the interface should be disabled
disabled = disable_state(conf)
@@ -332,9 +359,8 @@ def intf_to_dict(conf, default):
# Remove the default link-local address if no-default-link-local is set,
# if member of a bridge or if disabled (it may not have a MAC if it's down)
- if ( conf.exists('ipv6 address no-default-link-local')
- or intf.get('is_bridge_member')
- or intf['disable'] ):
+ if ( conf.exists(['ipv6', 'address', 'no-default-link-local'])
+ or intf.get('is_bridge_member') or intf['disable'] ):
intf['ipv6_eui64_prefix_remove'].append('fe80::/64')
else:
# add the link-local by default to make IPv6 work
diff --git a/python/vyos/ifconfig_vlan.py b/python/vyos/ifconfig_vlan.py
index 6410be9aa..a53136ebf 100644
--- a/python/vyos/ifconfig_vlan.py
+++ b/python/vyos/ifconfig_vlan.py
@@ -87,6 +87,9 @@ def apply_vlan_config(vlan, config):
if config['dhcpv6_temporary']:
vlan.dhcp.v6.options['dhcpv6_temporary'] = True
+ if config['dhcpv6_pd']:
+ vlan.dhcp.v6.options['dhcpv6_pd'] = config['dhcpv6_pd']
+
# update interface description used e.g. within SNMP
vlan.set_alias(config['description'])
# ignore link state changes
diff --git a/src/conf_mode/interfaces-bonding.py b/src/conf_mode/interfaces-bonding.py
index 93d2adbd6..bdca9d170 100755
--- a/src/conf_mode/interfaces-bonding.py
+++ b/src/conf_mode/interfaces-bonding.py
@@ -22,53 +22,29 @@ from netifaces import interfaces
from vyos.ifconfig import BondIf
from vyos.ifconfig_vlan import apply_all_vlans, verify_vlan_config
-from vyos.configdict import list_diff, intf_to_dict, add_to_dict
+from vyos.configdict import list_diff, intf_to_dict, add_to_dict, interface_default_data
from vyos.config import Config
from vyos.util import call, cmd
from vyos.validate import is_member, has_address_configured
from vyos import ConfigError
default_config_data = {
- 'address': [],
- 'address_remove': [],
+ **interface_default_data,
'arp_mon_intvl': 0,
'arp_mon_tgt': [],
- 'description': '',
'deleted': False,
- 'dhcp_client_id': '',
- 'dhcp_hostname': '',
- 'dhcp_vendor_class_id': '',
- 'dhcpv6_prm_only': False,
- 'dhcpv6_temporary': False,
- 'disable': False,
- 'disable_link_detect': 1,
'hash_policy': 'layer2',
'intf': '',
'ip_arp_cache_tmo': 30,
- 'ip_disable_arp_filter': 1,
- 'ip_enable_arp_accept': 0,
- 'ip_enable_arp_announce': 0,
- 'ip_enable_arp_ignore': 0,
- 'ip_proxy_arp': 0,
'ip_proxy_arp_pvlan': 0,
- 'ipv6_accept_ra': 1,
- 'ipv6_autoconf': 0,
- 'ipv6_eui64_prefix': [],
- 'ipv6_eui64_prefix_remove': [],
- 'ipv6_forwarding': 1,
- 'ipv6_dup_addr_detect': 1,
- 'is_bridge_member': False,
- 'mac': '',
'mode': '802.3ad',
'member': [],
'shutdown_required': False,
- 'mtu': 1500,
'primary': '',
'vif_s': {},
'vif_s_remove': [],
'vif': {},
'vif_remove': [],
- 'vrf': ''
}
@@ -323,6 +299,9 @@ def apply(bond):
if bond['dhcpv6_temporary']:
b.dhcp.v6.options['dhcpv6_temporary'] = True
+ if bond['dhcpv6_pd']:
+ b.dhcp.v6.options['dhcpv6_pd'] = bond['dhcpv6_pd']
+
# ignore link state changes
b.set_link_detect(bond['disable_link_detect'])
# Bonding transmit hash policy
diff --git a/src/conf_mode/interfaces-bridge.py b/src/conf_mode/interfaces-bridge.py
index 217ba95e1..3ff339f0f 100755
--- a/src/conf_mode/interfaces-bridge.py
+++ b/src/conf_mode/interfaces-bridge.py
@@ -22,47 +22,26 @@ from netifaces import interfaces
from vyos.ifconfig import BridgeIf, Section
from vyos.ifconfig.stp import STP
-from vyos.configdict import list_diff
+from vyos.configdict import list_diff, interface_default_data
from vyos.validate import is_member, has_address_configured
from vyos.config import Config
from vyos.util import cmd, get_bridge_member_config
from vyos import ConfigError
default_config_data = {
- 'address': [],
- 'address_remove': [],
+ **interface_default_data,
'aging': 300,
'arp_cache_tmo': 30,
- 'description': '',
'deleted': False,
- 'dhcp_client_id': '',
- 'dhcp_hostname': '',
- 'dhcp_vendor_class_id': '',
- 'dhcpv6_prm_only': False,
- 'dhcpv6_temporary': False,
- 'disable': False,
- 'disable_link_detect': 1,
'forwarding_delay': 14,
'hello_time': 2,
- 'ip_disable_arp_filter': 1,
- 'ip_enable_arp_accept': 0,
- 'ip_enable_arp_announce': 0,
- 'ip_enable_arp_ignore': 0,
- 'ipv6_accept_ra': 1,
- 'ipv6_autoconf': 0,
- 'ipv6_eui64_prefix': [],
- 'ipv6_eui64_prefix_remove': [],
- 'ipv6_forwarding': 1,
- 'ipv6_dup_addr_detect': 1,
'igmp_querier': 0,
'intf': '',
- 'mac' : '',
'max_age': 20,
'member': [],
'member_remove': [],
'priority': 32768,
- 'stp': 0,
- 'vrf': ''
+ 'stp': 0
}
def get_config():
@@ -342,6 +321,9 @@ def apply(bridge):
if bridge['dhcpv6_temporary']:
br.dhcp.v6.options['dhcpv6_temporary'] = True
+ if bridge['dhcpv6_pd']:
+ br.dhcp.v6.options['dhcpv6_pd'] = br['dhcpv6_pd']
+
# assign/remove VRF
br.set_vrf(bridge['vrf'])
diff --git a/src/conf_mode/interfaces-ethernet.py b/src/conf_mode/interfaces-ethernet.py
index 5f7b0014e..f45a77a3e 100755
--- a/src/conf_mode/interfaces-ethernet.py
+++ b/src/conf_mode/interfaces-ethernet.py
@@ -22,44 +22,21 @@ from netifaces import interfaces
from vyos.ifconfig import EthernetIf
from vyos.ifconfig_vlan import apply_all_vlans, verify_vlan_config
-from vyos.configdict import list_diff, intf_to_dict, add_to_dict
+from vyos.configdict import list_diff, intf_to_dict, add_to_dict, interface_default_data
from vyos.validate import is_member
from vyos.config import Config
from vyos import ConfigError
default_config_data = {
- 'address': [],
- 'address_remove': [],
- 'description': '',
+ **interface_default_data,
'deleted': False,
- 'dhcp_client_id': '',
- 'dhcp_hostname': '',
- 'dhcp_vendor_class_id': '',
- 'dhcpv6_prm_only': False,
- 'dhcpv6_temporary': False,
- 'disable': False,
- 'disable_link_detect': 1,
'duplex': 'auto',
'flow_control': 'on',
'hw_id': '',
'ip_arp_cache_tmo': 30,
- 'ip_disable_arp_filter': 1,
- 'ip_enable_arp_accept': 0,
- 'ip_enable_arp_announce': 0,
- 'ip_enable_arp_ignore': 0,
- 'ip_proxy_arp': 0,
'ip_proxy_arp_pvlan': 0,
- 'ipv6_accept_ra': 1,
- 'ipv6_autoconf': 0,
- 'ipv6_eui64_prefix': [],
- 'ipv6_eui64_prefix_remove': [],
- 'ipv6_forwarding': 1,
- 'ipv6_dup_addr_detect': 1,
- 'is_bridge_member': False,
'is_bond_member': False,
'intf': '',
- 'mac': '',
- 'mtu': 1500,
'offload_gro': 'off',
'offload_gso': 'off',
'offload_sg': 'off',
@@ -73,6 +50,7 @@ default_config_data = {
'vrf': ''
}
+
def get_config():
# determine tagNode instance
if 'VYOS_TAGNODE_VALUE' not in os.environ:
@@ -223,6 +201,9 @@ def apply(eth):
if eth['dhcpv6_temporary']:
e.dhcp.v6.options['dhcpv6_temporary'] = True
+ if eth['dhcpv6_pd']:
+ e.dhcp.v6.options['dhcpv6_pd'] = e['dhcpv6_pd']
+
# ignore link state changes
e.set_link_detect(eth['disable_link_detect'])
# disable ethernet flow control (pause frames)
diff --git a/src/conf_mode/interfaces-pseudo-ethernet.py b/src/conf_mode/interfaces-pseudo-ethernet.py
index a050ae80b..3e036a753 100755
--- a/src/conf_mode/interfaces-pseudo-ethernet.py
+++ b/src/conf_mode/interfaces-pseudo-ethernet.py
@@ -21,41 +21,19 @@ from sys import exit
from netifaces import interfaces
from vyos.config import Config
-from vyos.configdict import list_diff, intf_to_dict, add_to_dict
+from vyos.configdict import list_diff, intf_to_dict, add_to_dict, interface_default_data
from vyos.ifconfig import MACVLANIf, Section
from vyos.ifconfig_vlan import apply_all_vlans, verify_vlan_config
from vyos import ConfigError
default_config_data = {
- 'address': [],
- 'address_remove': [],
- 'description': '',
+ **interface_default_data,
'deleted': False,
- 'dhcp_client_id': '',
- 'dhcp_hostname': '',
- 'dhcp_vendor_class_id': '',
- 'dhcpv6_prm_only': False,
- 'dhcpv6_temporary': False,
- 'disable': False,
- 'disable_link_detect': 1,
'intf': '',
'ip_arp_cache_tmo': 30,
- 'ip_disable_arp_filter': 1,
- 'ip_enable_arp_accept': 0,
- 'ip_enable_arp_announce': 0,
- 'ip_enable_arp_ignore': 0,
- 'ip_proxy_arp': 0,
'ip_proxy_arp_pvlan': 0,
- 'ipv6_accept_ra': 1,
- 'ipv6_autoconf': 0,
- 'ipv6_eui64_prefix': [],
- 'ipv6_eui64_prefix_remove': [],
- 'ipv6_forwarding': 1,
- 'ipv6_dup_addr_detect': 1,
- 'is_bridge_member': False,
'source_interface': '',
'source_interface_changed': False,
- 'mac': '',
'mode': 'private',
'vif_s': {},
'vif_s_remove': [],
@@ -193,6 +171,9 @@ def apply(peth):
if peth['dhcpv6_temporary']:
p.dhcp.v6.options['dhcpv6_temporary'] = True
+ if peth['dhcpv6_pd']:
+ p.dhcp.v6.options['dhcpv6_pd'] = peth['dhcpv6_pd']
+
# ignore link state changes
p.set_link_detect(peth['disable_link_detect'])
# configure ARP cache timeout in milliseconds
diff --git a/src/conf_mode/interfaces-wireless.py b/src/conf_mode/interfaces-wireless.py
index 70d46d061..f13408fa2 100755
--- a/src/conf_mode/interfaces-wireless.py
+++ b/src/conf_mode/interfaces-wireless.py
@@ -24,7 +24,7 @@ from netifaces import interfaces
from netaddr import EUI, mac_unix_expanded
from vyos.config import Config
-from vyos.configdict import list_diff, intf_to_dict, add_to_dict
+from vyos.configdict import list_diff, intf_to_dict, add_to_dict, interface_default_data
from vyos.ifconfig import WiFiIf, Section
from vyos.ifconfig_vlan import apply_all_vlans, verify_vlan_config
from vyos.template import render
@@ -33,8 +33,7 @@ from vyos.validate import is_member
from vyos import ConfigError
default_config_data = {
- 'address': [],
- 'address_remove': [],
+ **interface_default_data,
'cap_ht' : False,
'cap_ht_40mhz_incapable' : False,
'cap_ht_powersave' : False,
@@ -69,33 +68,13 @@ default_config_data = {
'cap_vht_vht_cf' : False,
'channel': '',
'country_code': '',
- 'description': '',
'deleted': False,
- 'dhcp_client_id': '',
- 'dhcp_hostname': '',
- 'dhcp_vendor_class_id': '',
- 'dhcpv6_prm_only': False,
- 'dhcpv6_temporary': False,
- 'disable': False,
'disable_broadcast_ssid' : False,
'disable_link_detect' : 1,
'expunge_failing_stations' : False,
'hw_id' : '',
'intf': '',
'isolate_stations' : False,
- 'ip_disable_arp_filter': 1,
- 'ip_enable_arp_accept': 0,
- 'ip_enable_arp_announce': 0,
- 'ip_enable_arp_ignore': 0,
- 'ip_proxy_arp': 0,
- 'ipv6_accept_ra': 1,
- 'ipv6_autoconf': 0,
- 'ipv6_eui64_prefix': [],
- 'ipv6_eui64_prefix_remove': [],
- 'ipv6_forwarding': 1,
- 'ipv6_dup_addr_detect': 1,
- 'is_bridge_member': False,
- 'mac' : '',
'max_stations' : '',
'mgmt_frame_protection' : 'disabled',
'mode' : 'g',
@@ -113,8 +92,7 @@ default_config_data = {
'vif': {},
'vif_remove': [],
'vif_s': {},
- 'vif_s_remove': [],
- 'vrf': ''
+ 'vif_s_remove': []
}
def get_conf_file(conf_type, intf):
@@ -622,6 +600,9 @@ def apply(wifi):
if wifi['dhcpv6_temporary']:
w.dhcp.v6.options['dhcpv6_temporary'] = True
+ if wifi['dhcpv6_pd']:
+ w.dhcp.v6.options['dhcpv6_pd'] = wifi['dhcpv6_pd']
+
# ignore link state changes
w.set_link_detect(wifi['disable_link_detect'])