diff options
Diffstat (limited to 'main/openrc/networking.initd')
-rw-r--r-- | main/openrc/networking.initd | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/main/openrc/networking.initd b/main/openrc/networking.initd new file mode 100644 index 0000000000..895db59eed --- /dev/null +++ b/main/openrc/networking.initd @@ -0,0 +1,69 @@ +#!/sbin/runscript + +# note that the spoofprotect, syncoockies and ip_forward options are set in +# /etc/sysctl.conf + +ifconf=/etc/network/interfaces +ifstate=/var/run/ifstate + +single_iface="${SVCNAME#*.}" +if [ "$single_iface" = "$SVCNAME" ]; then + single_iface= +fi + +depend() { + after bootmisc hwdrivers modules + provide net + keyword nojail noprefix novserver +} + +# find interfaces we want to start +find_ifaces() { + if [ -n "$single_iface" ]; then + echo $single_iface + else + awk '$1 == "auto" {for (i = 2; i <= NF; i = i + 1) printf("%s ", $i)}' $ifconf + fi +} + +# return the list of interfaces we should try stop +find_running_ifaces() { + if [ -n "$single_iface" ]; then + echo $single_iface + else + awk -F= '{print $2}' $ifstate + fi +} + +start() { + local iface= ret=1 + ebegin "Starting networking" + eindent + for iface in $(find_ifaces); do + local r=0 + ebegin "$iface" + if ! ifup $iface >/dev/null; then + ifdown $iface >/dev/null 2>&1 + r=1 + fi + # atleast one interface needs to be started for action + # to be success + eend $r && ret=0 + done + eoutdent + return $ret +} + +stop() { + local iface= + ebegin "Stopping networking" + eindent + for iface in $(find_running_ifaces); do + ebegin "$iface" + ifdown -f $iface >/dev/null + eend $? + done + eoutdent + return 0 +} + |