1100280Sgordon#!/bin/sh
225184Sjkh#
3213270Semaste# Wait for the default route to be up if DHCP is in use
466830Sobrien#
550472Speter# $FreeBSD$
666830Sobrien#
725184Sjkh
8179566Sbrooks# PROVIDE: defaultroute
9197527Shrs# REQUIRE: devd faith netif stf
10136224Smtm# KEYWORD: nojail
1125184Sjkh
12100280Sgordon. /etc/rc.subr
13179079Sbrooks. /etc/network.subr
1425184Sjkh
15179566Sbrooksname="defaultroute"
16179566Sbrooksstart_cmd="defaultroute_start"
17179566Sbrooksstop_cmd=":"
1885831Sdes
19213270Semaste# Does any interface have a carrier?
20213270Semastedefaultroute_carrier()
21213270Semaste{
22213270Semaste	local carrier nocarrier
23213270Semaste
24213270Semaste	carrier=1
25213270Semaste	for _if in ${dhcp_interfaces}; do
26213270Semaste		output=`/sbin/ifconfig ${_if}`
27213270Semaste		nocarrier=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'`
28213270Semaste		[ -z "${nocarrier}" ] && carrier=0
29213270Semaste	done
30213270Semaste	return ${carrier}
31213270Semaste}
32213270Semaste
33179566Sbrooksdefaultroute_start()
34100280Sgordon{
35213270Semaste	local nl waited
36179079Sbrooks
37197697Shrs	afexists inet || return 0
38197697Shrs
39188009Smtm	# Return without waiting if we don't have dhcp interfaces or
40188009Smtm	# if none of the dhcp interfaces is plugged in.
41188009Smtm	dhcp_interfaces=`list_net_interfaces dhcp`
42188009Smtm	[ -z "${dhcp_interfaces}" ] && return
43188009Smtm
44179079Sbrooks	# Wait for a default route
45213270Semaste	waited=0
46213270Semaste	while [ ${waited} -lt ${defaultroute_delay} ]; do
47179079Sbrooks		defif=`get_default_if -inet`
48179079Sbrooks		if [ -n "${defif}" ]; then
49213270Semaste			if [ ${waited} -ne 0 ]; then
50186237Sbrooks				echo -n "($defif)"
51197139Shrs				nl=1
52179079Sbrooks			fi
53179079Sbrooks			break
54179079Sbrooks		fi
55213270Semaste		if [ ${waited} -eq 0 ]; then
56213270Semaste			echo -n "Waiting ${defaultroute_delay}s for the default route interface: "
57179079Sbrooks		else
58179079Sbrooks			echo -n .
59179079Sbrooks		fi
60213270Semaste		if [ ${waited} -eq ${defaultroute_carrier_delay} ] && ! defaultroute_carrier; then
61213270Semaste			echo -n "(no carrier)"
62213270Semaste			break
63213270Semaste		fi
64197139Shrs		nl=1
65179079Sbrooks		sleep 1
66213270Semaste		waited=$(($waited + 1))
67179079Sbrooks	done
68186237Sbrooks
69197139Shrs	[ -n "$nl" ] && echo
70117019Smtm}
71117019Smtm
72100280Sgordonload_rc_config $name
73100280Sgordonrun_rc_command "$1"
74