From a165fbe384ed4851ea42d7fa2d2d74daa0c02f1c Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Mon, 14 Dec 2009 19:31:18 +0000 Subject: Support inet6 routes. --- conf.d/network.in | 2 ++ init.d/network.in | 21 +++++++++++++++++++++ init.d/staticroute.in | 11 +++++++++-- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/conf.d/network.in b/conf.d/network.in index 72019253..68141a71 100644 --- a/conf.d/network.in +++ b/conf.d/network.in @@ -11,6 +11,8 @@ # You can assign a default route #defaultroute="192.168.0.1" +#defaultroute6="2001:a:b:c" + # Lastly, the interfaces variable pulls in virtual interfaces that cannot # be automatically detected. #interfaces="br0 bond0 vlan0" diff --git a/init.d/network.in b/init.d/network.in index 3beba1ca..259fb31c 100644 --- a/init.d/network.in +++ b/init.d/network.in @@ -137,6 +137,7 @@ routeflush() if [ "$RC_UNAME" = Linux ]; then if [ -x /sbin/ip ]; then ip route flush scope global + ip route delete default 2>/dev/null else # Sadly we also delete some link routes, but # this cannot be helped @@ -156,6 +157,8 @@ routeflush() esac route del $flags $dest $netmask $xtra done + # Erase any default dev eth0 routes + route del default 2>/dev/null fi else route -qn flush @@ -263,6 +266,24 @@ start() eend $? fi + if [ -n "$defaultroute6" ]; then + ebegin "Setting default route $defaultroute6" + if [ "$RC_UNAME" = Linux ]; then + routecmd="route -A inet6 add" + if [ "${defaultroute6#dev }" = "$defaultroute6" ]; then + routecmd="$routecmd gw" + fi + else + routecmd="route -inet6 add" + fi + $routecmd default $defaultroute6 + eend $? + elif [ -n "$defaultiproute6" ]; then + ebegin "Setting default route $defaultiproute6" + ip route add default via $defaultiproute6 + eend $? + fi + return 0 } diff --git a/init.d/staticroute.in b/init.d/staticroute.in index 9f38b562..9995d37f 100644 --- a/init.d/staticroute.in +++ b/init.d/staticroute.in @@ -50,7 +50,7 @@ dump_args() do_routes() { - local xtra= + local xtra= family= [ "$RC_UNAME" != Linux ] && xtra=-q ebegin "$1 static routes" @@ -74,7 +74,14 @@ do_routes() ip route $2 $args ;; *) - route $xtra $2 -$args + # Linux route does cannot work it out ... + if [ "$RC_UNAME" = Linux ]; then + case "$args" in + *:*) family="-A inet6";; + *) family=;; + esac + fi + route $famly $xtra $2 -$args ;; esac veend $? -- cgit v1.2.3