1*0696600cSBjoern A. Zeeb#!/bin/sh 2*0696600cSBjoern A. Zeeb# 3*0696600cSBjoern A. Zeeb# Wait for the default route to be up if DHCP is in use 4*0696600cSBjoern A. Zeeb# 5*0696600cSBjoern A. Zeeb# $FreeBSD$ 6*0696600cSBjoern A. Zeeb# 7*0696600cSBjoern A. Zeeb 8*0696600cSBjoern A. Zeeb# PROVIDE: defaultroute 9*0696600cSBjoern A. Zeeb# REQUIRE: devd netif stf 10*0696600cSBjoern A. Zeeb# KEYWORD: nojailvnet 11*0696600cSBjoern A. Zeeb 12*0696600cSBjoern A. Zeeb. /etc/rc.subr 13*0696600cSBjoern A. Zeeb. /etc/network.subr 14*0696600cSBjoern A. Zeeb 15*0696600cSBjoern A. Zeebname="defaultroute" 16*0696600cSBjoern A. Zeebdesc="Setup default router" 17*0696600cSBjoern A. Zeebstart_cmd="defaultroute_start" 18*0696600cSBjoern A. Zeebstop_cmd=":" 19*0696600cSBjoern A. Zeeb 20*0696600cSBjoern A. Zeeb# Does any interface have a carrier? 21*0696600cSBjoern A. Zeebdefaultroute_carrier() 22*0696600cSBjoern A. Zeeb{ 23*0696600cSBjoern A. Zeeb local carrier nocarrier 24*0696600cSBjoern A. Zeeb 25*0696600cSBjoern A. Zeeb carrier=1 26*0696600cSBjoern A. Zeeb for _if in ${dhcp_interfaces}; do 27*0696600cSBjoern A. Zeeb output=`/sbin/ifconfig ${_if}` 28*0696600cSBjoern A. Zeeb nocarrier=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'` 29*0696600cSBjoern A. Zeeb [ -z "${nocarrier}" ] && carrier=0 30*0696600cSBjoern A. Zeeb done 31*0696600cSBjoern A. Zeeb return ${carrier} 32*0696600cSBjoern A. Zeeb} 33*0696600cSBjoern A. Zeeb 34*0696600cSBjoern A. Zeebdefaultroute_start() 35*0696600cSBjoern A. Zeeb{ 36*0696600cSBjoern A. Zeeb local nl waited 37*0696600cSBjoern A. Zeeb 38*0696600cSBjoern A. Zeeb afexists inet || return 0 39*0696600cSBjoern A. Zeeb 40*0696600cSBjoern A. Zeeb # Return without waiting if we don't have dhcp interfaces or 41*0696600cSBjoern A. Zeeb # if none of the dhcp interfaces is plugged in. 42*0696600cSBjoern A. Zeeb dhcp_interfaces=`list_net_interfaces dhcp` 43*0696600cSBjoern A. Zeeb [ -z "${dhcp_interfaces}" ] && return 44*0696600cSBjoern A. Zeeb 45*0696600cSBjoern A. Zeeb # Wait for a default route 46*0696600cSBjoern A. Zeeb waited=0 47*0696600cSBjoern A. Zeeb while [ ${waited} -lt ${defaultroute_delay} ]; do 48*0696600cSBjoern A. Zeeb defif=`get_default_if -inet` 49*0696600cSBjoern A. Zeeb if [ -n "${defif}" ]; then 50*0696600cSBjoern A. Zeeb if [ ${waited} -ne 0 ]; then 51*0696600cSBjoern A. Zeeb echo -n "($defif)" 52*0696600cSBjoern A. Zeeb nl=1 53*0696600cSBjoern A. Zeeb fi 54*0696600cSBjoern A. Zeeb break 55*0696600cSBjoern A. Zeeb fi 56*0696600cSBjoern A. Zeeb if [ ${waited} -eq 0 ]; then 57*0696600cSBjoern A. Zeeb echo -n "Waiting ${defaultroute_delay}s for the default route interface: " 58*0696600cSBjoern A. Zeeb else 59*0696600cSBjoern A. Zeeb echo -n . 60*0696600cSBjoern A. Zeeb fi 61*0696600cSBjoern A. Zeeb if [ ${waited} -eq ${defaultroute_carrier_delay} ] && ! defaultroute_carrier; then 62*0696600cSBjoern A. Zeeb echo -n "(no carrier)" 63*0696600cSBjoern A. Zeeb break 64*0696600cSBjoern A. Zeeb fi 65*0696600cSBjoern A. Zeeb nl=1 66*0696600cSBjoern A. Zeeb sleep 1 67*0696600cSBjoern A. Zeeb waited=$(($waited + 1)) 68*0696600cSBjoern A. Zeeb done 69*0696600cSBjoern A. Zeeb 70*0696600cSBjoern A. Zeeb [ -n "$nl" ] && echo 71*0696600cSBjoern A. Zeeb} 72*0696600cSBjoern A. Zeeb 73*0696600cSBjoern A. Zeebload_rc_config $name 74*0696600cSBjoern A. Zeebrun_rc_command "$1" 75