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

632 lines
16 KiB
Bash
Raw Normal View History

2023-03-31 22:47:53 -06:00
#!/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