Author: dougb
Date: Sun Jun 19 22:59:54 2011
New Revision: 223311
URL: http://svn.freebsd.org/changeset/base/223311

Log:
  Blah, forgot to svn add the actual script from r223310

Added:
  head/etc/rc.d/netwait   (contents, props changed)

Added: head/etc/rc.d/netwait
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/etc/rc.d/netwait       Sun Jun 19 22:59:54 2011        (r223311)
@@ -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"
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to