From baeb59cd2e7bc68e95c8fb3f94ecb0c7d6e54589 Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Fri, 16 Oct 2009 08:08:22 +0100 Subject: Add a new staticroute init script so that .... static routes can be configured! Fixes Gentoo #288421. --- conf.d/.gitignore | 1 + conf.d/Makefile | 15 ++++++---- conf.d/Makefile.Linux | 1 + conf.d/staticroute.BSD | 2 ++ conf.d/staticroute.Linux | 2 ++ init.d/.gitignore | 1 + init.d/Makefile | 3 +- init.d/staticroute.in | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 conf.d/staticroute.BSD create mode 100644 conf.d/staticroute.Linux create mode 100644 init.d/staticroute.in diff --git a/conf.d/.gitignore b/conf.d/.gitignore index 992ae12..377ebc0 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 b78baf5..5f9cf45 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 7467940..37745de 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 0000000..0d07711 --- /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 0000000..e25e03f --- /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 94a40e2..a02adc1 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 0786e05..6a0323c 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 0000000..0b49ca9 --- /dev/null +++ b/init.d/staticroute.in @@ -0,0 +1,73 @@ +#!@PREFIX@/sbin/runscript +# Copyright (c) 2009 Roy Marples +# 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" +} -- cgit v1.2.3