defaultroute revision 208060
1#!/bin/sh
2#
3# Wait for the default route to be up
4#
5# $FreeBSD: head/etc/rc.d/defaultroute 208060 2010-05-14 04:53:57Z dougb $
6#
7
8# PROVIDE: defaultroute
9# REQUIRE: devd faith netif stf
10# KEYWORD: nojail
11
12. /etc/rc.subr
13. /etc/network.subr
14
15name="defaultroute"
16start_cmd="defaultroute_start"
17stop_cmd=":"
18
19defaultroute_start()
20{
21	local output carrier nocarrier nl
22
23	afexists inet || return 0
24
25	# Return without waiting if we don't have dhcp interfaces or
26	# if none of the dhcp interfaces is plugged in.
27	dhcp_interfaces=`list_net_interfaces dhcp`
28	[ -z "${dhcp_interfaces}" ] && return
29	carrier=false
30	for _if in ${dhcp_interfaces}; do
31		output=`/sbin/ifconfig ${_if}`
32		nocarrier=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'`
33		[ -z "${nocarrier}" ] && carrier=true
34	done
35	if ! ${carrier}; then
36		return
37	fi
38
39	# Wait for a default route
40	delay=${defaultroute_delay}
41	while [ ${delay} -gt 0 ]; do
42		defif=`get_default_if -inet`
43		if [ -n "${defif}" ]; then
44			if [ ${delay} -ne ${defaultroute_delay} ]; then
45				echo -n "($defif)"
46				nl=1
47			fi
48			break
49		fi
50		if [ ${delay} -eq ${defaultroute_delay} ]; then
51			echo -n "Waiting ${delay}s for the default route interface: "
52		else
53			echo -n .
54		fi
55		nl=1
56		sleep 1
57		delay=$(($delay - 1))
58	done
59
60	[ -n "$nl" ] && echo
61}
62
63load_rc_config $name
64run_rc_command "$1"
65