aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2025-10-05 18:40:39 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2025-10-05 18:42:33 +0000
commitec6ad605ecea5c4a76d2e744df0265cc3f3a01b9 (patch)
treef3246a0514bed46f0cc1ebcb70aab5cbdc5a732f
parent5000d023a446b81f6d45ed59aa379607ec814f01 (diff)
rc: Improve netwait DAD logic
Disable if IPv6 is not supported, and instead of 10 seconds, default to one more than the value of net.inet6.ip6.dad_count. Fixes: 5ead817c3b7a ("rc: Teach netwait to wait for DAD") Reviewed by: bz Differential Revision: https://reviews.freebsd.org/D52905
-rw-r--r--libexec/rc/rc.conf3
-rwxr-xr-xlibexec/rc/rc.d/netwait10
-rw-r--r--share/man/man5/rc.conf.59
3 files changed, 14 insertions, 8 deletions
diff --git a/libexec/rc/rc.conf b/libexec/rc/rc.conf
index 2589e2614c35..c776a815003c 100644
--- a/libexec/rc/rc.conf
+++ b/libexec/rc/rc.conf
@@ -501,7 +501,8 @@ netwait_timeout="60" # Total number of seconds to perform pings.
#netwait_if="" # Wait for active link on each intf in this list.
netwait_if_timeout="30" # Total number of seconds to monitor link state.
netwait_dad="NO" # Wait for DAD to complete
-netwait_dad_timeout="10" # Total number of seconds to wait for DAD.
+netwait_dad_timeout="" # Total number of seconds to wait for DAD, zero
+ # or unset to autodetect
### Miscellaneous network options: ###
icmp_bmcastecho="NO" # respond to broadcast ping packets
diff --git a/libexec/rc/rc.d/netwait b/libexec/rc/rc.d/netwait
index b609440a2e4e..05874552cf1c 100755
--- a/libexec/rc/rc.d/netwait
+++ b/libexec/rc/rc.d/netwait
@@ -36,13 +36,15 @@ netwait_start()
err 1 "Nothing to wait for"
fi
- if ! [ "${netwait_if_timeout}" -ge 1 ]; then
+ if ! [ "${netwait_if_timeout:=0}" -ge 1 ]; then
err 1 "netwait_if_timeout must be >= 1"
fi
- if ! [ "${netwait_dad_timeout}" -ge 1 ]; then
- err 1 "netwait_dad_timeout must be >= 1"
+ if ! check_kern_features inet6; then
+ netwait_dad="NO"
+ elif ! [ "${netwait_dad_timeout:=0}" -ge 1 ]; then
+ netwait_dad_timeout=$(($(sysctl -n net.inet6.ip6.dad_count)+1))
fi
- if ! [ "${netwait_timeout}" -ge 1 ]; then
+ if ! [ "${netwait_timeout:=0}" -ge 1 ]; then
err 1 "netwait_timeout must be >= 1"
fi
diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5
index c0048f27c740..edbfa937f8df 100644
--- a/share/man/man5/rc.conf.5
+++ b/share/man/man5/rc.conf.5
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd October 2, 2025
+.Dd October 5, 2025
.Dt RC.CONF 5
.Os
.Sh NAME
@@ -4618,8 +4618,11 @@ Set to
to enable waiting for DAD to complete.
.It Va netwait_dad_timeout
.Pq Vt int
-Indicates the total number of seconds to wait for DAD to complete.
-The default is 10.
+Unset by default.
+Indicates the maximum number of seconds to wait for DAD to complete.
+If zero or unset, the timeout will be one more than the value of the
+.Va net.inet6.ip6.dad_count
+sysctl variable.
.It Va rctl_enable
.Pq Vt bool
If set to