summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordougb <dougb@FreeBSD.org>2011-06-19 22:59:54 +0000
committerdougb <dougb@FreeBSD.org>2011-06-19 22:59:54 +0000
commit93e25d21048ed910fa01fa7151fd0742b7f880b1 (patch)
tree3bf41a8216e655c6a09a73f2741a464458908817
parent1175683ecd587ecd5f1441b4c502e5dfe57b58c5 (diff)
downloadFreeBSD-src-93e25d21048ed910fa01fa7151fd0742b7f880b1.zip
FreeBSD-src-93e25d21048ed910fa01fa7151fd0742b7f880b1.tar.gz
Blah, forgot to svn add the actual script from r223310
-rwxr-xr-xetc/rc.d/netwait97
1 files changed, 97 insertions, 0 deletions
diff --git a/etc/rc.d/netwait b/etc/rc.d/netwait
new file mode 100755
index 0000000..d7a5184
--- /dev/null
+++ b/etc/rc.d/netwait
@@ -0,0 +1,97 @@
+#!/bin/sh
+
+# $FreeBSD$
+#
+# PROVIDE: netwait
+# REQUIRE: NETWORKING
+# 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.
+
+. /etc/rc.subr
+
+name="netwait"
+rc_var=`set_rcvar`
+start_cmd="${name}_start"
+stop_cmd=":"
+
+netwait_start()
+{
+ local ip rc count output link
+
+ if [ -z "${netwait_ip}" ]; then
+ err 1 "You must define one or more IP addresses in netwait_ip"
+ fi
+
+ if [ ${netwait_timeout} -lt 1 ]; then
+ 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
+ fi
+ else
+ echo ''
+ err 1 "ifconfig ${netwait_if} failed"
+ 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
+ fi
+ fi
+
+ # 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"
+
+ 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
+
+ echo '.'
+ return
+ fi
+ count=$((count+1))
+ done
+ echo ': No response from host.'
+ done
+
+ # 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."
+}
+
+load_rc_config $name
+run_rc_command "$1"
OpenPOWER on IntegriCloud