Extend the *_network_route helper functions by parameters to specify device and, optionally, gateway for the route. Signed-off-by: Gernot Hillier <gernot.hillier at siemens.com> --- vpnc-script | 67 +++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/vpnc-script b/vpnc-script index ae13947..75e1cda 100755 --- a/vpnc-script +++ b/vpnc-script @@ -187,7 +187,7 @@ do_ifconfig() { fi if [ -n "$INTERNAL_IP4_NETMASK" ]; then - set_network_route $INTERNAL_IP4_NETADDR $INTERNAL_IP4_NETMASK $INTERNAL_IP4_NETMASKLEN + set_network_route "$INTERNAL_IP4_NETADDR" "$INTERNAL_IP4_NETMASK" "$INTERNAL_IP4_NETMASKLEN" "$TUNDEV" fi # If the netmask is provided, it contains the address _and_ netmask @@ -248,7 +248,12 @@ if [ -n "$IPROUTE" ]; then NETWORK="$1" NETMASK="$2" NETMASKLEN="$3" - $IPROUTE route replace "$NETWORK/$NETMASKLEN" dev "$TUNDEV" + NETDEV="$4" + if [ -n "$5" ]; then + $IPROUTE route replace "$NETWORK/$NETMASKLEN" dev "$NETDEV" via "$5" + else + $IPROUTE route replace "$NETWORK/$NETMASKLEN" dev "$NETDEV" + fi $IPROUTE route flush cache } @@ -264,7 +269,8 @@ if [ -n "$IPROUTE" ]; then NETWORK="$1" NETMASK="$2" NETMASKLEN="$3" - $IPROUTE route $route_syntax_del "$NETWORK/$NETMASKLEN" dev "$TUNDEV" + NETDEV="$4" + $IPROUTE route $route_syntax_del "$NETWORK/$NETMASKLEN" dev "$NETDEV" $IPROUTE route flush cache } @@ -277,7 +283,12 @@ if [ -n "$IPROUTE" ]; then set_ipv6_network_route() { NETWORK="$1" NETMASKLEN="$2" - $IPROUTE -6 route replace "$NETWORK/$NETMASKLEN" dev "$TUNDEV" + NETDEV="$3" + if [ -n "$4" ]; then + $IPROUTE -6 route replace "$NETWORK/$NETMASKLEN" dev "$NETDEV" via "$4" + else + $IPROUTE -6 route replace "$NETWORK/$NETMASKLEN" dev "$NETDEV" + fi $IPROUTE route flush cache } @@ -289,7 +300,8 @@ if [ -n "$IPROUTE" ]; then del_ipv6_network_route() { NETWORK="$1" NETMASKLEN="$2" - $IPROUTE -6 route del "$NETWORK/$NETMASKLEN" dev "$TUNDEV" + NETDEV="$3" + $IPROUTE -6 route del "$NETWORK/$NETMASKLEN" dev "$NETDEV" $IPROUTE -6 route flush cache } else # use route command @@ -319,8 +331,13 @@ else # use route command NETWORK="$1" NETMASK="$2" NETMASKLEN="$3" + if [ -n "$5" ]; then + NETGW="$5" + else + NETGW="$INTERNAL_IP4_ADDRESS" + fi del_network_route "$NETWORK" "$NETMASK" "$NETMASKLEN" - route add -net "$NETWORK" $route_syntax_netmask "$NETMASK" $route_syntax_gw "$INTERNAL_IP4_ADDRESS" $route_syntax_interface + route add -net "$NETWORK" $route_syntax_netmask "$NETMASK" $route_syntax_gw "$NETGW" $route_syntax_interface } reset_default_route() { @@ -341,7 +358,12 @@ else # use route command NETWORK="$1" NETMASK="$2" NETMASKLEN="$3" - route $route_syntax_del -net "$NETWORK" $route_syntax_netmask "$NETMASK" $route_syntax_gw "$INTERNAL_IP4_ADDRESS" + if [ -n "$5" ]; then + NETGW="$5" + else + NETGW="$INTERNAL_IP4_ADDRESS" + fi + route $route_syntax_del -net "$NETWORK" $route_syntax_netmask "$NETMASK" $route_syntax_gw "$NETGW" } set_ipv6_default_route() { @@ -351,7 +373,13 @@ else # use route command set_ipv6_network_route() { NETWORK="$1" NETMASK="$2" - route add -inet6 -net "$NETWORK/$NETMASK" "$INTERNAL_IP6_ADDRESS" $route_syntax_interface + if [ -n "$4" ]; then + NETGW="$4" + else + NETGW="$INTERNAL_IP6_ADDRESS" + fi + + route add -inet6 -net "$NETWORK/$NETMASK" "$NETGW" $route_syntax_interface : } @@ -363,7 +391,12 @@ else # use route command del_ipv6_network_route() { NETWORK="$1" NETMASK="$2" - route $route_syntax_del -inet6 "$NETWORK/$NETMASK" "$INTERNAL_IP6_ADDRESS" + if [ -n "$4" ]; then + NETGW="$4" + else + NETGW="$INTERNAL_IP6_ADDRESS" + fi + route $route_syntax_del -inet6 "$NETWORK/$NETMASK" "$NETGW" : } @@ -738,7 +771,7 @@ do_connect() { eval NETMASK="\${CISCO_SPLIT_INC_${i}_MASK}" eval NETMASKLEN="\${CISCO_SPLIT_INC_${i}_MASKLEN}" if [ "$NETWORK" != "0.0.0.0" ]; then - set_network_route "$NETWORK" "$NETMASK" "$NETMASKLEN" + set_network_route "$NETWORK" "$NETMASK" "$NETMASKLEN" "$TUNDEV" else set_default_route fi @@ -746,7 +779,7 @@ do_connect() { done for i in $INTERNAL_IP4_DNS ; do echo "$i" | grep : >/dev/null || \ - set_network_route "$i" "255.255.255.255" "32" + set_network_route "$i" "255.255.255.255" "32" "$TUNDEV" done elif [ -n "$INTERNAL_IP4_ADDRESS" ]; then set_default_route @@ -757,7 +790,7 @@ do_connect() { eval NETWORK="\${CISCO_IPV6_SPLIT_INC_${i}_ADDR}" eval NETMASKLEN="\${CISCO_IPV6_SPLIT_INC_${i}_MASKLEN}" if [ $NETMASKLEN -lt 128 ]; then - set_ipv6_network_route "$NETWORK" "$NETMASKLEN" + set_ipv6_network_route "$NETWORK" "$NETMASKLEN" "$TUNDEV" else set_ipv6_default_route fi @@ -765,7 +798,7 @@ do_connect() { done for i in $INTERNAL_IP4_DNS ; do if echo "$i" | grep : >/dev/null; then - set_ipv6_network_route "$i" "128" + set_ipv6_network_route "$i" "128" "$TUNDEV" fi done elif [ -n "$INTERNAL_IP6_NETMASK" -o -n "$INTERNAL_IP6_ADDRESS" ]; then @@ -787,14 +820,14 @@ do_disconnect() { if [ "$NETWORK" != "0.0.0.0" ]; then # FIXME: This doesn't restore previously overwritten # routes. - del_network_route "$NETWORK" "$NETMASK" "$NETMASKLEN" + del_network_route "$NETWORK" "$NETMASK" "$NETMASKLEN" "$TUNDEV" else reset_default_route fi i=`expr $i + 1` done for i in $INTERNAL_IP4_DNS ; do - del_network_route "$i" "255.255.255.255" "32" + del_network_route "$i" "255.255.255.255" "32" "$TUNDEV" done else reset_default_route @@ -807,12 +840,12 @@ do_disconnect() { if [ $NETMASKLEN -eq 0 ]; then reset_ipv6_default_route else - del_ipv6_network_route "$NETWORK" "$NETMASKLEN" + del_ipv6_network_route "$NETWORK" "$NETMASKLEN" "$TUNDEV" fi i=`expr $i + 1` done for i in $INTERNAL_IP6_DNS ; do - del_ipv6_network_route "$i" "128" + del_ipv6_network_route "$i" "128" "$TUNDEV" done elif [ -n "$INTERNAL_IP6_NETMASK" -o -n "$INTERNAL_IP6_ADDRESS" ]; then reset_ipv6_default_route -- 2.12.3