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