Skip to content

Commit 3f6eac6

Browse files
committed
feat: mtk v4/v6 check
1 parent 5c57f59 commit 3f6eac6

File tree

5 files changed

+128
-13
lines changed

5 files changed

+128
-13
lines changed

luci/luci-app-qmodem/luasrc/model/cbi/qmodem/dial_config.lua

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,16 @@ extend_prefix = s:taboption("advanced", Flag, "extend_prefix", translate("Extend
7373
extend_prefix.description = translate("Once checking, the prefix will be apply to lan zone")
7474
extend_prefix.default = "0"
7575

76+
-- 软重启
7677
soft_reboot = s:taboption("advanced", Flag, "soft_reboot", translate("Soft Reboot"))
7778
soft_reboot.description = translate("enable modem soft reboot")
7879
soft_reboot.default = "0"
7980

81+
-- 350 v4/v6存活检查
82+
mtk_check = s:taboption("advanced", Flag, "mtk_check", translate("MTK V4/V6 Check"))
83+
mtk_check.description = translate("Only for Fibocom MTK modem.")
84+
mtk_check.default = "0"
85+
8086
-- 网络类型
8187
pdp_type= s:taboption("advanced", ListValue, "pdp_type", translate("PDP Type"))
8288
pdp_type.default = "ipv4v6"

luci/luci-app-qmodem/luasrc/model/cbi/qmodem/modem_config.lua

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,15 @@ name.cfgvalue = function(t, n)
6969
return Value.cfgvalue(t, n) or "-"
7070
end
7171

72+
-- Soft Reboot
7273
soft_reboot = s:option(Flag, "soft_reboot", translate("Soft Reboot"))
7374
soft_reboot.default = "0"
7475

76+
-- MTK Check
77+
mtk_check = s:option(Flag, "mtk_check", translate("MTK V4/V6 Check"))
78+
mtk_check.description = translate("Only for Fibocom MTK modem.")
79+
mtk_check.default = "0"
80+
7581
-- PDP Context Index
7682
define_connect = s:option(Value, "define_connect", translate("PDP Context Index"))
7783
define_connect.default = "1"

luci/luci-app-qmodem/po/zh-cn/qmodem.po

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -812,5 +812,11 @@ msgstr "拨号前执行的AT命令。"
812812
msgid "(still in beta)"
813813
msgstr "(仍在测试中)"
814814

815-
msgid (beta)"
815+
msgid "(beta)"
816816
msgstr "(测试)"
817+
818+
msgid "MTK V4/V6 Check"
819+
msgstr "MTK V4/V6 存活检测"
820+
821+
msgid "Only for Fibocom MTK modem."
822+
msgstr "只适用于广和通MTK模组。"

luci/luci-app-qmodem/po/zh_Hans/qmodem.po

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -812,5 +812,11 @@ msgstr "拨号前执行的AT命令。"
812812
msgid "(still in beta)"
813813
msgstr "(仍在测试中)"
814814

815-
msgid (beta)"
815+
msgid "(beta)"
816816
msgstr "(测试)"
817+
818+
msgid "MTK V4/V6 Check"
819+
msgstr "MTK V4/V6 存活检测"
820+
821+
msgid "Only for Fibocom MTK modem."
822+
msgstr "只适用于广和通MTK模组。"

luci/luci-app-qmodem/root/usr/share/qmodem/modem_dial.sh

Lines changed: 102 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
301372
append_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

Comments
 (0)