git: ec6ad605ecea - main - rc: Improve netwait DAD logic
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 05 Oct 2025 18:42:35 UTC
The branch main has been updated by des:
URL: https://cgit.FreeBSD.org/src/commit/?id=ec6ad605ecea5c4a76d2e744df0265cc3f3a01b9
commit ec6ad605ecea5c4a76d2e744df0265cc3f3a01b9
Author: Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2025-10-05 18:40:39 +0000
Commit: Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2025-10-05 18:42:33 +0000
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
---
libexec/rc/rc.conf | 3 ++-
libexec/rc/rc.d/netwait | 10 ++++++----
share/man/man5/rc.conf.5 | 9 ++++++---
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