aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf.d/staticroute.Linux3
-rw-r--r--init.d/staticroute.in53
2 files changed, 41 insertions, 15 deletions
diff --git a/conf.d/staticroute.Linux b/conf.d/staticroute.Linux
index b56bd7cb..15956cd1 100644
--- a/conf.d/staticroute.Linux
+++ b/conf.d/staticroute.Linux
@@ -1,2 +1,5 @@
# Example static route. See route(8) for syntax.
#staticroute="net 192.168.0.0 netmask 255.255.0.0 gw 10.73.1.1"
+
+# Example static route using iproute2. See ip(8) for syntax.
+#staticiproute="192.168.0.0/24 via 10.73.1.1"
diff --git a/init.d/staticroute.in b/init.d/staticroute.in
index 0b49ca9a..8aea55c2 100644
--- a/init.d/staticroute.in
+++ b/init.d/staticroute.in
@@ -15,24 +15,36 @@ depend()
keyword -jail -prefix -vserver
}
+pre_flight_checks()
+{
+ route=route
+ [ -s /etc/route.conf ] && return 0
+
+ if [ -n "$staticiproute" ]; then
+ route="ip route"
+ staticroute="$staticiproute"
+ fi
+}
+
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
+ return $?
fi
+
+ case "$staticroute" in
+ *"$__nl"*)
+ echo "$staticroute"
+ ;;
+ *)
+ (
+ set -o noglob
+ IFS=';'; set -- $staticroute
+ IFS="$__nl"; echo "$*"
+ )
+ ;;
+ esac
}
do_routes()
@@ -41,6 +53,8 @@ do_routes()
[ "$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
@@ -53,10 +67,19 @@ do_routes()
[ $2 = "del" -o $2 = "delete" ] && eval ${args#*-}
;;
*)
- route $xtra $2 -$args
- ;;
+ veinfo "$args"
+ case "$route" in
+ "ip route")
+ ip route $2 $args
+ ;;
+ *)
+ route $xtra $2 -$args
+ ;;
+ esac
+ veend $?
esac
done
+ eoutdent
eend 0
}