1#!/bin/bash
2#
3# Maxim Krasnyansky <max_mk@yahoo.com>
4# $Id: reroute,v 1.3.2.1 2007/06/29 05:27:18 mtbishop Exp $
5#
6IP=/sbin/ip
7
8if [ $# -ne 3 ]; then
9   echo "Usage: reroute option Source_IP Destination_IP"
10   echo "Options:"
11   echo "   -m - Move route Source_IP -> Destination_IP to table 100."
12   echo "        Configure source based routing."
13
14   echo "   -r - Restore route Source_IP -> Destination_IP to default table."
15   echo "        Delete source based routing."
16   exit 1;
17fi
18
19MODE=$1
20IP_S=$2
21IP_D=$3
22
23# Get original route
24ROUTE=`$IP route get $IP_D from $IP_S | grep dev`
25
26# Parse route
27set - $ROUTE
28while [ "$1" != "" ]; do
29    if [ "$1" = "src" ]; then
30	shift
31	O_SRC=$1
32    fi
33    if [ "$1" = "dev" ]; then
34	shift
35	O_DEV=$1
36    fi
37    if [ "$1" = "via" ]; then
38	shift
39	O_GW=$1
40    fi
41    shift
42done
43
44# Flush all routes, rules and cache for that IP
45$IP route flush $IP_D table all >/dev/null 2>&1
46$IP rule del from $IP_S to $IP_D >/dev/null 2>&1
47
48case $MODE in
49   -m)
50	# Add route via orig device to table 100
51	$IP route add $ROUTE table 100 >/dev/null 2>&1
52
53	# Add source based routing
54	$IP rule add from $IP_S to $IP_D table 100 >/dev/null 2>&1
55	;;
56
57   -r)
58	# Add route via orig device to defaul table
59	$IP route add $ROUTE >/dev/null 2>&1
60	;;
61esac
62
63exit 0
64