#!/bin/sh
#
# gwbackup - Automatic backup of default gateway.
# v0.7
# lunix@haluz.net


WATCH_IP="1.1.1.1"		#check reachability of this address (could be identical with PRI_GW)
PRI_GW="10.19.31.1"		#primary default gw
SEC_GW="172.16.70.1"		#secondary default gw
PERIOD="10"			#interval between checks in seconds
COUNT="5"			#number of packets (all of them needs to be lost to activate backup)

PING=`which ping`
ROUTE=`which route`
LOGGER=`which logger`
LOG_OPT=""			#default null, -s for debugging
STATE=1				#default state NORMAL

$LOGGER $LOG_OPT -t "gwbackup" "STARTED - watching $WATCH_IP. pri gw: $PRI_GW, sec gw: $SEC_GW"
$ROUTE add -host $WATCH_IP gw $PRI_GW

while [ 1 ]; do

	$PING -c $COUNT -q $WATCH_IP > /dev/null

	if [[ $? == 0 ]] ; then
			if [[ $STATE == 0 ]] ; then
				$LOGGER $LOG_OPT -t "gwbackup" "state change from BACKUP to NORMAL"
				$ROUTE del default gw $SEC_GW
				$ROUTE add default gw $PRI_GW
     				STATE=1
			fi
     	else
                        if [[ $STATE == 1 ]] ; then
				$LOGGER $LOG_OPT -t "gwbackup" "state change from NORMAL to BACKUP"
				$ROUTE del default gw $PRI_GW
				$ROUTE add default gw $SEC_GW
				STATE=0
			fi
	fi

	sleep $PERIOD

done
