From f2c844e1708fb564abe2574df10f63a595877fd0 Mon Sep 17 00:00:00 2001 From: Maurice Walker Date: Mon, 8 Aug 2022 14:41:42 +0200 Subject: [PATCH] SLAAC WAN: add support for requesting DNS info via stateless DHCPv6 (#5937) * Merge SLAAC interface dhcp6c config Stateless DHCPv6 config for SLAAC WANs was generated, but not merged into dhcp6c.conf file. * Add support for stateless DHCPv6 to dhcp6c script Script had no code for processing stateless DHCPv6 replies (required for SLAAC without RDNSS / DNSSL). * dhcp6c script, pass all search domains to ifctl Only the first domain was used, all others were disregarded. --- src/etc/inc/interfaces.inc | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index 22c1ca45c..6bdb58cf3 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -2786,10 +2786,28 @@ REQUEST) ARGS="\${ARGS} -a \${NAMESERVER}" done /usr/local/sbin/ifctl -i ${wanif} -6nd \${ARGS} - /usr/local/sbin/ifctl -i ${wanif} -6sd \${new_domain_name:+"-a \${new_domain_name}"} + ARGS= + for DOMAIN in \${new_domain_name}; do + ARGS="\${ARGS} -a \${DOMAIN}" + done + /usr/local/sbin/ifctl -i ${wanif} -6sd \${ARGS} /usr/local/sbin/ifctl -i ${wanif} -6pd \${PDINFO:+"-a \${PDINFO}"} /usr/local/sbin/configctl -d interface newipv6 {$wanif} ;; +INFOREQ) + /usr/bin/logger -t dhcp6c "dhcp6c \$REASON on {$wanif} - running newipv6" + ARGS= + for NAMESERVER in \${new_domain_name_servers}; do + ARGS="\${ARGS} -a \${NAMESERVER}" + done + /usr/local/sbin/ifctl -i ${wanif} -6nd \${ARGS} + ARGS= + for DOMAIN in \${new_domain_name}; do + ARGS="\${ARGS} -a \${DOMAIN}" + done + /usr/local/sbin/ifctl -i ${wanif} -6sd \${ARGS} + /usr/local/sbin/configctl -d interface newipv6 {$wanif} + ;; EXIT|RELEASE) /usr/bin/logger -t dhcp6c "dhcp6c \$REASON on {$wanif} - running dns reload" /usr/local/sbin/ifctl -i ${wanif} -6nd @@ -2828,7 +2846,7 @@ EOF; /* merge configs and prepare single instance of dhcp6c for startup */ foreach (legacy_config_get_interfaces(['enable' => true, 'virtual' => false]) as $_interface => $_wancfg) { - if (empty($_wancfg['ipaddrv6']) || $_wancfg['ipaddrv6'] != 'dhcp6') { + if (empty($_wancfg['ipaddrv6']) || ($_wancfg['ipaddrv6'] != 'dhcp6' && $_wancfg['ipaddrv6'] != 'slaac')) { continue; }