[Midnightbsd-cvs] src [11691] trunk/etc/rc.d/netwait: update based on freebsd improvements
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun Jul 8 16:30:05 EDT 2018
Revision: 11691
http://svnweb.midnightbsd.org/src/?rev=11691
Author: laffer1
Date: 2018-07-08 16:30:04 -0400 (Sun, 08 Jul 2018)
Log Message:
-----------
update based on freebsd improvements
Modified Paths:
--------------
trunk/etc/rc.d/netwait
Modified: trunk/etc/rc.d/netwait
===================================================================
--- trunk/etc/rc.d/netwait 2018-07-08 20:29:35 UTC (rev 11690)
+++ trunk/etc/rc.d/netwait 2018-07-08 20:30:04 UTC (rev 11691)
@@ -3,13 +3,20 @@
# $MidnightBSD$
#
# PROVIDE: netwait
-# REQUIRE: NETWORKING
+# REQUIRE: devd ipfilter ipfw pf routing
# KEYWORD: nojail
#
-# The netwait script is intended to be used by systems which have
-# statically-configured IP addresses in rc.conf(5). If your system
-# uses DHCP, you should use synchronous_dhclient="YES" in your
-# /etc/rc.conf instead of using netwait.
+# The netwait script helps handle two situations:
+# - Systems with USB or other late-attaching network hardware which
+# is initialized by devd events. The script waits for all the
+# interfaces named in the netwait_if list to appear.
+# - Systems with statically-configured IP addresses in rc.conf(5).
+# The IP addresses in the netwait_ip list are pinged. The script
+# waits for any single IP in the list to respond to the ping. If your
+# system uses DHCP, you should probably use synchronous_dhclient="YES"
+# in your /etc/rc.conf instead of netwait_ip.
+# Either or both of the wait lists can be used (at least one must be
+# non-empty if netwait is enabled).
. /etc/rc.subr
@@ -21,10 +28,10 @@
netwait_start()
{
- local ip rc count output link
+ local ip rc count output link wait_if got_if any_error
- if [ -z "${netwait_ip}" ]; then
- err 1 "You must define one or more IP addresses in netwait_ip"
+ if [ -z "${netwait_if}" ] && [ -z "${netwait_ip}" ]; then
+ err 1 "No interface or IP addresses listed, nothing to wait for"
fi
if [ ${netwait_timeout} -lt 1 ]; then
@@ -31,67 +38,77 @@
err 1 "netwait_timeout must be >= 1"
fi
- # Handle SIGINT (Ctrl-C); force abort of while() loop
- trap break SIGINT
-
if [ -n "${netwait_if}" ]; then
- echo -n "Waiting for $netwait_if to have link"
-
- count=1
- while [ ${count} -le ${netwait_if_timeout} ]; do
- if output=`/sbin/ifconfig ${netwait_if} 2>/dev/null`; then
- link=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'`
- if [ -z "${link}" ]; then
- echo '.'
- break
+ any_error=0
+ for wait_if in ${netwait_if}; do
+ echo -n "Waiting for ${wait_if}"
+ link=""
+ got_if=0
+ count=1
+ # Handle SIGINT (Ctrl-C); force abort of while() loop
+ trap break SIGINT
+ while [ ${count} -le ${netwait_if_timeout} ]; do
+ if output=`/sbin/ifconfig ${wait_if} 2>/dev/null`; then
+ if [ ${got_if} -eq 0 ]; then
+ echo -n ", interface present"
+ got_if=1
+ fi
+ link=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'`
+ if [ -z "${link}" ]; then
+ echo ', got link.'
+ break
+ fi
fi
- else
- echo ''
- err 1 "ifconfig ${netwait_if} failed"
+ sleep 1
+ count=$((count+1))
+ done
+ # Restore default SIGINT handler
+ trap - SIGINT
+ if [ ${got_if} -eq 0 ]; then
+ echo ", wait failed: interface never appeared."
+ any_error=1
+ elif [ -n "${link}" ]; then
+ echo ", wait failed: interface still has no link."
+ any_error=1
fi
- sleep 1
- count=$((count+1))
done
- if [ -n "${link}" ]; then
- # Restore default SIGINT handler
- trap - SIGINT
-
- echo ''
- warn "Interface still has no link. Continuing with startup, but"
- warn "be aware you may not have a fully functional networking"
- warn "layer at this point."
- return
+ if [ ${any_error} -eq 1 ]; then
+ warn "Continuing with startup, but be aware you may not have "
+ warn "a fully functional networking layer at this point."
fi
fi
+
+ if [ -n "${netwait_ip}" ]; then
+ # Handle SIGINT (Ctrl-C); force abort of for() loop
+ trap break SIGINT
- # Handle SIGINT (Ctrl-C); force abort of while() loop
- trap break SIGINT
+ for ip in ${netwait_ip}; do
+ echo -n "Waiting for ${ip} to respond to ICMP ping"
- for ip in ${netwait_ip}; do
- echo -n "Waiting for ${ip} to respond to ICMP"
+ count=1
+ while [ ${count} -le ${netwait_timeout} ]; do
+ /sbin/ping -t 1 -c 1 -o ${ip} >/dev/null 2>&1
+ rc=$?
- count=1
- while [ ${count} -le ${netwait_timeout} ]; do
- /sbin/ping -t 1 -c 1 -o ${ip} >/dev/null 2>&1
- rc=$?
+ if [ $rc -eq 0 ]; then
+ # Restore default SIGINT handler
+ trap - SIGINT
- if [ $rc -eq 0 ]; then
- # Restore default SIGINT handler
- trap - SIGINT
-
- echo '.'
- return
- fi
- count=$((count+1))
+ echo ', got response.'
+ return
+ fi
+ count=$((count+1))
+ done
+ echo ', failed: No response from host.'
done
- echo ': No response from host.'
- done
- # Restore default SIGINT handler
- trap - SIGINT
+ # Restore default SIGINT handler
+ trap - SIGINT
- warn "Exhausted IP list. Continuing with startup, but be aware you may"
- warn "not have a fully functional networking layer at this point."
+ warn "Exhausted IP list. Continuing with startup, but be aware you may"
+ warn "not have a fully functional networking layer at this point."
+ fi
+
}
load_rc_config $name
More information about the Midnightbsd-cvs
mailing list