Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- ME="$(basename $0)" #Get name of the actual running script
- logger "$ME: Starting Failover Dual-Wan script..."
- RUNNING="$(ps | awk '/'"$ME"'/ {++x}; END {print x+0}')" #Check if there's another instance running
- if [ "$RUNNING" -gt 3 ]; then
- echo "Another instance of \"$ME\" is running" #Another intance running, abort.
- logger "$ME: Another instance of the Failover Dual-Wan script is already running, aborting..."
- exit 1
- fi
- ### CONFIG START ################################################
- INT=25 #Interval to check connection in seconds (default: 25secs)
- PCK=1 #Number of packets to ping (default: 1 packet)
- ### CONFIG END ##################################################
- WAN1NM="$(nvram get wan_ifname)" #Get WAN 1 interface
- WAN2NM="$(nvram get wan2_ifname)" #Get WAN 2 interface
- WAN1GW="$(nvram get wan_gateway)" #Get WAN 1 gateway
- WAN2GW="$(nvram get wan2_gateway)" #Get WAN 2 gateway
- RWAN="$(ip route | awk '/default via/ {print $3}')" #Get active running gateway
- WARNBAK=0 #Variable set so we can output to the log only once per incident
- ### SCRIPT START ################################################
- gpio enable 2 #Turns off WPS LED (WRT310N v2)
- if [ "$WAN1GW" = "$RWAN" ]; then #Find out which WAN is active and running
- AWANNM=$WAN1NM #Define active WAN 1 as connection
- AWANGW=$WAN1GW
- gpio disable 4 #Turn on blue LED (WRT310N v2)
- gpio enable 2
- else
- AWANNM=$WAN2NM #Define active WAN 2 as connection
- AWANGW=$WAN2GW
- gpio disable 4 #Turn on violet LED (WRT310N v2)
- fi
- logger "$ME: WAN1 - Interface: $WAN1NM / Gateway: $WAN1GW"
- logger "$ME: WAN2 - Interface: $WAN2NM / Gateway: $WAN2GW"
- logger "$ME: $AWANNM active via $AWANGW"
- while [ 1 = 1 ] #Endless loop
- do
- CHK="$(ping -c $PCK $AWANGW 2>/dev/null | awk '/packets received/ {print $4}')"
- if [ "$CHK" -ne "$PCK" ]; then #Check if the connection is working
- logger "$ME: $AWANNM interface not responding, switching..." #Connection down
- ip route delete default #Delete actual routing
- if [ "$AWANNM" = "$WAN1NM" ]; then
- AWANNM=$WAN2NM
- AWANGW=$WAN2GW
- gpio disable 2 #Turn on violet LED
- else
- AWANNM=$WAN1NM
- AWANGW=$WAN1GW
- gpio enable 2 #Turn on blue LED
- fi
- ip route add default via $AWANGW dev $AWANNM #Establish new routing
- fi
- if [ "$AWANNM" = "$WAN2NM" ]; then
- CHKWAN1="$(ping -c $PCK $WAN1GW 2>/dev/null | awk '/packets received/ {print $4}')"
- if [ $WARNBAK = 0 ]; then
- logger "$ME WARNING: Using backup interface"
- $WARNBAK=1
- fi
- if [ "$CHKWAN1" = "$PCK" ]; then
- logger "$ME: $WAN1NM interface working again, switching..."
- $WARNBAK=0
- ip route delete default #Delete actual routing
- ip route add default via $WAN1GW dev $WAN1NM #Establish new routing
- AWANNM=$WAN1NM #Define new active connection
- gpio enable 2 #Turn on blue LED
- fi
- fi
- sleep $INT
- done;
- logger "$ME ERROR: Script terminated abnormaly."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement