diff options
Diffstat (limited to 'init.d')
-rw-r--r-- | init.d/.gitignore | 1 | ||||
-rw-r--r-- | init.d/Makefile | 3 | ||||
-rw-r--r-- | init.d/staticroute.in | 73 |
3 files changed, 76 insertions, 1 deletions
diff --git a/init.d/.gitignore b/init.d/.gitignore index 94a40e24..a02adc1d 100644 --- a/init.d/.gitignore +++ b/init.d/.gitignore @@ -24,6 +24,7 @@ mount-ro mtab numlock procfs +staticroute sysfs devdb hostid diff --git a/init.d/Makefile b/init.d/Makefile index 0786e050..6a0323ce 100644 --- a/init.d/Makefile +++ b/init.d/Makefile @@ -1,6 +1,7 @@ DIR= ${INITDIR} SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in netmount.in \ - network.in root.in savecache.in swap.in swclock.in sysctl.in urandom.in + network.in root.in savecache.in staticroute.in swap.in swclock.in \ + sysctl.in urandom.in BIN= ${OBJS} # Build our old net foo or not diff --git a/init.d/staticroute.in b/init.d/staticroute.in new file mode 100644 index 00000000..0b49ca9a --- /dev/null +++ b/init.d/staticroute.in @@ -0,0 +1,73 @@ +#!@PREFIX@/sbin/runscript +# Copyright (c) 2009 Roy Marples <roy@marples.name> +# All rights reserved. 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 +} + +dump_args() +{ + if [ -s /etc/route.conf ]; then + cat /etc/route.conf + else + case "$staticroute" in + *"$__nl"*) + echo "$staticroute" + ;; + *) + ( + set -o noglob + IFS=';'; set -- $staticroute + IFS="$__nl"; echo "$*" + ) + ;; + esac + fi +} + +do_routes() +{ + local xtra= + [ "$RC_UNAME" != Linux ] && xtra=-q + + ebegin "$1 static routes" + dump_args | while read args; do + [ -z "$args" ] && continue + case "$args" in + "#"*) + ;; + "+"*) + [ $2 = "add" ] && eval ${args#*+} + ;; + "-"*) + [ $2 = "del" -o $2 = "delete" ] && eval ${args#*-} + ;; + *) + route $xtra $2 -$args + ;; + esac + done + eend 0 +} + +start() +{ + do_routes "Adding" "add" +} + +stop() +{ + local cmd="delete" + [ "$RC_UNAME" = Linux ] && cmd="del" + do_routes "Deleting" "$cmd" +} |