local failover_to
local failover_to_wanid
local failchk
+local recovrychk
local wanid
local existing_failover
+failchk=$(query_config failchk $2)
+recvrychk=$(query_config recvrychk $2)
+
wanid=$(query_config wanid $2)
failover_to=`uci -q -P /var/state get multiwan.${2}.failover_to`
failover_to_wanid=$(query_config wanid $failover_to)
existing_failover=$(iptables -n -L FW${wanid}MARK -t mangle | echo $(expr $(wc -l) - 2))
add() {
+
+ wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]//g")
+ wan_fail_map=$(echo $wan_fail_map $1[x])
+ wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]//g")
+
if [ "$existing_failover" == "2" ]; then
if [ "$failover_to" != "balancer" -a "$failover_to" != "disable" -a "$failover_to_wanid" != "$wanid" ]; then
iptables -I FW${wanid}MARK 2 -t mangle -j FW${failover_to_wanid}MARK
fi
fi
mwnote "$1 has failed and is currently offline."
+
+query_config update
}
del() {
+
+ wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]//g")
+ wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]//g")
+
if [ "$existing_failover" == "3" ]; then
iptables -D FW${wanid}MARK 2 -t mangle
fi
mwnote "$1 has recovered and is back online!"
+
+query_config update
}
case $1 in
if [ "$new_fail_count" -lt "$health_fail_retries" ]; then
wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]/$1\[${new_fail_count}\]/g")
else
- wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]/$1\[x\]/g")
+ failover add $1
+ refresh_dns
if [ "$weight" != "disable" ]; then
refresh_loadbalancer
fi
- refresh_dns
- failover add $1
fi
fi
fi
+
+query_config update
+
}
recover_wan() {
if [ "$new_recovery_count" -lt "$health_recovery_retries" ]; then
wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]/$1\[${new_recovery_count}\]/g")
else
- wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]//g")
- wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]//g")
+ failover del $1
+ refresh_dns
if [ "$weight" != "disable" ]; then
refresh_loadbalancer
fi
- refresh_dns
- failover del $1
fi
fi
fi
+
+query_config update
}
acquire_wan_data() {
if [ -z $check_old_map ]; then
wancount=`expr $wancount + 1`
- wan_if_map="$wan_if_map $1[${ifname}] "
- wan_id_map="$wan_id_map $1[${wancount}] "
- wan_gw_map="$wan_gw_map $1[${gateway}] "
- wan_ip_map="$wan_ip_map $1[${ipaddr}] "
+ wan_if_map="$wan_if_map $1[${ifname}]"
+ wan_id_map="$wan_id_map $1[${wancount}]"
+ wan_gw_map="$wan_gw_map $1[${gateway}]"
+ wan_ip_map="$wan_ip_map $1[${ipaddr}]"
else
old_ipaddr=$(query_config ipaddr $1)
old_gateway=$(query_config gateway $1)
iptables -A MultiWanPostHandler -t mangle -o $ifname -m mark --mark 0x123 -j FW${get_wanid}MARK
fi
- refresh_routes
- refresh_loadbalancer
- refresh_dns
-
if [ "$ifname" != "x" -a "$ipaddr" != "x" -a "$gateway" != "x" ]; then
+ failover del $1
iprules_config $get_wanid
qos_init $1 $get_wanid
- failover del $1
else
failover add $1
fi
+
+ refresh_routes
+ refresh_loadbalancer
+ refresh_dns
+
fi
else
wancount=9
fi
+
+query_config update
}
query_config() {
+
+update_cache_data() {
+rm /tmp/.mwan.cache > /dev/null 2>&1
+touch /tmp/.mwan.cache
+
+echo "# Automatically Generated by Multi-WAN Agent Script. Do not modify. #" > /tmp/.mwan.cache
+echo "wan_if_map=\"$wan_if_map\"" >> /tmp/.mwan.cache
+echo "wan_ip_map=\"$wan_ip_map\"" >> /tmp/.mwan.cache
+echo "wan_gw_map=\"$wan_gw_map\"" >> /tmp/.mwan.cache
+echo "wan_id_map=\"$wan_id_map\"" >> /tmp/.mwan.cache
+echo "wan_fail_map=\"$wan_fail_map\"" >> /tmp/.mwan.cache
+echo "wan_recovery_map=\"$wan_recovery_map\"" >> /tmp/.mwan.cache
+}
+
case $1 in
+ update) update_cache_data;;
ifname) echo $wan_if_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';;
ipaddr) echo $wan_ip_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';;
gateway) echo $wan_gw_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';;
ip route flush cache
+rm $jobfile > /dev/null 2>&1
+rm $jobfile.work > /dev/null 2>&1
+rm /tmp/.mwan.cache > /dev/null 2>&1
exit
}
done
fi
done
+
+last_resolv_update=$(ls -l -e /tmp/resolv.conf.auto | awk -F " " '{print $5, $9}')
}
iptables_init() {
local check_iptables
local queued_task
local bg_counter
+local current_resolv_file
bg_counter=0
while [ 1 ]; do
+. /tmp/.mwan.cache
+
if [ "$bg_counter" -eq 5 ]; then
check_iptables=$(iptables -n -L MultiWan -t mangle | grep "references" | awk -F "(" '{print $2}' | cut -d " " -f 1)
exit
fi
+current_resolv_file=$(ls -l -e /tmp/resolv.conf.auto | awk -F " " '{print $5, $9}')
+
+ if [ "$last_resolv_update" != "$current_resolv_file" ]; then
+ refresh_dns
+ fi
+
bg_counter=0
fi
if [ "$ifname" == "x" -o "$ipaddr" == "x" -o "$gateway" == "x" ]; then
failover add $group
-wan_fail_map="echo $wan_fail_map $group[x]"
fi
done
}