Module Name: src Committed By: roy Date: Thu Jan 7 11:51:07 UTC 2016
Modified Files: src/etc/defaults: rc.conf src/etc/rc.d: network Log Message: Instead of waiting for a duration based in IPv6 DAD count sysctl, wait for 15 seconds for tentative flags to clear allowing 5 seconds for detached flags to clear as well from configured addresses. This is now protocol independant and allows time for the interfaces to work out if they have a carrier or not. To generate a diff of this commit: cvs rdiff -u -r1.135 -r1.136 src/etc/defaults/rc.conf cvs rdiff -u -r1.69 -r1.70 src/etc/rc.d/network Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/etc/defaults/rc.conf diff -u src/etc/defaults/rc.conf:1.135 src/etc/defaults/rc.conf:1.136 --- src/etc/defaults/rc.conf:1.135 Sat Dec 26 21:05:11 2015 +++ src/etc/defaults/rc.conf Thu Jan 7 11:51:07 2016 @@ -1,4 +1,4 @@ -# $NetBSD: rc.conf,v 1.135 2015/12/26 21:05:11 plunky Exp $ +# $NetBSD: rc.conf,v 1.136 2016/01/07 11:51:07 roy Exp $ # # /etc/defaults/rc.conf -- # default configuration of /etc/rc.conf @@ -162,6 +162,13 @@ securelevel="" # securelevel to set # Networking startup. # +# Wait up to 15 seconds for the tentative flag to clear from all addresses. +# Wait up to 5 seconds for the detached flag to clear from all addresses. +# Addresses are detached if there is no carrier, thus we have a small +# wait to see if we get a carrier. +# Even a wired interface may not recognise it has a carrier right away. +ifconfig_wait_dad_flags="-w 15 -W 5" + mdnsd=NO npf=NO ipfilter=NO ipfilter_flags="" # uses /etc/ipf.conf Index: src/etc/rc.d/network diff -u src/etc/rc.d/network:1.69 src/etc/rc.d/network:1.70 --- src/etc/rc.d/network:1.69 Tue Oct 14 20:49:47 2014 +++ src/etc/rc.d/network Thu Jan 7 11:51:07 2016 @@ -1,6 +1,6 @@ #!/bin/sh # -# $NetBSD: network,v 1.69 2014/10/14 20:49:47 christos Exp $ +# $NetBSD: network,v 1.70 2016/01/07 11:51:07 roy Exp $ # # PROVIDE: network @@ -51,6 +51,7 @@ network_start() network_start_defaultroute6 have_inet6 && network_start_ipv6_autoconf + network_wait_dad network_start_local } @@ -433,18 +434,6 @@ network_start_ipv6_autoconf() { # IPv6 interface autoconfiguration. - dadcount=$(/sbin/sysctl -n net.inet6.ip6.dad_count 2>/dev/null) - if [ -n "$dadcount" -a "$dadcount" != 0 ]; then - # wait till DAD is completed - echo 'Waiting for DAD to complete for' \ - 'statically configured addresses...' - # Add 1 for MAX_RTR_SOLICITATION_DELAY and another - # to give time for the last DAD packet to respond and - # a few more for luck. - waitsecs=$((dadcount + 4)) - /sbin/ifconfig -w $waitsecs - fi - # dhcpcd will ensure DAD completes before forking if checkyesnox rtsol && ! checkyesno dhcpcd; then if [ "$ip6mode" = "autohost" ]; then @@ -455,6 +444,16 @@ network_start_ipv6_autoconf() fi } +network_wait_dad() +{ + # Wait for the DAD flags to clear form all addresses. + if [ -n "$ifconfig_wait_dad_flags" ]; then + echo 'Waiting for DAD to complete for' \ + 'statically configured addresses...' + ifconfig $ifconfig_wait_dad_flags + fi +} + network_start_local() { # XXX this must die