#!@SBINDIR@/openrc-run # Copyright (c) 2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/master/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Delays until the network is online or a specific timeout" depend() { after modules need sysfs provide network-online keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver } get_interfaces() { local ifname iftype for ifname in /sys/class/net/*; do read iftype < ${ifname}/type [ "$iftype" = "1" ] && printf "%s " ${ifname##*/} done } start () { local carriers configured dev gateway ifcount infinite local rc state x ebegin "Checking to see if the network is online" rc=0 interfaces=${interfaces:-$(get_interfaces)} timeout=${timeout:-120} [ $timeout -eq 0 ] && infinite=true || infinite=false while $infinite || [ $timeout -gt 0 ]; do carriers=0 configured=0 ifcount=0 for dev in ${interfaces}; do : $((ifcount += 1)) read x < /sys/class/net/$dev/carrier [ $x -eq 1 ] && : $((carriers += 1)) read x < /sys/class/net/$dev/operstate [ "$x" = up ] && : $((configured += 1)) done [ $configured -eq $ifcount ] && [ $carriers -ge 1 ] && break sleep 1 : $((timeout -= 1)) done ! $infinite && [ $timeout -eq 0 ] && rc=1 include_ping_test=${include_ping_test:-${ping_default_gateway}} if [ -n "${ping_default_gateway}" ]; then ewarn "ping_default_gateway is deprecated, please use include_ping_test' fi if [ $rc -eq 0 ] && yesno ${include_ping_test:-no}; then ping_test_host="${ping_test_host:-google.com}" if [ -n "$ping_test_host" ]; then ping -c 1 $ping_test_host > /dev/null 2>&1 rc=$? fi fi eend $rc "The network is offline" }