diff options
-rw-r--r-- | conf.d/staticroute.Linux | 3 | ||||
-rw-r--r-- | init.d/staticroute.in | 53 |
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 } |