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