diff options
author | Roy Marples <roy@marples.name> | 2009-10-16 08:08:22 +0100 |
---|---|---|
committer | Roy Marples <roy@marples.name> | 2009-10-16 08:08:22 +0100 |
commit | baeb59cd2e7bc68e95c8fb3f94ecb0c7d6e54589 (patch) | |
tree | 47cea1798b9ae163d14c988df361b5ff2cfc9f16 /init.d | |
parent | a4b03ead790c5b02e99c2cd5005a508bf8540150 (diff) |
Add a new staticroute init script so that .... static routes can be configured!
Fixes Gentoo #288421.
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" +} |