Optimized the dialing daemon to support the start and stop of individual dialing instances

This commit is contained in:
fujr 2024-11-29 00:14:04 +08:00
parent 5a743d8b1f
commit 3ed6d90b07
2 changed files with 74 additions and 30 deletions

View File

@ -2,13 +2,19 @@
START=99
STOP=13
USE_PROCD=1
service="$(basename ${basescript:-$initscript})"
#脚本目录
SCRIPT_DIR="/usr/share/qmodem"
#运行目录
MODEM_RUNDIR="/var/run/qmodem"
extra_command "dial" "<modem_cfg> run dial script"
extra_command "hang" "<modem_cfg> run hang script"
extra_command "redial" "<modem_cfg> stop previous dial script. run hang script. and run dial script"
extra_command "modem_status" "<modem_cfg> Check dial script status"
service_triggers()
{
procd_add_reload_trigger "qmodem"
@ -16,51 +22,90 @@ service_triggers()
}
start_service(){
force_stop=0
mkdir -p $MODEM_RUNDIR
update_modem
}
stop_service(){
force_stop=1
update_modem
#加载模组配置
config_load qmodem
config_get enabled main enable_dial
[ "$enabled" = "0" ] && config_foreach hang_modem modem-device && stop
config_foreach run_modem modem-device
}
reload_service()
{
stop
start
force_stop=0
mkdir -p $MODEM_RUNDIR
update_modem
}
stop_service()
{
#清理运行目录
update_modem(){
config_load qmodem
config_foreach hang_modem modem-device
config_get g_enabled main enable_dial
config_foreach _update_modem modem-device
}
run_modem()
dial()
{
config_get state $1 state
if [ "$state" = "disabled" ] ;then
return
fi
_dial $1
}
hang()
{
_hang $1
}
modem_status()
{
_modem_status $1
}
redial()
{
hang $1
dial $1
}
_update_modem()
{
local target
target=1
config_get enabled $1 enable_dial
if [ "$enabled" = "0" ] ;then
hang_modem $1
return
config_get state $1 state
if [ "$state" = "disabled" ] || [ "$enabled" = "0" ] || [ "$g_enabled" = "0" ] || [ "$force_stop" = "1" ];then
target=0
fi
data=$(_procd_ubus_call list | jq -r ".$service.instances.modem_$1")
[ "$data" == "null" ] && current_status=0 || current_status=1
logger -t qmodem_network "current:$current_status;target:$target "
if [ "$current_status" != "$target" ];then
[ "$target" -eq 1 ] && _dial $1 || _hang $1
logger -t qmodem_network "update modem cfg: $1 dial:$target"
fi
}
_dial()
{
procd_open_instance "modem_$1"
procd_set_param command "/usr/share/qmodem/modem_dial.sh" "$1" dial
procd_set_param respawn
procd_close_instance
logger -t modem_network "dial modem $1"
logger -t qmodem_network "Modem $1 Start Dial Now"
}
hang_modem()
_hang()
{
service_stop "modem_$1"
"/usr/share/qmodem/modem_dial.sh" "$1" hang
logger -t modem_network "hang modem $1"
procd_kill $service "modem_$1"
/usr/share/qmodem/modem_dial.sh "$1" hang
logger -t qmodem_network "Modem $1 Stop Dial and Hang"
}
_modem_status()
{
local instances="modem_$1"
local data
data=$(_procd_ubus_call list | jq -r ".$service.instances.$instances")
[ "$data" == "null" ] && echo "$instances Not Running" || echo "$data"
}

View File

@ -575,8 +575,7 @@ dial(){
wwan_hang()
{
#kill quectel-CM
killall quectel-CM
m_debug "wwan_hang"
}