aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2009-10-16 08:08:22 +0100
committerRoy Marples <roy@marples.name>2009-10-16 08:08:22 +0100
commitbaeb59cd2e7bc68e95c8fb3f94ecb0c7d6e54589 (patch)
tree47cea1798b9ae163d14c988df361b5ff2cfc9f16
parenta4b03ead790c5b02e99c2cd5005a508bf8540150 (diff)
Add a new staticroute init script so that .... static routes can be configured!
Fixes Gentoo #288421.
-rw-r--r--conf.d/.gitignore1
-rw-r--r--conf.d/Makefile15
-rw-r--r--conf.d/Makefile.Linux1
-rw-r--r--conf.d/staticroute.BSD2
-rw-r--r--conf.d/staticroute.Linux2
-rw-r--r--init.d/.gitignore1
-rw-r--r--init.d/Makefile3
-rw-r--r--init.d/staticroute.in73
8 files changed, 92 insertions, 6 deletions
diff --git a/conf.d/.gitignore b/conf.d/.gitignore
index 992ae129..377ebc05 100644
--- a/conf.d/.gitignore
+++ b/conf.d/.gitignore
@@ -1 +1,2 @@
network
+staticroute
diff --git a/conf.d/Makefile b/conf.d/Makefile
index b78baf55..5f9cf453 100644
--- a/conf.d/Makefile
+++ b/conf.d/Makefile
@@ -1,14 +1,19 @@
DIR= ${CONFDIR}
-CONF= bootmisc fsck hostname local localmount network urandom
+CONF= bootmisc fsck hostname local localmount network staticroute urandom
-TARGETS+= network
-CLEANFILES+= network
+TARGETS+= network staticroute
+CLEANFILES+= network staticroute
MK= ../mk
include ${MK}/os.mk
include Makefile.${OS}
include ${MK}/scripts.mk
+SOS?= BSD
+
network: network.in network.${OS}
- cp network.in network
- [ -e network.${OS} ] && cat network.${OS} >> network || true
+ cp $@.in $@
+ [ -e $@.${OS} ] && cat $@.${OS} >> $@ || true
+
+staticroute: staticroute.${SOS}
+ cp $@.${SOS} $@
diff --git a/conf.d/Makefile.Linux b/conf.d/Makefile.Linux
index 74679400..37745de2 100644
--- a/conf.d/Makefile.Linux
+++ b/conf.d/Makefile.Linux
@@ -1 +1,2 @@
CONF+= consolefont dmesg hwclock keymaps modules
+SOS= Linux
diff --git a/conf.d/staticroute.BSD b/conf.d/staticroute.BSD
new file mode 100644
index 00000000..0d07711e
--- /dev/null
+++ b/conf.d/staticroute.BSD
@@ -0,0 +1,2 @@
+# Example static route. See route(8) for syntax.
+staticroute="net 192.168.0.0 -netmask 255.255.0.0 10.73.1.1"
diff --git a/conf.d/staticroute.Linux b/conf.d/staticroute.Linux
new file mode 100644
index 00000000..e25e03f6
--- /dev/null
+++ b/conf.d/staticroute.Linux
@@ -0,0 +1,2 @@
+# Example static route. See route(8) for syntax.
+staticroute="net 192.168.0.0 netmask 255.255.0.0 gw 10.73.1.1"
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"
+}