10696600cSBjoern A. Zeeb#!/bin/sh 20696600cSBjoern A. Zeeb# 3*d52de9a3SMarek Zarychta# Wait for the default route to be up if DHCPv4 or IPv6 SLAAC is in use 40696600cSBjoern A. Zeeb# 50696600cSBjoern A. Zeeb# 60696600cSBjoern A. Zeeb 70696600cSBjoern A. Zeeb# PROVIDE: defaultroute 80696600cSBjoern A. Zeeb# REQUIRE: devd netif stf 90696600cSBjoern A. Zeeb# KEYWORD: nojailvnet 100696600cSBjoern A. Zeeb 110696600cSBjoern A. Zeeb. /etc/rc.subr 120696600cSBjoern A. Zeeb. /etc/network.subr 130696600cSBjoern A. Zeeb 140696600cSBjoern A. Zeebname="defaultroute" 150696600cSBjoern A. Zeebdesc="Setup default router" 160696600cSBjoern A. Zeebstart_cmd="defaultroute_start" 170696600cSBjoern A. Zeebstop_cmd=":" 180696600cSBjoern A. Zeeb 190696600cSBjoern A. Zeeb# Does any interface have a carrier? 200696600cSBjoern A. Zeebdefaultroute_carrier() 210696600cSBjoern A. Zeeb{ 220696600cSBjoern A. Zeeb local carrier nocarrier 230696600cSBjoern A. Zeeb 240696600cSBjoern A. Zeeb carrier=1 25*d52de9a3SMarek Zarychta for _if in ${dhcp_interfaces} ${autoconf_interfaces}; do 260696600cSBjoern A. Zeeb output=`/sbin/ifconfig ${_if}` 270696600cSBjoern A. Zeeb nocarrier=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'` 280696600cSBjoern A. Zeeb [ -z "${nocarrier}" ] && carrier=0 290696600cSBjoern A. Zeeb done 300696600cSBjoern A. Zeeb return ${carrier} 310696600cSBjoern A. Zeeb} 320696600cSBjoern A. Zeeb 330696600cSBjoern A. Zeebdefaultroute_start() 340696600cSBjoern A. Zeeb{ 35*d52de9a3SMarek Zarychta local have_inet have_inet6 nl waited 360696600cSBjoern A. Zeeb 37*d52de9a3SMarek Zarychta # Check for IPv4/IPv6 support 38*d52de9a3SMarek Zarychta have_inet=0 39*d52de9a3SMarek Zarychta afexists inet && have_inet=1 40*d52de9a3SMarek Zarychta have_inet6=0 41*d52de9a3SMarek Zarychta afexists inet6 && have_inet6=1 42*d52de9a3SMarek Zarychta [ ${have_inet} -eq 0 ] && [ ${have_inet6} -eq 0 ] && return 430696600cSBjoern A. Zeeb 44*d52de9a3SMarek Zarychta # Return without waiting if we don't have dhcp or autoconf interfaces, 45*d52de9a3SMarek Zarychta # or if none of them is plugged in. 46*d52de9a3SMarek Zarychta [ ${have_inet} -ne 0 ] && dhcp_interfaces=`list_net_interfaces dhcp` 47*d52de9a3SMarek Zarychta [ ${have_inet6} -ne 0 ] && autoconf_interfaces=`list_net_interfaces autoconf` 48*d52de9a3SMarek Zarychta [ -z "${dhcp_interfaces}" -a -z "${autoconf_interfaces}" ] && return 490696600cSBjoern A. Zeeb 500696600cSBjoern A. Zeeb # Wait for a default route 510696600cSBjoern A. Zeeb waited=0 520696600cSBjoern A. Zeeb while [ ${waited} -lt ${defaultroute_delay} ]; do 53*d52de9a3SMarek Zarychta [ ${have_inet} -ne 0 ] && defif=`get_default_if -inet` 54*d52de9a3SMarek Zarychta [ ${have_inet6} -ne 0 ] && defif6=`get_default_if -inet6` 55*d52de9a3SMarek Zarychta if [ -n "${defif}" ] || [ -n "${defif6}" ]; then 560696600cSBjoern A. Zeeb if [ ${waited} -ne 0 ]; then 57*d52de9a3SMarek Zarychta [ -n "${defif}" ] && echo -n "($defif)=>inet " 58*d52de9a3SMarek Zarychta [ -n "${defif6}" ] && echo -n "($defif6)=>inet6" 590696600cSBjoern A. Zeeb nl=1 600696600cSBjoern A. Zeeb fi 610696600cSBjoern A. Zeeb break 620696600cSBjoern A. Zeeb fi 630696600cSBjoern A. Zeeb if [ ${waited} -eq 0 ]; then 640696600cSBjoern A. Zeeb echo -n "Waiting ${defaultroute_delay}s for the default route interface: " 650696600cSBjoern A. Zeeb else 660696600cSBjoern A. Zeeb echo -n . 670696600cSBjoern A. Zeeb fi 680696600cSBjoern A. Zeeb if [ ${waited} -eq ${defaultroute_carrier_delay} ] && ! defaultroute_carrier; then 690696600cSBjoern A. Zeeb echo -n "(no carrier)" 700696600cSBjoern A. Zeeb break 710696600cSBjoern A. Zeeb fi 720696600cSBjoern A. Zeeb nl=1 730696600cSBjoern A. Zeeb sleep 1 740696600cSBjoern A. Zeeb waited=$(($waited + 1)) 750696600cSBjoern A. Zeeb done 760696600cSBjoern A. Zeeb 770696600cSBjoern A. Zeeb [ -n "$nl" ] && echo 780696600cSBjoern A. Zeeb} 790696600cSBjoern A. Zeeb 800696600cSBjoern A. Zeebload_rc_config $name 81f99f0ee1SAlexander Leidinger 82f99f0ee1SAlexander Leidinger# doesn't make sense to run in a svcj: config setting 83f99f0ee1SAlexander Leidingerdefaultroute_svcj="NO" 84f99f0ee1SAlexander Leidinger 850696600cSBjoern A. Zeebrun_rc_command "$1" 86