#!/bin/bash

############################## SHARED DEFS ##############################

. /usr/local/AS/etc/igw-common.sh

############################## SPECIFIC DEFS ##############################

LOG=/tmp/igw-mon.txt
WORKING_PATH=194.79.94.16
PROTECTION_PATH=195.245.152.155
DELAY=30
MDELAY=8
INITDELAY=120
WORKING=0
PROTECTION=1

STATE=$WORKING

function net_switch2protection
{
	echo `date` switching to protecion >>$LOG
	route del default gw $WORKING_PATH
	route add default gw $PROTECTION_PATH
}

function srv_switch2protection
{
	# point server traffic to the other interface

	for i in $SERVERS; do
	  ip rule del from $i table $SRVTABLE
	done

	for i in $SERVERS; do
	  ip rule add from $i table $EXTTABLE
	done

	# forward services accordingly
	
	forward_service 192.168.1.2 25 25 tcp $EXTIF add
	forward_service 192.168.1.2 995 995 tcp $EXTIF add
	forward_service 192.168.1.2 80 80 tcp $EXTIF add
	forward_service 192.168.1.2 2222 22 tcp $EXTIF add

}

function if_check
{

IF=$1

# targets are repeated so that the check runs twice (tolerate session termination downtimes)

TARGETS="72.14.207.99 193.136.128.66 213.13.146.140 72.14.207.99 193.136.128.66 213.13.146.140"
INDEX=0
	for i in $TARGETS; do
	  ping -I $IF -c 5 $i >& /dev/null
	  RC[$INDEX]=$?
	  let INDEX=INDEX+1
	  sleep $MDELAY
	done

	RESULT=${RC[0]}
	for i in `seq 1 $(( $INDEX - 1 ))`; do
	  RESULT=$(( $RESULT && ${RC[$i]} ))	
	done

	# returns a logical AND of all targets
	# only if all fail we return a failure

	return $RESULT
}

# checks connectivity on the access interface
function net_check
{
	if_check $EXTIF
}

# checks connectivity on the servers' interface
function srv_check
{
	if_check $SRVIF
}


############################## MAIN SCRIPT ##############################


# we need an initial delay so that both ppp ifaces are up
sleep $INITDELAY

while true; do
	net_check
	status=$?
	if [ $status -ne 0 ] && [ $STATE -ne $PROTECTION ]; then
	  net_switch2protection
	  exit
	fi
	srv_check
	status=$?
	if [ $status -ne 0 ] && [ $STATE -ne $PROTECTION ]; then
	  srv_switch2protection
	  exit
	fi
	sleep $DELAY
done


