summaryrefslogtreecommitdiffstats
path: root/etc/rc.d/defaultroute
diff options
context:
space:
mode:
authorbrooks <brooks@FreeBSD.org>2008-06-05 17:26:47 +0000
committerbrooks <brooks@FreeBSD.org>2008-06-05 17:26:47 +0000
commite9bd8b71f988d35b3cf464cd9c694a3e5afcc6d4 (patch)
tree4dafc4c9a20045e86f8117449014ef13d5512069 /etc/rc.d/defaultroute
parent65c567c1062097f6efd5fc4278e9f294861b60ff (diff)
downloadFreeBSD-src-e9bd8b71f988d35b3cf464cd9c694a3e5afcc6d4.zip
FreeBSD-src-e9bd8b71f988d35b3cf464cd9c694a3e5afcc6d4.tar.gz
Fix the wait for default route change I made a few weeks ago by creating
a new defaultroute script that just does the wait. The previous attempt created a circular dependency through network_ipv6. Pointy hat to: brooks
Diffstat (limited to 'etc/rc.d/defaultroute')
-rw-r--r--etc/rc.d/defaultroute48
1 files changed, 48 insertions, 0 deletions
diff --git a/etc/rc.d/defaultroute b/etc/rc.d/defaultroute
new file mode 100644
index 0000000..876d682
--- /dev/null
+++ b/etc/rc.d/defaultroute
@@ -0,0 +1,48 @@
+#!/bin/sh
+#
+# Wait for the default route to be up
+#
+# $FreeBSD$
+#
+
+# PROVIDE: defaultroute
+# REQUIRE: devd netif network_ipv6
+# KEYWORD: nojail
+
+. /etc/rc.subr
+. /etc/network.subr
+
+name="defaultroute"
+start_cmd="defaultroute_start"
+stop_cmd=":"
+
+defaultroute_start()
+{
+ # Return without waiting if we don't have dhcp interfaces.
+ # Once we can test that the link is actually up, we should
+ # remove this test and always wait.
+ dhcp_interfaces=`list_net_interfaces dhcp`
+ [ -z "`list_net_interfaces dhcp`" ] && return
+
+ # Wait for a default route
+ delay=${if_up_delay}
+ while [ ${delay} -gt 0 ]; do
+ defif=`get_default_if -inet`
+ if [ -n "${defif}" ]; then
+ if [ ${delay} -ne ${if_up_delay} ]; then
+ echo "($defif)"
+ fi
+ break
+ fi
+ if [ ${delay} -eq ${if_up_delay} ]; then
+ echo -n "Waiting ${delay}s for an interface to come up: "
+ else
+ echo -n .
+ fi
+ sleep 1
+ delay=`expr $delay - 1`
+ done
+}
+
+load_rc_config $name
+run_rc_command "$1"
OpenPOWER on IntegriCloud