diff --git a/src/etc/rc.newwanipv6 b/src/etc/rc.newwanipv6 index 7a03d1652..7c3831a10 100755 --- a/src/etc/rc.newwanipv6 +++ b/src/etc/rc.newwanipv6 @@ -58,12 +58,26 @@ if (!isset($config['interfaces'][$interface]['enable'])) { return; } +$interface_descr = convert_friendly_interface_to_friendly_descr($interface); + +/* make sure only one script runs at a time beyond this point */ +$fp = fopen('/tmp/newwanipv6_' . $argument, 'a+'); +if (!$fp || !flock($fp, LOCK_EX | LOCK_NB)) { + if ($force == 'yes') { + log_msg("Lost a forceful reload on {$interface_descr}[{$interface}]) due to previous lock", LOG_WARNING); + } + fclose($fp); + return; +} + +/* wait for DAD to complete to avoid discarding tentative address */ +$dad_delay = (int)get_single_sysctl('net.inet6.ip6.dad_count'); +sleep($dad_delay + 1); + /* this may be required to cleanse the DNS information no longer available */ system_resolver_configure(); -$interface_descr = convert_friendly_interface_to_friendly_descr($interface); list ($ip) = interfaces_primary_address6($interface); - if (!is_ipaddr($ip)) { /* interface is not ready */ log_msg("Failed to detect IP for {$interface_descr}[{$interface}]", LOG_INFO); diff --git a/src/opnsense/scripts/interfaces/rtsold_resolvconf.sh b/src/opnsense/scripts/interfaces/rtsold_resolvconf.sh index 96ac162ba..bd32e051a 100755 --- a/src/opnsense/scripts/interfaces/rtsold_resolvconf.sh +++ b/src/opnsense/scripts/interfaces/rtsold_resolvconf.sh @@ -69,8 +69,5 @@ elif [ "${1}" = "-d" ]; then /usr/local/sbin/ifctl -i ${ifname} -6rd fi -# wait for DAD to complete to avoid tentative address -sleep "$(($(sysctl -n net.inet6.ip6.dad_count) + 1))" - # remove slaac suffix here to reload correct interface /usr/local/sbin/configctl -d interface newipv6 ${ifname%%:slaac}