1#!/bin/sh 2# in brmode & extmode, this script is used to monitor wireless link 3 4. /lib/cfgmgr/cfgmgr.sh 5 6brmode_wlg_linked() { 7 [ "$(awk 'NR==3' /proc/sys/net/ath1/status)" = "RUN" ] 8} 9 10brmode_wla_linked() { 11 [ "$(awk 'NR==3' /proc/sys/net/ath0/status)" = "RUN" ] 12} 13 14extmode_wlg_linked() { 15 [ "$(awk 'NR==3' /proc/sys/net/ath1/status)" = "RUN" ] 16} 17 18extmode_wla_linked() { 19 [ "$(awk 'NR==3' /proc/sys/net/ath0/status)" = "RUN" ] 20} 21 22extmode_wlg_fixup() 23{ 24 oc echo "unable to estabilish extmode 2.4G wireless link !" 25 local extchannel=$(/usr/sbin/extkit 2g scan | awk -v ssid=$(config get wlg_ext_ssid) ' 26 BEGIN {var = "\x22" ssid "\x22"} 27 { if ($1 == var) { print $2; exit } } 28 ') 29 30 [ -n ${extchannel} -a "${extchannel}" != "$($CONFIG get wlg_ext_channel)" ] && { 31 oc echo "new 2.4G ext channel : $extchannel !" 32 $CONFIG set wlg_ext_channel="$extchannel" && $CONFIG commit 33 /etc/init.d/wlan-common restart 34 } 35} 36 37brmode_wlg_fixup() { oc echo "unable to estabilish brmode 2.4G wireless link !"; } 38brmode_wla_fixup() { oc echo "unable to estabilish brmode 5G wireless link !"; } 39extmode_wlg_fixup() { oc echo "unable to estabilish extmode 2.4G wireless link !"; } 40extmode_wla_fixup() { oc echo "unable to estabilish extmode 5G wireless link !"; } 41 42get_hostname() { 43 cat /proc/sys/kernel/hostname 44} 45 46udhcpc_existed() { 47 [ "x$(pidof udhcpc)" != "x" ] 48} 49 50# global variables : g_wl_linked means judge wireless link success or fail funtion. 51# g_wl_fixup means wireless link failed. 52setup_global_variables_or_exit() 53{ 54 case "$($CONFIG get i_opmode)" in 55 brmode) 56 if [ "$($CONFIG get bridge_band_choose)" = "5g" ]; then 57 g_wl_linked=brmode_wla_linked 58 g_wl_fixup=brmode_wla_fixup 59 else 60 g_wl_linked=brmode_wlg_linked 61 g_wl_fixup=brmode_wlg_fixup 62 fi 63 ;; 64 extmode) 65 if [ "x$($CONFIG get wla_ext_enabled)" = "x1" ]; then 66 g_wl_linked=extmode_wla_linked 67 g_wl_fixup=extmode_wla_fixup 68 else 69 g_wl_linked=extmode_wlg_linked 70 g_wl_fixup=extmode_wlg_fixup 71 fi 72 ;; 73 *) 74 echo "only for brmode or extmode !" 75 exit 76 ;; 77 esac 78} 79 80setup_global_variables_or_exit 81g_udhcpc_h_arg="-h $(get_hostname)" 82g_udhcpc_r_arg="-r $($CONFIG get ap_dhcp_ipaddr)" 83oc echo "g_wl_linked=$g_wl_linked, g_wl_fixup=$g_wl_fixup" 84oc echo "g_udhcpc_h_arg=$g_udhcpc_h_arg, g_udhcpc_r_arg=$g_udhcpc_r_arg" 85 86tmp_on_time=0 87tmp_off_time=0 88newlinkstate=off 89unlink_time=0 90linkstate=off 91while true; do 92 #oc echo "xxxxxx on=$tmp_on_time, off=$tmp_off_time, s=$linkstate, ult=$unlink_time xxxxxx" 93 sleep 5 94 udhcpc_existed || udhcpc -a -b -i br0 "$g_udhcpc_h_arg" "$g_udhcpc_r_arg" & 95 96 #Check if wireless link success and keep more than 20 sec then judge it final stable. 97 if eval $g_wl_linked; then 98 tmp_off_time=0; tmp_on_time=$(($tmp_on_time + 5)) 99 [ $tmp_on_time -ge 20 ] && tmp_on_time=0 && newlinkstate=on 100 else 101 tmp_on_time=0; tmp_off_time=$(($tmp_off_time + 5)) 102 [ $tmp_off_time -ge 10 ] && tmp_off_time=0 && newlinkstate=off 103 fi 104 105 if [ "$newlinkstate" = "on" ]; then 106 [ "$linkstate" = "off" ] && linkstate=on && unlink_time=0 && killall -SIGUSR1 udhcpc 107 else 108 [ "$linkstate" = "on" ] && linkstate=off && killall -SIGUSR2 udhcpc 109 unlink_time=$(( $unlink_time + 5 )) 110 [ $unlink_time -ge 60 ] && unlink_time=0 && eval $g_wl_fixup 111 fi 112done 113