aboutsummaryrefslogtreecommitdiff
path: root/init.d
diff options
context:
space:
mode:
Diffstat (limited to 'init.d')
-rw-r--r--init.d/.gitignore1
-rw-r--r--init.d/Makefile3
-rw-r--r--init.d/staticroute.in73
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"
+}