openrc/init.d/staticroute.in
Andrew Gregory 8a44067838 Fix shebangs in services to point to the correct location of runscript
SBINDIR and BINDIR can be set independently of PREFIX.  This fixes
broken shebangs in service files when SBINDIR is set to something other
than PREFIX/sbin

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2013-02-23 20:30:39 -06:00

105 lines
1.6 KiB
Plaintext

#!@SBINDIR@/runscript
# Copyright (c) 2009 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
# This script was inspired by the equivalent rc.d staticroute from NetBSD.
description="Configures static routes."
__nl="
"
depend()
{
provide net
use network
keyword -jail -prefix -vserver
}
pre_flight_checks()
{
route=route
[ -s /etc/route.conf ] && return 0
if [ -n "$staticiproute" ]; then
route="ip route"
staticroute="$staticiproute"
fi
}
dump_args()
{
# Route configuration file, as used by the NetBSD RC system
if [ -s /etc/route.conf ]; then
cat /etc/route.conf
return $?
fi
case "$staticroute" in
*"$__nl"*)
echo "$staticroute"
;;
*)
(
set -o noglob
IFS=';'; set -- $staticroute
IFS="$__nl"; echo "$*"
)
;;
esac
}
do_routes()
{
local xtra= family=
[ "$RC_UNAME" != Linux ] && xtra=-q
ebegin "$1 static routes"
eindent
pre_flight_checks
dump_args | while read args; do
[ -z "$args" ] && continue
case "$args" in
"#"*)
;;
"+"*)
[ $2 = "add" ] && eval ${args#*+}
;;
"-"*)
[ $2 = "del" -o $2 = "delete" ] && eval ${args#*-}
;;
*)
veinfo "$args"
case "$route" in
"ip route")
ip route $2 $args
;;
*)
# Linux route does cannot work it out ...
if [ "$RC_UNAME" = Linux ]; then
case "$args" in
*:*) family="-A inet6";;
*) family=;;
esac
fi
route $family $xtra $2 -$args
;;
esac
veend $?
esac
done
eoutdent
eend 0
}
start()
{
do_routes "Adding" "add"
}
stop()
{
local cmd="delete"
[ "$RC_UNAME" = Linux ] && cmd="del"
do_routes "Deleting" "$cmd"
}