#!/bin/sh ###nolined means unplug line ##ACTION = NONE, PlugLine, UnplugLine, TO_STA, TO_WPS, TO_AP ##WIFISTATE = NONE, (STA_CONNECTING, STA_FAILED), STA_OK, (WPS_CONNECTTING, WPS_FAILED, WPS_OK) ##LINESTATE = LINED, NOLINED . /bin/vs/cgi-bin/netenv.conf . /bin/vs/cgi-bin/net_func.sh . /bin/vs/cgi-bin/wifiled.sh . /bin/vs/cgi-bin/ap_ssid.sh var_wifi_connecting_times=0 var_wificonnect_cnt=0 var_wifi_fastlink_connecting_times=0 var_wifi_playconnectfailure=0; var_wifi_disconnet=0 ####如果WIFI器件不存在,退出脚本,如果后期WIFI器件存在,需要在程序中重新拉起脚本 if [ $wifi_module_type == "0" ] then echo "wifi_off" > /proc/rt/led exit fi wifi_connecting_cnt_reset() { var_wifi_connecting_times=0 var_wificonnect_cnt=0 } net_doaction() { #netaction=$net_action_curr netaction=$(net_getaction) #show_dbg2 "net_doaction $netaction " case $netaction in NONE) zzz=1 ;; PLUGLINE) wifi_ledflash 5 #add by liutao for 288192a show_info "process netaction plug line" wifi_modeswitch "LINED" net_setdev eth0 #ifconfig $wifidev 0.0.0.0 net_off $wifidev net_setaction NONE net_setip LINED wifi_ledflash 0 ;; UNPLUGLINE) ### 判断是否wifi使能, 如果使能, 开始切换动作到 TO_STA ### 否则, 什么都不做 show_info "process netaction unplug line" wifienable=$(wifi_getenable) show_info "wifienable:$wifienable" ##1 / 2 if [ $wifienable == 1 -o $wifienable == 2 ] then show_info "unplug line, wifienable is $wifienable. will start wifi" #ifconfig eth0 0.0.0.0 net_off eth0 net_setdev $wifidev #customernum=`paraconf r 2 customernum` show_info "customernum------>"$customernum . $wifi_config ############SBTC SSID="TEST-WIFI" GO TO SMTCN if [ ! -z $customernum ] && [ $customernum == "55" ] && [ $wifiessid == "TEST-WIFI" ] && [ $cfg_wifiautosmtcn == "1" ];then while [ 1 ] do if [ -f /tmpfs/vs_server.pid ];then break; fi show_info "--------------------->sbtc wait vs_server" sleep 1 done net_setaction TO_SMTCN elif [ ! -z $customernum ] && [ $wifiessid == "TEST-WIFI" ] && [ $cfg_wifiautoap == "2" ];then show_info "--------------------->rentu_to_ap" net_setaction TO_AP elif [ $wifiessid == "544553542D57494649" ] && [ $cfg_wifiautoap == "0" ];then show_info "--------------------->quick_to_ap" net_setaction TO_AP else boardtype=`cat /etc/board.conf | grep boardtype= | cut -d = -f 2` if [ $customernum == "49" ] && [ $boardtype == "3500" ];then net_setaction TO_AP else net_setaction TO_STA fi fi else if [ -e /tmpfs/pppd/pppd_connect.status ];then ###3G板子识别到sim,会产生此文件,并且设备3G设备使用的是3G网络,否则不会走此分支 p2p_tran=`paraconf r 1 P2P_TRAN` echo "ppp0" > /tmpfs/netdev ###将当前的网络状态写ppp0 killall $p2p_tran ###因为glink程序需要写入当前正使用的设备的网络状态信息方能ok,安全起见把其他tran程序也kill show_info "curr dev ppp0" fi show_info "unplug line, but wifienable is $wifienable. donothing" net_setaction NONE fi wifi_ledflash 4 ;; TO_STA) wifi_ledflash 4 show_dbg2 "process netaction TO_STA" var_wifi_connecting_times=0 var_wificonnect_cnt=0 wifi_modeswitch "STA" net_setaction NONE if [ ! -z $customernum ] && [ $customernum == "96" ];then wifi_audio_connecting fi ;; TO_WPS) show_dbg2 "process netaction TO_WPS" wifi_modeswitch "WPS" net_setaction NONE wifi_ledflash 3 ;; TO_AP) show_dbg2 "process netaction TO_AP" ## APFile="/etc/Wireless/RT2870AP/RT2870AP.orig.dat" #wifi_module_type=`/bin/vslocal/cgi-bin/getwifimoduletype.sh` if [ $wifi_module_type == "7601" ] then if [ ! -e /etc/Wireless/RT2870AP/RT2870AP.orig.dat ] then show_error "$wifi_module_type Can't Enter AP mode. Not exist ap config " net_setaction "NONE" wifi_setstate NONE else ###wifi_audio_to_ap ###提示声距进入ap的时差太久,故不放在这里提示放在start_to_ap处提示 wifi_setstate "AP" wifi_modeswitch "AP" net_setaction NONE fi elif [ $wifi_module_type == "8189" ] then wifi_setstate "AP" wifi_modeswitch "AP" net_setaction NONE else show_error "Can't Enter AP mode. unknown wifi_module: $wifi_module_type " net_setaction "NONE" wifi_setstate NONE fi ;; TO_SMTCN) show_dbg2 "process netaction TO_SMTCN" wifi_modeswitch "SMTCN" net_setaction NONE wifi_ledflash 4 ;; TO_FATCN) show_dbg2 "process netaction TO_FATCN" wifi_modeswitch "FATCN" net_setaction NONE wifi_ledflash 4 ;; TO_FIXNET) show_dbg2 "process netaction TO_FIXNET" wifi_modeswitch "FIXNET" net_setaction NONE wifi_ledflash 4 ;; TO_TEST) ;; *) echo "unknown action $netaction" net_setaction NONE ;; esac } wifi_flags=0 wifi_dostate() { prewifistate=$1 curwifistate=$2 #show_dbg2 "wifi_dostate $prewifistate , $curwifistate" case $curwifistate in NONE) ;; STA_CONNECTING) show_dbg2 "STA_CONNECTING var_wifi_connecting_times $var_wifi_connecting_times var_wificonnect_cnt $var_wificonnect_cnt" if [ $var_wifi_connecting_times -eq 0 ] && [ $var_wificonnect_cnt -eq 0 ] then sleep 2 #RT_LLQ,当从正在连接的STA切到错误的STA时,需要延时等状态改变 fi if [ $var_wifi_connecting_times -eq 0 ] then ###camsense使用 if [ ! -z $customernum ] && [ $customernum == "123" ];then is_found=`cat /etc/network/wifista.conf` show_dbg2 "=== is_found_wifi=$is_found" if [ ${is_found}"A" = "NOTFOUNDA" ] then wifi_setstate STA_FAILED return fi fi if [ $var_wificonnect_cnt -lt $cfg_wifi_retry ] then linkstatus=$(wifi_getstatus) if [ ${linkstatus}"A" = COMPLETED"A" ] then wifi_setstate STA_OK return fi var_wificonnect_cnt=`expr $var_wificonnect_cnt + 1` show_info "Linkstatus is $linkstatus" else linkstatus=$(wifi_getstatus) if [ ${linkstatus}"A" = COMPLETED"A" ] then wifi_setstate STA_OK else wifi_setstate STA_FAILED fi return fi var_wifi_connecting_times=`expr $var_wifi_connecting_times + 1` else var_wifi_connecting_times=`expr $var_wifi_connecting_times + 1` if [ $var_wifi_connecting_times -ge $cfg_wifi_retry_internal ] then var_wifi_connecting_times=0 fi fi ;; STA_FAILED) wifi_connecting_cnt_reset if [ $cfg_wifiautoap = 1 ] then show_info1 "STA connect failed. AUTO to AP" net_setaction TO_AP elif [ $cfg_wifiautoap = 2 ] #人图 ap_auto=2 then show_info1 "STA connect failed. AUTO to AP" net_setaction TO_AP elif [ $cfg_wifiautofixnet = 1 ] then show_info1 "STA connect failed. AUTO to FIXNET" net_setaction TO_FIXNET else if [ $cfg_stafailedafter = "AP" ] then net_setaction TO_AP else net_setaction TO_STA fi fi wifi_setstate NONE wifi_ledflash 4 ;; STA_OK) wifi_connecting_cnt_reset show_dbg2 "STA OK" #wifi_setstate NONE net_setip STA wifi_ledflash 1 wifi_audio_connectsuccess var_wifi_disconnet=0 wifi_setstate STA_CHECK ;; STA_CHECK) sleep 2 linkstatus=$(wifi_getstatus) if [ ${linkstatus}"A" = COMPLETED"A" ] then if [ $var_wifi_disconnet -eq 1 ] then var_wifi_disconnet=0 wifi_ledflash 1 fi else if [ $var_wifi_disconnet -eq 0 ] then show_dbg2 "STA CONNECTING BREAK!" var_wifi_disconnet=1 if [ -e /bin/vs/cgi-bin/wifi_off_on.sh ];then /bin/vs/cgi-bin/wifi_off_on.sh & fi #wifi_setstate NONE wifi_ledflash 4 fi fi ;; WPS_CONNECTING) show_dbg2 "STA_CONNECTING var_wifi_connecting_times $var_wifi_connecting_times var_wificonnect_cnt $var_wificonnect_cnt" if [ $var_wifi_connecting_times -eq 0 ] then if [ $var_wificonnect_cnt -lt $cfg_wifiwps_retry ] then linkstatus=$(wifi_getstatus) if [ ${linkstatus}"A" = COMPLETED"A" ] then wifi_setstate WPS_OK return fi var_wificonnect_cnt=`expr $var_wificonnect_cnt + 1` show_info "Linkstatus is $linkstatus" else linkstatus=$(wifi_getstatus) if [ ${linkstatus}"A" = COMPLETED"A" ] then wifi_setstate WPS_OK else wifi_setstate WPS_FAILED fi return fi var_wifi_connecting_times=`expr $var_wifi_connecting_times + 1` else var_wifi_connecting_times=`expr $var_wifi_connecting_times + 1` if [ $var_wifi_connecting_times -ge $cfg_wifiwps_retry_internal ] then var_wifi_connecting_times=0 fi fi ;; WPS_FAILED) show_info "WPS_FAILED" wifi_connecting_cnt_reset ###spotcam 2592版本WPS失败进入AP if [ $customernum == "92" ] && [ $boardtype == "2500" ];then wifi_setstate "AP" wifi_modeswitch "AP" net_setaction NONE else wifi_setmode STA ##reread wpa_conf.conf file wpa_cli -i $wifidev reconfig wifi_setstate NONE net_setaction TO_STA fi wifi_ledflash 3 ;; WPS_OK) show_info "WPS_OK" wifi_connecting_cnt_reset wifi_wpsOK wifi_setmode STA wifi_setstate NONE wifi_ledflash 1 ;; AP) wifi_connecting_cnt_reset wifi_ledflash 2 wifi_setstate NONE ;; SMTCN_CONNECTING) show_info "SMTCN_CONNECTING" smtcn_node=`get_smtcn_node` if [ -e $smtcn_node ];then SMTCN_SSID=`cat $smtcn_node | awk -F ", " '{printf $2}' | awk -F "=" '{printf $2}'` if [ "${SMTCN_SSID}""A" != "A" ];then wifi_setstate SMTCN_OK else echo "start" > $smtcn_node fi fi if [ -e /tmpfs/voice_wifi ];then SMTCN_SSID=`cat /tmpfs/voice_wifi | grep SSID | awk -F ": " '{printf $2}'` if [ "${SMTCN_SSID}""A" != "A" ];then wifi_setstate VOICE_OK fi fi ;; SMTCN_OK) var_wifi_playconnectfailure="1" show_info "SMTCN_OK" wifi_smtcnOK if [ $? != "0" ];then wifi_setstate STA_FAILED wifi_setmode STA else close_voice_cfg_wifi_mode.sh ####当声波配置和smartlink共存时,此时去用smartlink去配置wifi会没有声音,故这里先关闭声波配置,不影响smartlink sleep 1 net_setaction TO_STA wifi_setmode STA wifi_setstate NONE wifi_ledflash 1 wifi_audio_connecting fi ;; VOICE_OK) var_wifi_playconnectfailure="1" show_info "VOICE_OK" wifi_smtcn_stop wifi_voiceOK if [ $? != "0" ];then wifi_setstate STA_FAILED wifi_setmode STA else net_setaction TO_STA wifi_setmode STA wifi_setstate NONE wifi_ledflash 1 wifi_audio_connecting fi ;; FATCN_CONNECTING) show_info "FATCN_CONNECTING" var_wifi_fastlink_connecting_times=`expr $var_wifi_fastlink_connecting_times + 1` if [ $var_wifi_fastlink_connecting_times -gt $cfg_wififastlink_retry_internal ];then var_wifi_fastlink_connecting_times=0 killall fastlink /bin/vslocal/cgi-bin/fastlink & fi if [ -e /tmpfs/fastlink.conf ];then FATCN_SSID=`cat /tmpfs/fastlink.conf | grep SSID | awk -F ": " '{printf $2}'` if [ ! -z $FATCN_SSID ];then wifi_setstate FATCN_OK killall fastlink fi fi ;; FATCN_OK) var_wifi_playconnectfailure="1" show_info "FATCN_OK" wifi_fatcnOK net_setaction TO_STA wifi_setmode STA wifi_setstate NONE wifi_ledflash 1 wifi_audio_connecting ;; FIXNET_CONNECTING) show_dbg2 "FIXNET_CONNECTING var_wifi_connecting_times $var_wifi_connecting_times var_wificonnect_cnt $var_wificonnect_cnt" if [ $var_wifi_connecting_times -eq 0 ] then if [ $var_wificonnect_cnt -lt $cfg_wifi_retry ] then linkstatus=$(wifi_getstatus) if [ ${linkstatus}"A" = COMPLETED"A" ] then wifi_setstate FIXNET_OK return fi var_wificonnect_cnt=`expr $var_wificonnect_cnt + 1` show_info "Linkstatus is $linkstatus" else linkstatus=$(wifi_getstatus) if [ ${linkstatus}"A" = COMPLETED"A" ] then wifi_setstate FIXNET_OK else show_info1 "FIXNET_FAILED" wifi_connecting_cnt_reset net_setaction TO_FIXNET #wifi_setstate FIXNET_FAILED fi #return fi var_wifi_connecting_times=`expr $var_wifi_connecting_times + 1` else var_wifi_connecting_times=`expr $var_wifi_connecting_times + 1` if [ $var_wifi_connecting_times -ge $cfg_wifi_retry_internal ] then var_wifi_connecting_times=0 fi fi ;; FIXNET_OK) wifi_connecting_cnt_reset show_dbg2 "FIXNET OK" wifi_fixnetOK wifi_setstate NONE wifi_setmode STA net_setip STA wifi_ledflash 1 wifi_audio_connectsuccess ;; *) ;; esac } #if [ -e /tmpfs/net_serv.pid ] #then # kill -9 `cat /tmpfs/net_serv.pid` # rm /tmpfs/net_serv.pid -f #fi echo $$ > /tmpfs/net_serv.pid show_info "start net_serv daemon $$" if [ -e $ip_config ] then . $ip_config ##不存在ip地址 if [ -z $address ] then net_gen_ifattr fi else net_gen_ifattr fi wifistate_prev=NONE linestate_prev=NONE mkdir -p /tmpfs/net/ mkdir /var/run/wpa_supplicant -p mkdir -p /var/run/hostapd net_setaction "NONE" #net_setmac wifi_realenable=$(wifi_getenable) show_info "wifi_realenable is $wifi_realenable" preload_wifiko=0 var_wifiko_check_cnt=0 cur_network_mode="NONE" ##gen_last_wpa_config while [ 1 ] do #获取有线状态 linestate_curr=$(net_getlinedstatus) ##show_dbg "linestate_curr is $linestate_curr and $linestate_prev" ## 网线插拔状态有变化 if [ $linestate_curr != $linestate_prev ] then show_dbg "linestate_change $linestate_prev TO $linestate_curr." linestatechanged=1 if [ $linestate_curr = 0 -o $linestate_curr = 2 ] then net_setaction "UNPLUGLINE" elif [ $linestate_curr = 1 ] then net_setaction "PLUGLINE" fi fi net_doaction linestate_prev=$linestate_curr ###curnetaction=$(getnetaction) #echo $wifistate_prev , $wifistate_curr wifi_dostate $wifistate_prev $wifistate_curr wifistate_prev=$wifistate_curr if [ $preload_wifiko = 1 ] then if [ $wifi_realenable -ge 1 ] then preload_wifiko=0 wifi_sta_start echo "wifimac=`cat /sys/class/net/${wifidev}/address`" > $mac_wifi_file else echo "wifimac=" > $mac_wifi_file fi preload_wifiko=0 fi #wifi_module_type=`/bin/vslocal/cgi-bin/getwifimoduletype.sh` #####如果是有线模式,且WIFI驱动被加载了,则等待2分钟后卸载驱动 cur_network_mode=`wifi_getmode` if [ ${cur_network_mode} == "NONE" ] then if [ $wifi_module_type == "7601" ] then ret=`lsmod | grep 7601 > /dev/null ;echo $?` elif [ $wifi_module_type == "8189" ] then ret=`lsmod | grep 8189 > /dev/null ;echo $?` else ret=1 fi if [ ${ret} == 0 ];then var_wifiko_check_cnt=`expr $var_wifiko_check_cnt + 1` echo "var_wifiko_check_cnt:"${var_wifiko_check_cnt} fi if [ ${var_wifiko_check_cnt} -gt 60 ] then wifi_sta_stop var_wifiko_check_cnt=0 fi else var_wifiko_check_cnt=0 fi sleep 1 ###ledflash done