@@ -114,6 +114,7 @@ update_config()
114114 config_get en_bridge $modem_config en_bridge
115115 config_get do_not_add_dns $modem_config do_not_add_dns
116116 config_get dns_list $modem_config dns_list
117+ [ " $manufacturer " == " fibocom" ] && [ " $platform " == " mediatek" ] && config_get mtk_check $modem_config mtk_check
117118 config_get global_dial main enable_dial
118119 # config_get ethernet_5g u$modem_config ethernet 转往口获取命令更新,待测试
119120 config_foreach get_associate_ethernet_by_path modem-slot
@@ -263,14 +264,6 @@ check_ip()
263264 fi
264265
265266 if [ -n " $ipaddr " ]; then
266- if [ $mtk -eq 1 ] && echo " $ipv4_config " | grep -qE ' ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' ; then
267- if [ " $pdp_type " = " ipv4v6" ]; then
268- if ! ping -c 2 -w 5 2400:3200::1 > /dev/null 2>&1 ; then
269- m_debug " ipv6 is down,try to restart"
270- ifdown " $interface6_name " && sleep 2 && ifup " $interface6_name "
271- fi
272- fi
273- fi
274267 ipv6=$( echo $ipaddr | grep -oE " \b([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}\b" )
275268 ipv4=$( echo $ipaddr | grep -oE " \b([0-9]{1,3}\.){3}[0-9]{1,3}\b" )
276269 if [ " $manufacturer " = " simcom" ]; then
@@ -298,6 +291,84 @@ check_ip()
298291 fi
299292}
300293
294+ check_mtk_connection ()
295+ {
296+ local lock_file=" ${MODEM_RUNDIR} /${modem_config} _dir/mtk_check.lock"
297+ local result_file=" ${MODEM_RUNDIR} /${modem_config} _dir/mtk_check_result"
298+
299+ if [ -f " $lock_file " ]; then
300+ local lock_time=$( stat -c %Y " $lock_file " 2> /dev/null || echo 0)
301+ local current_time=$( cat /proc/uptime | awk ' {print int($1)}' )
302+ if [ $(( current_time - lock_time)) -lt 5 ]; then
303+ return 0
304+ else
305+ rm -f " $lock_file "
306+ fi
307+ fi
308+
309+ touch " $lock_file "
310+
311+ (
312+ if [ " $mtk " -eq 1 ] && [ -n " $ipv4 " ] && [ -n " $modem_netcard " ]; then
313+ local test=0
314+
315+ if ping -I " $modem_netcard " -c 1 -w 2 1.1.1.1 > /dev/null 2>&1 ; then
316+ test=1
317+ elif ping -I " $modem_netcard " -c 1 -w 2 8.8.8.8 > /dev/null 2>&1 ; then
318+ test=1
319+ elif [ -n " $gateway " ] && ping -I " $modem_netcard " -c 1 -w 2 " $gateway " > /dev/null 2>&1 ; then
320+ test=1
321+ fi
322+
323+ if [ " $test " -eq 0 ]; then
324+ m_debug " IPv4 connection test failed, will redial"
325+ echo " failed" > " $result_file "
326+ rm -f " $lock_file "
327+ return 1
328+ fi
329+
330+ local ifup_time=$( ubus call network.interface.$interface6_name status 2> /dev/null | jsonfilter -e ' @.uptime' 2> /dev/null || echo 0)
331+ if [ -n " $ifup_time " ] && [ " $ifup_time " -gt 10 ] && { [ " $pdp_type " = " ipv4v6" ] || [ " $pdp_type " = " IPV4V6" ]; } && [ -n " $ipv6 " ]; then
332+ local ipv6_test=0
333+
334+ if ping6 -I " $modem_netcard " -c 1 -w 2 2400:3200::1 > /dev/null 2>&1 ; then
335+ ipv6_test=1
336+ elif ping6 -I " $modem_netcard " -c 1 -w 2 2001:4860:4860::8888 > /dev/null 2>&1 ; then
337+ ipv6_test=1
338+ fi
339+
340+ if [ " $ipv6_test " -eq 0 ]; then
341+ m_debug " IPv6 connection test failed, restarting IPv6 interface"
342+ if [ -n " $interface6_name " ]; then
343+ ifdown " $interface6_name " && sleep 2 && ifup " $interface6_name "
344+ m_debug " Restarted IPv6 interface $interface6_name "
345+ fi
346+ fi
347+ fi
348+
349+ echo " success" > " $result_file "
350+ else
351+ echo " skipped" > " $result_file "
352+ fi
353+
354+ rm -f " $lock_file "
355+ ) &
356+
357+ return 0
358+ }
359+
360+ read_mtk_check_result ()
361+ {
362+ local result_file=" ${MODEM_RUNDIR} /${modem_config} _dir/mtk_check_result"
363+ if [ -f " $result_file " ]; then
364+ local result=$( cat " $result_file " )
365+ if [ " $result " = " failed" ]; then
366+ return 1
367+ fi
368+ fi
369+ return 0
370+ }
371+
301372append_to_fw_zone ()
302373{
303374 local fw_zone=$1
@@ -974,6 +1045,7 @@ at_dial_monitor()
9741045 check_ip
9751046 at_dial
9761047 ipv4_cache=$ipv4
1048+ last_mtk_check=0
9771049 while true ; do
9781050 check_ip
9791051 if [ $connection_status -eq 0 ]; then
@@ -987,13 +1059,32 @@ at_dial_monitor()
9871059 fi
9881060 sleep 10
9891061 else
990- # 检测ipv4是否变化
991- sleep 15
992- if [ " $ipv4 " != " $ipv4_cache " ]; then
1062+ check_mtk_if_needed () {
1063+ if [ " $mtk_check " = " 1" ]; then
1064+ current_time=$( cat /proc/uptime | awk ' {print int($1)}' )
1065+ if [ " $mtk " -eq 1 ]; then
1066+ check_mtk_connection
1067+ read_mtk_check_result
1068+ if [ $? -eq 1 ]; then
1069+ at_dial
1070+ fi
1071+ last_mtk_check=$current_time
1072+ fi
1073+ fi
1074+ }
1075+
1076+ if [ " $ipv4 " != " $ipv4_cache " ]; then
9931077 handle_ip_change
9941078 ipv6_cache=$ipv6
9951079 ipv4_cache=$ipv4
1080+ continue
9961081 fi
1082+ sleep 5
1083+ check_mtk_if_needed
1084+ sleep 5
1085+ check_mtk_if_needed
1086+ sleep 5
1087+ check_mtk_if_needed
9971088 fi
9981089 check_logfile_line
9991090 done
0 commit comments