Changeset 21273


Ignore:
Timestamp:
2010-04-30T18:01:50+02:00 (7 years ago)
Author:
craigc
Message:

[packages] multiwan: Modified failover, implemented a check to see if resolv.conf.auto is current, added a cache file

Location:
packages/net/multiwan
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • packages/net/multiwan/Makefile

    r21249 r21273  
    99 
    1010PKG_NAME:=multiwan 
    11 PKG_VERSION:=1.0.1 
     11PKG_VERSION:=1.0.2 
    1212PKG_RELEASE:=1 
    1313 
  • packages/net/multiwan/files/etc/config/multiwan

    r21249 r21273  
    1616        option 'weight' '10' 
    1717        option 'health_interval' '10' 
    18         option 'icmp_hosts' 'dns' 
     18        option 'icmp_hosts' 'gateway' 
    1919        option 'timeout' '3' 
    2020        option 'health_fail_retries' '3' 
  • packages/net/multiwan/files/usr/bin/multiwan

    r21249 r21273  
    1919local failover_to_wanid 
    2020local failchk 
     21local recovrychk 
    2122local wanid 
    2223local existing_failover 
     24 
     25failchk=$(query_config failchk $2) 
     26recvrychk=$(query_config recvrychk $2) 
    2327 
    2428wanid=$(query_config wanid $2) 
     
    2933 
    3034add() { 
     35 
     36        wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]//g") 
     37        wan_fail_map=$(echo $wan_fail_map $1[x]) 
     38        wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]//g") 
     39 
    3140if [ "$existing_failover" == "2" ]; then 
    3241        if [ "$failover_to" != "balancer" -a "$failover_to" != "disable" -a "$failover_to_wanid" != "$wanid" ]; then 
     
    3746fi 
    3847        mwnote "$1 has failed and is currently offline." 
     48 
     49query_config update 
    3950} 
    4051 
    4152del() { 
     53 
     54        wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]//g") 
     55        wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]//g") 
     56 
    4257if [ "$existing_failover" == "3" ]; then 
    4358                iptables -D FW${wanid}MARK 2 -t mangle 
    4459fi 
    4560        mwnote "$1 has recovered and is back online!" 
     61 
     62query_config update 
    4663} 
    4764 
     
    7794                        wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]/$1\[${new_fail_count}\]/g") 
    7895                else 
    79                         wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]/$1\[x\]/g") 
     96                        failover add $1 
     97                        refresh_dns 
    8098                        if [ "$weight" != "disable" ]; then 
    8199                        refresh_loadbalancer 
    82100                        fi 
    83                         refresh_dns 
    84                         failover add $1 
    85101                fi 
    86102        fi 
    87103fi 
     104 
     105query_config update 
     106 
    88107} 
    89108 
     
    114133                                wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]/$1\[${new_recovery_count}\]/g") 
    115134                        else 
    116                                 wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]//g") 
    117                                 wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]//g") 
     135                                failover del $1 
     136                                refresh_dns 
    118137                                if [ "$weight" != "disable" ]; then 
    119138                                refresh_loadbalancer 
    120139                                fi 
    121                                 refresh_dns 
    122                                 failover del $1 
    123140                        fi 
    124141        fi 
    125142fi 
     143 
     144query_config update 
    126145} 
    127146 
     
    156175        if [ -z $check_old_map ]; then 
    157176                wancount=`expr $wancount + 1` 
    158                 wan_if_map="$wan_if_map $1[${ifname}] " 
    159                 wan_id_map="$wan_id_map $1[${wancount}] " 
    160                 wan_gw_map="$wan_gw_map $1[${gateway}] " 
    161                 wan_ip_map="$wan_ip_map $1[${ipaddr}] " 
     177                wan_if_map="$wan_if_map $1[${ifname}]" 
     178                wan_id_map="$wan_id_map $1[${wancount}]" 
     179                wan_gw_map="$wan_gw_map $1[${gateway}]" 
     180                wan_ip_map="$wan_ip_map $1[${ipaddr}]" 
    162181        else 
    163182                old_ipaddr=$(query_config ipaddr $1) 
     
    177196                fi  
    178197 
     198                if [ "$ifname" != "x" -a "$ipaddr" != "x" -a "$gateway" != "x" ]; then 
     199                failover del $1 
     200                iprules_config $get_wanid 
     201                qos_init $1 $get_wanid 
     202                else 
     203                failover add $1 
     204                fi 
     205 
    179206                refresh_routes 
    180207                refresh_loadbalancer 
    181208                refresh_dns 
    182209 
    183                 if [ "$ifname" != "x" -a "$ipaddr" != "x" -a "$gateway" != "x" ]; then 
    184                 iprules_config $get_wanid 
    185                 qos_init $1 $get_wanid 
    186                 failover del $1 
    187                 else 
    188                 failover add $1 
    189                 fi 
    190210        fi 
    191211else 
    192212wancount=9 
    193213fi 
     214 
     215query_config update 
    194216} 
    195217 
    196218query_config() { 
     219 
     220update_cache_data() { 
     221rm /tmp/.mwan.cache > /dev/null 2>&1 
     222touch /tmp/.mwan.cache 
     223 
     224echo "# Automatically Generated by Multi-WAN Agent Script. Do not modify. #" > /tmp/.mwan.cache 
     225echo "wan_if_map=\"$wan_if_map\"" >> /tmp/.mwan.cache 
     226echo "wan_ip_map=\"$wan_ip_map\"" >> /tmp/.mwan.cache 
     227echo "wan_gw_map=\"$wan_gw_map\"" >> /tmp/.mwan.cache 
     228echo "wan_id_map=\"$wan_id_map\"" >> /tmp/.mwan.cache 
     229echo "wan_fail_map=\"$wan_fail_map\"" >> /tmp/.mwan.cache 
     230echo "wan_recovery_map=\"$wan_recovery_map\"" >> /tmp/.mwan.cache 
     231} 
     232 
    197233case $1 in 
     234     update) update_cache_data;; 
    198235     ifname) echo $wan_if_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';;  
    199236     ipaddr) echo $wan_ip_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; 
     
    250287ip route flush cache 
    251288 
     289rm $jobfile > /dev/null 2>&1 
     290rm $jobfile.work  > /dev/null 2>&1 
     291rm /tmp/.mwan.cache > /dev/null 2>&1 
    252292exit 
    253293} 
     
    483523fi 
    484524done 
     525 
     526last_resolv_update=$(ls -l -e /tmp/resolv.conf.auto | awk -F " " '{print $5, $9}') 
    485527} 
    486528 
     
    874916local queued_task 
    875917local bg_counter 
     918local current_resolv_file 
    876919 
    877920bg_counter=0 
    878921 
    879922while [ 1 ]; do 
     923 
     924. /tmp/.mwan.cache 
    880925 
    881926if [ "$bg_counter" -eq 5 ]; then 
     
    888933                exit 
    889934                fi 
     935 
     936current_resolv_file=$(ls -l -e /tmp/resolv.conf.auto | awk -F " " '{print $5, $9}') 
     937 
     938        if [ "$last_resolv_update" != "$current_resolv_file" ]; then 
     939                refresh_dns 
     940        fi 
    890941 
    891942bg_counter=0 
     
    938989if [ "$ifname" == "x" -o "$ipaddr" == "x" -o "$gateway" == "x" ]; then 
    939990failover add $group 
    940 wan_fail_map="echo $wan_fail_map $group[x]" 
    941991fi 
    942992done 
Note: See TracChangeset for help on using the changeset viewer.