Add net-online service
This commit is contained in:
parent
d26013494d
commit
960881fcfe
12
NEWS.md
12
NEWS.md
@ -3,6 +3,18 @@
|
|||||||
This file will contain a list of notable changes for each release. Note
|
This file will contain a list of notable changes for each release. Note
|
||||||
the information in this file is in reverse order.
|
the information in this file is in reverse order.
|
||||||
|
|
||||||
|
## OpenRC-0.19
|
||||||
|
|
||||||
|
This version adds a net-online service. By default, this
|
||||||
|
service will check all known network interfaces for a configured
|
||||||
|
interface or a carrier. It will register as started only when all
|
||||||
|
interfaces are configured and there is at least a carrier on one
|
||||||
|
interface. The behaviour of this service can be modified in
|
||||||
|
/etc/conf.d/net-online.
|
||||||
|
|
||||||
|
Currently, this only works on Linux, but if anyone wants to port to
|
||||||
|
*bsd, that would be welcomed.
|
||||||
|
|
||||||
## OpenRC-0.18.3
|
## OpenRC-0.18.3
|
||||||
|
|
||||||
Modern Linux systems expect /etc/mtab to be a symbolic link to
|
Modern Linux systems expect /etc/mtab to be a symbolic link to
|
||||||
|
@ -15,7 +15,8 @@ include ${MK}/os.mk
|
|||||||
|
|
||||||
CONF-FreeBSD= ipfw moused powerd rarpd savecore syscons
|
CONF-FreeBSD= ipfw moused powerd rarpd savecore syscons
|
||||||
|
|
||||||
CONF-Linux= consolefont devfs dmesg hwclock keymaps killprocs modules mtab
|
CONF-Linux= consolefont devfs dmesg hwclock keymaps killprocs modules mtab \
|
||||||
|
net-online
|
||||||
|
|
||||||
CONF-NetBSD= moused rarpd savecore
|
CONF-NetBSD= moused rarpd savecore
|
||||||
|
|
||||||
|
15
conf.d/net-online
Normal file
15
conf.d/net-online
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# The interfaces setting controls which interfaces the net-online
|
||||||
|
# service considers in deciding whether the network is active. By
|
||||||
|
# default, it is all ethernet or wireless LAN interfaces.
|
||||||
|
#interfaces=""
|
||||||
|
|
||||||
|
# This setting controls whether a ping to the default gateway is
|
||||||
|
# included in the test for network connectivity after all interfaces
|
||||||
|
# are active.
|
||||||
|
#ping_default_gateway=no
|
||||||
|
|
||||||
|
# The timeout setting controls how long the net-online service waits
|
||||||
|
# for the network to be configured.
|
||||||
|
# The default is 120 seconds.
|
||||||
|
# if this is set to 0, the wait is infinite.
|
||||||
|
#timeout=120
|
@ -23,7 +23,7 @@ SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
|
|||||||
|
|
||||||
SRCS-Linux= binfmt.in devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \
|
SRCS-Linux= binfmt.in devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \
|
||||||
killprocs.in modules.in mount-ro.in mtab.in numlock.in \
|
killprocs.in modules.in mount-ro.in mtab.in numlock.in \
|
||||||
procfs.in sysfs.in termencoding.in tmpfiles.dev.in
|
procfs.in net-online.in sysfs.in termencoding.in tmpfiles.dev.in
|
||||||
|
|
||||||
# Generic BSD scripts
|
# Generic BSD scripts
|
||||||
SRCS-NetBSD= hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \
|
SRCS-NetBSD= hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \
|
||||||
|
69
init.d/net-online.in
Normal file
69
init.d/net-online.in
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
#!@SBINDIR@/openrc-run
|
||||||
|
# Copyright (C) 2015 William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
# Released under the 2-clause BSD license.
|
||||||
|
|
||||||
|
description="Delays until the network is online or a specific timeout"
|
||||||
|
|
||||||
|
depend()
|
||||||
|
{
|
||||||
|
after modules
|
||||||
|
need sysfs
|
||||||
|
keyword -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
|
||||||
|
}
|
||||||
|
|
||||||
|
get_default_gateway()
|
||||||
|
{
|
||||||
|
local cmd gateway
|
||||||
|
if command -v ip > /dev/null 2>&1; then
|
||||||
|
cmd="ip route show"
|
||||||
|
else
|
||||||
|
cmd=route
|
||||||
|
fi
|
||||||
|
set -- $($cmd | grep default)
|
||||||
|
[ "$2" != via ] && gateway="$2" || gateway="$3"
|
||||||
|
printf "%s" $gateway
|
||||||
|
}
|
||||||
|
|
||||||
|
start ()
|
||||||
|
{
|
||||||
|
local carriers configured dev gateway ifcount infinite interfaces
|
||||||
|
local rc state timeout 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
|
||||||
|
if [ $rc -eq 0 ] && yesno ${ping_default_gateway:-no}; then
|
||||||
|
gateway="$(get_default_gateway)"
|
||||||
|
if [ -n "$gateway" ] && ! ping -c 1 $gateway > /dev/null 2>&1; then
|
||||||
|
rc=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
eend $rc "The network is offline"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user