Do not wait for DAD completion in dry-run mode
authorkn <kn@openbsd.org>
Tue, 1 Nov 2022 10:45:53 +0000 (10:45 +0000)
committerkn <kn@openbsd.org>
Tue, 1 Nov 2022 10:45:53 +0000 (10:45 +0000)
1. only do so when running without -n
2. move code to own wait_dad() helper like wait_autoconf_default() has it
3. use local _count as usual in both functions rather than the global count

Feedback OK claudio

etc/netstart

index afbeff5..15a584b 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/sh -
 #
-#      $OpenBSD: netstart,v 1.225 2022/10/31 20:14:45 kn Exp $
+#      $OpenBSD: netstart,v 1.226 2022/11/01 10:45:53 kn Exp $
 
 # Turn off Strict Bourne shell mode.
 set +o sh
@@ -290,15 +290,25 @@ ip6routes() {
 
 # wait for autoconf interfaces
 wait_autoconf_default() {
+       local _count=0
+
        if ifconfig | grep -q ': flags=.*<.*AUTOCONF.*>'; then
-               count=0
-               while ((count++ < 20)); do
+               while ((_count++ < 20)); do
                        route -n show | grep -q ^default && break
                        sleep .5
                done
        fi
 }
 
+# Ensure IPv6 Duplicate Address Detection (DAD) is completed.
+wait_dad() {
+       local _count=0
+
+       while ((_count++ < 10 && $(sysctl -n net.inet6.ip6.dad_pending) != 0)); do
+               sleep 1
+       done
+}
+
 # Make sure the invoking user has the right privileges.  Check for presence of
 # id(1) to avoid problems with diskless setups.
 if [[ -x /usr/bin/id ]] && (($(id -u) != 0)); then
@@ -397,10 +407,6 @@ $PRINT_ONLY || wait_autoconf_default
 # Configure interfaces that rely on routing
 ifmstart "tun tap gif etherip gre egre nvgre eoip vxlan pflow wg"
 
-if $IP6KERNEL; then
-       # Ensure IPv6 Duplicate Address Detection (DAD) is completed.
-       count=0
-       while ((count++ < 10 && $(sysctl -n net.inet6.ip6.dad_pending) != 0)); do
-               sleep 1
-       done
+if $IP6KERNEL && ! $PRINT_ONLY; then
+       wait_dad
 fi