summaryrefslogtreecommitdiff
path: root/mk/rootfs/openrc/etc/init.d/staticroute
diff options
context:
space:
mode:
Diffstat (limited to 'mk/rootfs/openrc/etc/init.d/staticroute')
-rw-r--r--mk/rootfs/openrc/etc/init.d/staticroute103
1 files changed, 103 insertions, 0 deletions
diff --git a/mk/rootfs/openrc/etc/init.d/staticroute b/mk/rootfs/openrc/etc/init.d/staticroute
new file mode 100644
index 0000000..76d46fa
--- /dev/null
+++ b/mk/rootfs/openrc/etc/init.d/staticroute
@@ -0,0 +1,103 @@
+#!/sbin/openrc-run
+# Copyright (c) 2009 Roy Marples <roy@marples.name>
+# 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
+}
+
+pre_flight_checks()
+{
+ route=route
+ [ -s /etc/route.conf ] && return 0
+
+ if [ -n "$staticiproute" ]; then
+ route="ip route"
+ staticroute="$staticiproute"
+ fi
+}
+
+dump_args()
+{
+ # Route configuration file, as used by the NetBSD RC system
+ if [ -s /etc/route.conf ]; then
+ cat /etc/route.conf
+ return $?
+ fi
+
+ case "$staticroute" in
+ *"$__nl"*)
+ echo "$staticroute"
+ ;;
+ *)
+ (
+ set -o noglob
+ IFS=';'; set -- $staticroute
+ IFS="$__nl"; echo "$*"
+ )
+ ;;
+ esac
+}
+
+do_routes()
+{
+ local xtra= family=
+ [ "$RC_UNAME" != Linux ] && xtra=-q
+
+ ebegin "$1 static routes"
+ eindent
+ pre_flight_checks
+ dump_args | while read args; do
+ [ -z "$args" ] && continue
+ case "$args" in
+ "#"*)
+ ;;
+ "+"*)
+ [ $2 = "add" ] && eval ${args#*+}
+ ;;
+ "-"*)
+ [ $2 = "del" -o $2 = "delete" ] && eval ${args#*-}
+ ;;
+ *)
+ veinfo "$args"
+ case "$route" in
+ "ip route")
+ ip route $2 $args
+ ;;
+ *)
+ # Linux route does cannot work it out ...
+ if [ "$RC_UNAME" = Linux ]; then
+ case "$args" in
+ *:*) family="-A inet6";;
+ *) family=;;
+ esac
+ fi
+ route $family $xtra $2 -$args
+ ;;
+ esac
+ veend $?
+ esac
+ done
+ eoutdent
+ eend 0
+}
+
+start()
+{
+ do_routes "Adding" "add"
+}
+
+stop()
+{
+ local cmd="delete"
+ [ "$RC_UNAME" = Linux ] && cmd="del"
+ do_routes "Deleting" "$cmd"
+}