RT-IPC_camera/bin/vslocal/cgi-bin/net_serv.sh

632 lines
16 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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