wwan: remove siriling dial manage
This commit is contained in:
parent
260548fcb2
commit
c9d7202778
@ -1,884 +0,0 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2023 Siriling <siriling@qq.com>
|
||||
|
||||
START=90
|
||||
STOP=13
|
||||
USE_PROCD=1
|
||||
|
||||
#脚本目录
|
||||
SCRIPT_DIR="/usr/share/modem"
|
||||
|
||||
#运行目录
|
||||
MODEM_RUNDIR="/var/run/modem"
|
||||
MODEM_RUN_CONFIG="${MODEM_RUNDIR}/config.cache"
|
||||
|
||||
#导入组件工具
|
||||
source "${SCRIPT_DIR}/modem_scan.sh"
|
||||
|
||||
#设置拨号模式
|
||||
# $1:拨号模式
|
||||
# set_mode()
|
||||
# {
|
||||
# #获取AT串口、制造商、模块名
|
||||
# local at_port=$(uci -q get modem.modem${modem_no}.at_port)
|
||||
# local manufacturer=$(uci -q get modem.modem${modem_no}.manufacturer)
|
||||
# local name=$(uci -q get modem.modem${modem_no}.name)
|
||||
|
||||
# #分制造商设置不同的AT命令
|
||||
# local command
|
||||
# if [ "$manufacturer" = "quectel" ]; then
|
||||
# local mode_num
|
||||
# case $1 in
|
||||
# "qmi") mode_num='0' ;;
|
||||
# "gobinet") mode_num='0' ;;
|
||||
# "ecm") mode_num='1' ;;
|
||||
# "mbim") mode_num='2' ;;
|
||||
# "rndis") mode_num='3' ;;
|
||||
# "ncm") mode_num='5' ;;
|
||||
# *) mode_num='0' ;;
|
||||
# esac
|
||||
|
||||
# #查询当前拨号模式
|
||||
# command='AT+QCFG="usbnet"'
|
||||
# local at_result=$(sh ${SCRIPT_DIR}/modem_at.sh $at_port $command)
|
||||
# if [[ "$at_result" != *"$mode_num"* ]]; then
|
||||
|
||||
# #切换到指定的拨号模式
|
||||
# case $1 in
|
||||
# "qmi") command='AT+QCFG="usbnet",0' ;;
|
||||
# "gobinet") command='AT+QCFG="usbnet",0' ;;
|
||||
# "ecm") command='AT+QCFG="usbnet",1' ;;
|
||||
# "mbim") command='AT+QCFG="usbnet",2' ;;
|
||||
# "rndis") command='AT+QCFG="usbnet",3' ;;
|
||||
# "ncm") command='AT+QCFG="usbnet",5' ;;
|
||||
# *) command='AT+QCFG="usbnet",0' ;;
|
||||
# esac
|
||||
# at_result=$(sh ${SCRIPT_DIR}/modem_at.sh "$at_port" "$command")
|
||||
# #移远切换模式后,还需要重启模块,待测试
|
||||
# sleep 5
|
||||
# modem_scan
|
||||
# fi
|
||||
# elif [ "$manufacturer" = "fibocom" ]; then
|
||||
# if [ "$name" = "fm150-ae" ]; then
|
||||
# local mode_num
|
||||
# case $1 in
|
||||
# "qmi") mode_num='32' ;;
|
||||
# "gobinet") mode_num='32' ;;
|
||||
# "ecm") mode_num='23' ;;
|
||||
# "mbim") mode_num='29' ;;
|
||||
# "rndis") mode_num='24' ;;
|
||||
# "ncm") mode_num='23' ;;
|
||||
# *) mode_num='32' ;;
|
||||
# esac
|
||||
|
||||
# #查询当前拨号模式
|
||||
# command='AT+GTUSBMODE?'
|
||||
# local at_result=$(sh ${SCRIPT_DIR}/modem_at.sh $at_port $command)
|
||||
# if [[ "$at_result" != *"$mode_num"* ]]; then
|
||||
# #切换到指定的拨号模式
|
||||
# case $1 in
|
||||
# "qmi") command='AT+GTUSBMODE=32' ;;
|
||||
# "gobinet") command='AT+GTUSBMODE=32' ;;
|
||||
# "ecm") command='AT+GTUSBMODE=23' ;;
|
||||
# "mbim") command='AT+GTUSBMODE=29' ;;
|
||||
# "rndis") command='AT+GTUSBMODE=24' ;;
|
||||
# "ncm") command='AT+GTUSBMODE=23' ;;
|
||||
# *) command='AT+GTUSBMODE=32' ;;
|
||||
# esac
|
||||
# at_result=$(sh ${SCRIPT_DIR}/modem_at.sh "$at_port" "$command")
|
||||
# sleep 5
|
||||
# modem_scan
|
||||
# fi
|
||||
# elif [ "$name" = "fm650" ]; then
|
||||
# #待处理
|
||||
# echo "fm650"
|
||||
# fi
|
||||
# else
|
||||
# #没有匹配到制造商,需要手动切换模块的拨号模式
|
||||
# echo "请手动切换模块的拨号模式"
|
||||
# fi
|
||||
# }
|
||||
|
||||
#设置防火墙
|
||||
# $1:网络接口名称
|
||||
set_firewall()
|
||||
{
|
||||
local interface_name="$1"
|
||||
|
||||
local num=$(uci show firewall | grep "name='wan'" | wc -l)
|
||||
local wwan_num=$(uci -q get firewall.@zone[$num].network | grep -w "${interface_name}" | wc -l)
|
||||
if [ "$wwan_num" = "0" ]; then
|
||||
uci add_list firewall.@zone[$num].network="${interface_name}"
|
||||
fi
|
||||
uci commit firewall
|
||||
}
|
||||
|
||||
#设置IPv4网络接口
|
||||
# $1:网络接口名称
|
||||
# $2:网络接口
|
||||
set_ipv4_interface()
|
||||
{
|
||||
local interface_name="$1"
|
||||
local network_interface="$2"
|
||||
|
||||
#删除原网络配置
|
||||
uci -q del network.${interface_name}.ipaddr
|
||||
uci -q del network.${interface_name}.netmask
|
||||
uci -q del network.${interface_name}.gateway
|
||||
uci -q del network.${interface_name}.peerdns
|
||||
uci -q del network.${interface_name}.dns
|
||||
|
||||
#添加或修改网络配置
|
||||
uci set network.${interface_name}='interface'
|
||||
uci set network.${interface_name}.proto='dhcp'
|
||||
uci set network.${interface_name}.device="${network_interface}"
|
||||
uci set network.${interface_name}.ifname="${network_interface}"
|
||||
uci commit network
|
||||
|
||||
#加入WAN防火墙
|
||||
set_firewall "${interface_name}"
|
||||
|
||||
#启动网络接口
|
||||
ifup "${interface_name}"
|
||||
}
|
||||
|
||||
#设置IPv6网络接口
|
||||
# $1:网络接口名称
|
||||
# $2:网络接口
|
||||
set_ipv6_interface()
|
||||
{
|
||||
local interface_name="$1"
|
||||
local network_interface="$2"
|
||||
|
||||
#添加或修改网络配置
|
||||
uci set network.${interface_name}='interface'
|
||||
uci set network.${interface_name}.proto='dhcpv6'
|
||||
uci set network.${interface_name}.extendprefix='1'
|
||||
uci set network.${interface_name}.device="${network_interface}"
|
||||
uci set network.${interface_name}.ifname="${network_interface}"
|
||||
uci commit network
|
||||
|
||||
#加入WAN防火墙
|
||||
set_firewall "${interface_name}"
|
||||
|
||||
#启动网络接口
|
||||
ifup "${interface_name}"
|
||||
}
|
||||
|
||||
#设置IPV4和IPv6网络接口
|
||||
# $1:IPV4网络接口名称
|
||||
# $2:IPv6网络接口名称
|
||||
# $3:网络接口
|
||||
set_ipv4v6_interface()
|
||||
{
|
||||
local ipv4_interface_name="$1"
|
||||
local ipv6_interface_name="$2"
|
||||
local network_interface="$3"
|
||||
|
||||
#设置IPV4网络接口
|
||||
set_ipv4_interface "${ipv4_interface_name}" "${network_interface}"
|
||||
#设置IPV6网络接口(别名)
|
||||
set_ipv6_interface "${ipv6_interface_name}" "@${ipv4_interface_name}"
|
||||
}
|
||||
|
||||
#设置网络接口
|
||||
# $1:模块序号
|
||||
# $2:网络接口
|
||||
set_interface()
|
||||
{
|
||||
local modem_no="$1"
|
||||
local network_interface="$2"
|
||||
|
||||
case $pdp_type in
|
||||
"ipv4") set_ipv4_interface "wwan_5g_${modem_no}" "${network_interface}" ;;
|
||||
"ipv6") set_ipv6_interface "wwan6_5g_${modem_no}" "${network_interface}" ;;
|
||||
"ipv4v6") set_ipv4v6_interface "wwan_5g_${modem_no}" "wwan6_5g_${modem_no}" "${network_interface}" ;;
|
||||
*) set_ipv4v6_interface "wwan_5g_${modem_no}" "wwan6_5g_${modem_no}" "${network_interface}" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
#设置移远模组MAC地址
|
||||
set_quectel_mac()
|
||||
{
|
||||
local mac_address="$(cat /sys/class/net/${network}/address)"
|
||||
local null_mac="00:00:00:00:00:00"
|
||||
[ -z "$mac_address" ] || [ "$mac_address" = "$null_mac" ] && {
|
||||
#方法一(lua)
|
||||
# local mac_address=$(lua -e 'math.randomseed(os.time()); for i=1,6 do io.write(string.format("%02X", math.random(0, 255))); if i < 6 then io.write(":") end; end')
|
||||
#方法二(shell)
|
||||
mac_address="$(generate_mac_address)"
|
||||
ifconfig "${network}" hw ether "${mac_address}"
|
||||
}
|
||||
}
|
||||
|
||||
#移远拨号工具
|
||||
quectel_cm()
|
||||
{
|
||||
#获取制造商
|
||||
local manufacturer=$(uci -q get modem.modem${modem_no}.manufacturer)
|
||||
#移远500系列模组特殊处理(解决在6.x内核下缺失MAC地址使用制造商驱动导致拨号异常问题)
|
||||
[ "$manufacturer" = "quectel" ] && set_quectel_mac
|
||||
|
||||
#拨号
|
||||
procd_open_instance
|
||||
procd_set_param command "quectel-CM"
|
||||
|
||||
case $pdp_type in
|
||||
"ipv4") procd_append_param command "-4" ;;
|
||||
"ipv6") procd_append_param command "-6" ;;
|
||||
"ipv4v6") procd_append_param command "-4" "-6" ;;
|
||||
*) procd_append_param command "-4" "-6" ;;
|
||||
esac
|
||||
|
||||
if [ "$network_bridge" = "1" ]; then
|
||||
procd_append_param command "-b"
|
||||
fi
|
||||
if [ "$apn" != "" ]; then
|
||||
procd_append_param command "-s" "$apn"
|
||||
fi
|
||||
if [ "$username" != "" ]; then
|
||||
procd_append_param command "$username"
|
||||
fi
|
||||
if [ "$password" != "" ]; then
|
||||
procd_append_param command "$password"
|
||||
fi
|
||||
if [ "$auth" != "none" ]; then
|
||||
procd_append_param command "$auth"
|
||||
fi
|
||||
if [ "$network" != "" ]; then
|
||||
procd_append_param command "-i" "$network"
|
||||
fi
|
||||
#日志
|
||||
procd_append_param command "-f" "${MODEM_RUNDIR}/modem${modem_no}_dial.cache"
|
||||
|
||||
procd_set_param respawn
|
||||
procd_set_param procd_pid "${MODEM_RUNDIR}/modem${modem_no}.pid"
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
#设置网络接口(Modem Manager)
|
||||
# $1:接口名称
|
||||
# $2:模组路径
|
||||
set_interface_modemmanager()
|
||||
{
|
||||
local interface_name="$1"
|
||||
local path="$2"
|
||||
|
||||
if [ "$(uci -q get network.${interface_name}.device)" != "${path}" ] ; then
|
||||
uci set network.${interface_name}='interface'
|
||||
uci set network.${interface_name}.proto='modemmanager'
|
||||
uci set network.${interface_name}.device="${path}"
|
||||
uci set network.${interface_name}.auth="$auth"
|
||||
uci set network.${interface_name}.iptype="$pdp_type"
|
||||
|
||||
if [ "$apn" != "" ]; then
|
||||
uci set network.${interface_name}.apn="$apn"
|
||||
fi
|
||||
if [ "$pincode" != "" ]; then
|
||||
uci set network.${interface_name}.pincode="$pincode"
|
||||
fi
|
||||
if [ "$username" != "" ]; then
|
||||
uci set network.${interface_name}.username="$username"
|
||||
fi
|
||||
if [ "$password" != "" ]; then
|
||||
uci set network.${interface_name}.password="$password"
|
||||
fi
|
||||
|
||||
uci commit network
|
||||
|
||||
#加入WAN防火墙
|
||||
set_firewall "${interface_name}"
|
||||
fi
|
||||
|
||||
#启动网络接口
|
||||
ifup "${interface_name}"
|
||||
}
|
||||
|
||||
#模块管理
|
||||
modemmanager()
|
||||
{
|
||||
#获取接口名称
|
||||
local interface_name="wwan_5g_${modem_no}"
|
||||
#获取调制解调器设备(模组路径)
|
||||
local path=$(uci -q get modem.modem${modem_no}.path)
|
||||
#设置Modem Manager网络接口
|
||||
set_interface_modemmanager "$interface_name" "$path"
|
||||
|
||||
#拨号
|
||||
procd_open_instance
|
||||
procd_set_param command sh ${SCRIPT_DIR}/modem_network_task.sh "${id}" "${modem_no}" "modemmanager"
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
qmi()
|
||||
{
|
||||
#选择拨号工具
|
||||
case $dial_tool in
|
||||
"quectel-CM") quectel_cm ;;
|
||||
"mmcli") modemmanager ;;
|
||||
"") quectel_cm ;;
|
||||
*) quectel_cm ;;
|
||||
esac
|
||||
}
|
||||
|
||||
gobinet()
|
||||
{
|
||||
#拨号
|
||||
procd_open_instance
|
||||
procd_set_param command sh ${SCRIPT_DIR}/modem_network_task.sh "${id}" "${modem_no}" "gobinet"
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
ecm()
|
||||
{
|
||||
#拨号
|
||||
procd_open_instance
|
||||
procd_set_param command sh ${SCRIPT_DIR}/modem_network_task.sh "${id}" "${modem_no}" "ecm"
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
mbim()
|
||||
{
|
||||
qmi
|
||||
}
|
||||
|
||||
rndis()
|
||||
{
|
||||
#拨号
|
||||
procd_open_instance
|
||||
procd_set_param command sh ${SCRIPT_DIR}/modem_network_task.sh "${id}" "${modem_no}" "rndis"
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
ncm()
|
||||
{
|
||||
ecm
|
||||
}
|
||||
|
||||
stop_qmi()
|
||||
{
|
||||
#获取modem的实例信息
|
||||
local response=$(ubus call service list '{"name": "modem"}')
|
||||
local instance_number=$(echo "$response" | jq -r '.modem.instances | length')
|
||||
for i in $(seq 1 $((instance_number))); do
|
||||
#获取拨号命令
|
||||
local command=$(echo "$response" | jq -r ".modem.instances.instance$i.command")
|
||||
#移远拨号工具
|
||||
if [[ "$command" = *"$network"* ]]; then
|
||||
local pid=$(echo "$response" | jq -r ".modem.instances.$i.pid")
|
||||
kill $pid >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
#Modem Manager
|
||||
#获取接口名称
|
||||
local interface_name="wwan_5g_${modem_no}"
|
||||
if [[ "$command" = *"$interface_name"* ]]; then
|
||||
local pid=$(echo "$response" | jq -r ".modem.instances.$i.pid")
|
||||
kill $pid >/dev/null 2>&1
|
||||
|
||||
#获取调制解调器设备(模组路径)
|
||||
local path=$(uci -q get modem.modem${modem_no}.path)
|
||||
mmcli -m "$path" --simple-disconnect
|
||||
#删除网络接口
|
||||
uci -q del network.${interface_name}
|
||||
uci commit network
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
stop_gobinet()
|
||||
{
|
||||
#获取AT串口、制造商
|
||||
local at_port=$(uci -q get modem.modem${modem_no}.at_port)
|
||||
local manufacturer=$(uci -q get modem.modem${modem_no}.manufacturer)
|
||||
|
||||
#停止拨号
|
||||
local at_command
|
||||
if [ "$manufacturer" = "quectel" ]; then
|
||||
at_command='ATI'
|
||||
elif [ "$manufacturer" = "fibocom" ]; then
|
||||
at_command='AT$QCRMCALL=0,1'
|
||||
elif [ "$manufacturer" = "meig" ]; then
|
||||
at_command='ATI'
|
||||
else
|
||||
at_command='ATI'
|
||||
fi
|
||||
|
||||
tmp=$(at "${at_port}" "${at_command}")
|
||||
}
|
||||
|
||||
stop_ecm()
|
||||
{
|
||||
#获取AT串口、制造商、平台、连接定义
|
||||
local at_port=$(uci -q get modem.modem${modem_no}.at_port)
|
||||
local manufacturer=$(uci -q get modem.modem${modem_no}.manufacturer)
|
||||
local platform=$(uci -q get modem.modem${modem_no}.platform)
|
||||
local define_connect=$(uci -q get modem.modem${modem_no}.define_connect)
|
||||
|
||||
#停止拨号
|
||||
local at_command
|
||||
if [ "$manufacturer" = "quectel" ]; then
|
||||
at_command="AT+QNETDEVCTL=${define_connect},2,1"
|
||||
elif [ "$manufacturer" = "fibocom" ]; then
|
||||
#联发科平台(广和通FM350-GL)
|
||||
if [ "$platform" = "mediatek" ]; then
|
||||
at_command="AT+CGACT=0,${define_connect}"
|
||||
else
|
||||
at_command="AT+GTRNDIS=0,${define_connect}"
|
||||
fi
|
||||
elif [ "$manufacturer" = "meig" ]; then
|
||||
at_command="AT$QCRMCALL=0,1,${define_connect},2,1"
|
||||
else
|
||||
at_command='ATI'
|
||||
fi
|
||||
|
||||
tmp=$(at "${at_port}" "${at_command}")
|
||||
}
|
||||
|
||||
stop_mbim()
|
||||
{
|
||||
stop_qmi
|
||||
}
|
||||
|
||||
stop_rndis()
|
||||
{
|
||||
stop_ecm
|
||||
#广和通的rndis和ecm不同,后续再测试
|
||||
}
|
||||
|
||||
stop_ncm()
|
||||
{
|
||||
stop_ecm
|
||||
}
|
||||
|
||||
#获取模块序号
|
||||
# $1:移动网络
|
||||
get_modem_no()
|
||||
{
|
||||
local modem_number=$(uci -q get modem.@global[0].modem_number)
|
||||
local modem_network
|
||||
for i in $(seq 0 $((modem_number-1))); do
|
||||
modem_network=$(uci -q get modem.modem${i}.network)
|
||||
if [ "$modem_network" = "$1" ]; then
|
||||
#模块序号
|
||||
modem_no=${i}
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
#获取实例运行状态(未使用)
|
||||
# $1:配置ID
|
||||
get_instance_status()
|
||||
{
|
||||
local config_id="$1"
|
||||
|
||||
#获取modem的实例信息
|
||||
local response=$(ubus call service list '{"name": "modem"}')
|
||||
local instance_number=$(echo "$response" | jq -r ".modem.instances | length")
|
||||
for i in $(seq 1 $((instance_number))); do
|
||||
#获取运行状态和拨号命令
|
||||
local running_status=$(echo "$response" | jq -r ".modem.instances.instance$i.running")
|
||||
local command=$(echo "$response" | jq -r ".modem.instances.instance$i.command")
|
||||
if [ "$running_status" = "true" ] && [[ "$command" = *"$network"* ]]; then
|
||||
#查看配置ID是否记录在已运行的文件里
|
||||
local run_config="/var/run/modem"
|
||||
local run_config_id=$(grep -n "$network" "$run_config" | cut -d ',' -f 2)
|
||||
if [ "${config_id}" = "$run_config_id" ]; then
|
||||
status=2
|
||||
break
|
||||
else
|
||||
status=1
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
#获取拨号模式
|
||||
# $1:模块号
|
||||
get_mode()
|
||||
{
|
||||
local modem_no="$1"
|
||||
|
||||
local manufacturer=$(uci -q get modem.modem${modem_no}.manufacturer)
|
||||
local at_port=$(uci -q get modem.modem${modem_no}.at_port)
|
||||
local platform=$(uci -q get modem.modem${modem_no}.platform)
|
||||
|
||||
mode=$(${manufacturer}_get_mode ${at_port} ${platform})
|
||||
echo "$mode"
|
||||
}
|
||||
|
||||
#获取拨号驱动
|
||||
#$1:模块号
|
||||
get_driver()
|
||||
{
|
||||
local modem_no="$1"
|
||||
local phy_id=$(uci -q get modem.modem${modem_no}.path)
|
||||
for i in $(find $phy_id -name driver);do
|
||||
lsfile=$(ls -l $i)
|
||||
type=${lsfile:0:1}
|
||||
if [ "$type" == "l" ];then
|
||||
link=$(basename $(ls -l $i | awk '{print $11}'))
|
||||
case $link in
|
||||
"qmi_wwan"*)
|
||||
mode="qmi"
|
||||
break
|
||||
;;
|
||||
"cdc_mbim")
|
||||
mode="mbim"
|
||||
break
|
||||
;;
|
||||
"cdc_ncm")
|
||||
mode="ncm"
|
||||
break
|
||||
;;
|
||||
"cdc_ether")
|
||||
mode="ecm"
|
||||
break
|
||||
;;
|
||||
"rndis_host")
|
||||
mode="rndis"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
if [ -z "$mode" ]; then
|
||||
mode="unknown"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
echo "$mode"
|
||||
|
||||
}
|
||||
|
||||
#网络预设
|
||||
connect_presets()
|
||||
{
|
||||
local at_port=$(uci -q get modem.modem${modem_no}.at_port)
|
||||
|
||||
#运营商选择设置
|
||||
local at_command='AT+COPS=0,0'
|
||||
tmp=$(at "${at_port}" "${at_command}")
|
||||
|
||||
#获取连接定义
|
||||
local define_connect=$(uci -q get modem.modem${modem_no}.define_connect)
|
||||
#获取PDP类型和APN
|
||||
local pdp_type_tmp="IPV4V6"
|
||||
if [ -n "$pdp_type" ]; then
|
||||
pdp_type_tmp=$(echo $pdp_type | tr 'a-z' 'A-Z')
|
||||
fi
|
||||
local apn_tmp=""
|
||||
if [ -n "$apn" ]; then
|
||||
apn_tmp=$(echo $apn | tr 'a-z' 'A-Z')
|
||||
fi
|
||||
|
||||
#PDP设置
|
||||
at_command="AT+CGDCONT=$define_connect,\"$pdp_type_tmp\",\"$apn_tmp\""
|
||||
tmp=$(at "${at_port}" "${at_command}")
|
||||
|
||||
#制造商私有预设
|
||||
# quectel_presets
|
||||
# fibocom_presets
|
||||
}
|
||||
|
||||
#停止拨号
|
||||
# $1:配置ID
|
||||
stop_dial()
|
||||
{
|
||||
local id="$1" #配置ID
|
||||
local network=$(uci -q get modem.$1.network) #移动网络
|
||||
|
||||
#把配置ID从临时列表中移除
|
||||
if [ -f "${MODEM_RUN_CONFIG}" ] && grep -q "${network}" "${MODEM_RUN_CONFIG}"; then
|
||||
#该配置ID在运行,需要删除记录
|
||||
sed -i "/${id}/d" "${MODEM_RUN_CONFIG}"
|
||||
|
||||
#获取模块序号
|
||||
get_modem_no "${network}"
|
||||
|
||||
#获取模组的拨号模式
|
||||
[ -z "${modem_no}" ] && return 0
|
||||
local mode=$(get_mode ${modem_no})
|
||||
[ -z "$mode" ] || [ "$mode" = "unknown" ] && return
|
||||
|
||||
#根据不同的拨号模式停止拨号
|
||||
if [ "$mode" = "qmi" ]; then
|
||||
stop_qmi
|
||||
elif [ "$mode" = "gobinet" ]; then
|
||||
stop_gobinet
|
||||
elif [ "$mode" = "ecm" ]; then
|
||||
stop_ecm
|
||||
elif [ "$mode" = "mbim" ]; then
|
||||
stop_mbim
|
||||
elif [ "$mode" = "rndis" ]; then
|
||||
stop_rndis
|
||||
elif [ "$mode" = "ncm" ]; then
|
||||
stop_ncm
|
||||
fi
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
dial()
|
||||
{
|
||||
local enable #启用
|
||||
local id #ID
|
||||
|
||||
config_get enable $1 enable
|
||||
config_get id $1 id
|
||||
|
||||
#停止拨号配置
|
||||
[ "$enable" = "0" ] && {
|
||||
stop_dial "$id"
|
||||
return 0
|
||||
}
|
||||
|
||||
local remarks #备注
|
||||
local network #移动网络
|
||||
local dial_tool #拨号工具
|
||||
local pdp_type #网络类型(IP类型)
|
||||
local network_bridge #网络桥接
|
||||
local apn #接入点
|
||||
local username #用户名
|
||||
local password #密码
|
||||
local auth #认证类型
|
||||
|
||||
config_get remarks $1 remarks
|
||||
config_get network $1 network
|
||||
config_get dial_tool $1 dial_tool
|
||||
config_get pdp_type $1 pdp_type
|
||||
config_get network_bridge $1 network_bridge
|
||||
config_get apn $1 apn
|
||||
config_get username $1 username
|
||||
config_get password $1 password
|
||||
config_get auth $1 auth
|
||||
|
||||
#获取模块序号
|
||||
get_modem_no "${network}"
|
||||
[ -z "${modem_no}" ] && return 0
|
||||
|
||||
#获取模组的拨号模式
|
||||
local time=0
|
||||
local mode
|
||||
|
||||
mode=$(get_driver ${modem_no})
|
||||
if [ "$mode" == "unknown" ]; then
|
||||
while [ $time -lt 5 ]; do
|
||||
mode=$(get_mode ${modem_no})
|
||||
[ -n "$mode" ] && [ "$mode" != "unknown" ] && break
|
||||
sleep 5s
|
||||
time=$((time+1))
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
#获取不到拨号模式
|
||||
[ -z "$mode" ] || [ "$mode" = "unknown" ] && {
|
||||
uci set modem.$1.enable=0
|
||||
uci commit modem
|
||||
return 0
|
||||
}
|
||||
|
||||
#查看该移动网络是否已经有拨号配置在运行
|
||||
mkdir -m 0755 -p "${MODEM_RUNDIR}"
|
||||
if [ ! -f "${MODEM_RUN_CONFIG}" ] || ! grep -q "${network}" "${MODEM_RUN_CONFIG}"; then
|
||||
#文件不存在或者未记录该移动网络
|
||||
echo "${network},${id}" >> "${MODEM_RUN_CONFIG}"
|
||||
|
||||
#获取网络接口
|
||||
local network_interface=$(uci -q get modem.modem${modem_no}.network_interface)
|
||||
#设置网络接口
|
||||
set_interface "${modem_no}" "$network_interface"
|
||||
else
|
||||
local config_id=$(awk -v network="${network}" -F',' '!/^#/ && $0 ~ network { print $2 }' "${MODEM_RUN_CONFIG}")
|
||||
#该移动网络已存在,且已有其他拨号配置在运行
|
||||
if [ "$id" != "$config_id" ]; then
|
||||
uci set modem.$1.enable=0
|
||||
uci commit modem
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
#设置网络预设
|
||||
connect_presets
|
||||
|
||||
#根据不同的拨号模式拨号
|
||||
if [ "$mode" = "qmi" ]; then
|
||||
qmi
|
||||
elif [ "$mode" = "gobinet" ]; then
|
||||
gobinet
|
||||
elif [ "$mode" = "ecm" ]; then
|
||||
ecm
|
||||
elif [ "$mode" = "mbim" ]; then
|
||||
mbim
|
||||
elif [ "$mode" = "rndis" ]; then
|
||||
rndis
|
||||
elif [ "$mode" = "ncm" ]; then
|
||||
ncm
|
||||
fi
|
||||
|
||||
# sleep 15
|
||||
}
|
||||
|
||||
#手动设置模组信息
|
||||
manual_set_modem_config()
|
||||
{
|
||||
local manual #手动配置
|
||||
local network #移动网络
|
||||
# local name #模组名称
|
||||
# local at_port #AT串口
|
||||
|
||||
config_get manual $1 manual
|
||||
config_get network $1 network
|
||||
# config_get name $1 name
|
||||
# config_get at_port $1 at_port
|
||||
|
||||
[ -z "$manual" ] || [ "$manual" = "0" ] && return
|
||||
|
||||
#获取网络设备路径
|
||||
local network_path="$(readlink -f /sys/class/net/${network})"
|
||||
|
||||
#只处理最上级的网络设备
|
||||
local count=$(echo "${network_path}" | grep -o "/net" | wc -l)
|
||||
[ "$count" -ge "2" ] && return
|
||||
|
||||
#判断路径是否带有usb(排除其他eth网络设备)
|
||||
if [[ "$network" = *"eth"* ]] && [[ "$network_path" != *"usb"* ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
#获取物理路径
|
||||
local physical_path=$(m_get_device_physical_path ${network_path})
|
||||
|
||||
#获取模组数量
|
||||
local modem_number=$(uci -q get modem.@global[0].modem_number)
|
||||
#模组配置是否存在
|
||||
for i in $(seq 0 $((modem_number-1))); do
|
||||
local modem_network=$(uci -q get modem.modem${i}.network)
|
||||
if [ "$modem_network" = "$network" ]; then
|
||||
# 配置已存在,退出
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
||||
#设置模组硬件配置
|
||||
m_set_modem_hardware_config "${physical_path}"
|
||||
|
||||
#设置模组网络配置
|
||||
m_set_network_config "${network}" "${physical_path}"
|
||||
|
||||
#设置模组串口
|
||||
m_set_modem_port "${physical_path}"
|
||||
|
||||
#获取模组数量
|
||||
modem_number=$(uci -q get modem.@global[0].modem_number)
|
||||
#获取模组序号
|
||||
local modem_no
|
||||
for i in $(seq 0 $((modem_number-1))); do
|
||||
local modem_path=$(uci -q get modem.modem${i}.path)
|
||||
if [ "$modem_path" = "$physical_path" ]; then
|
||||
modem_no="${i}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
#设置模组配置(由于AT串口已经提前设置,则跳过了模组配置,这里需要手动执行一次)
|
||||
m_set_modem_config "${modem_no}" "${physical_path}"
|
||||
uci commit modem
|
||||
}
|
||||
|
||||
#删除拨号配置
|
||||
del_dial_config()
|
||||
{
|
||||
#运行配置是否存在
|
||||
if [ -f "${MODEM_RUN_CONFIG}" ]; then
|
||||
|
||||
local configs=$(cat ${MODEM_RUN_CONFIG})
|
||||
for config in $configs; do
|
||||
#设置标志位
|
||||
local flag="0"
|
||||
local id=$(echo "$config" | awk -F',' '{print $2}')
|
||||
|
||||
local config_number=2
|
||||
for i in $(seq 0 $((config_number-1))); do
|
||||
local config_id=$(uci -q get modem.@dial-config[${i}].id)
|
||||
[ "$config_id" = "$id" ] && {
|
||||
flag="1"
|
||||
}
|
||||
done
|
||||
|
||||
#删除运行配置
|
||||
[ "$flag" = "0" ] && {
|
||||
sed -i "/${id}/d" "${MODEM_RUN_CONFIG}"
|
||||
}
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
#统计模组数量
|
||||
count_modem_number()
|
||||
{
|
||||
local network #移动网络
|
||||
|
||||
config_get network $1 network
|
||||
|
||||
modem_count=$((modem_count+1))
|
||||
}
|
||||
|
||||
service_triggers()
|
||||
{
|
||||
procd_add_reload_trigger "modem"
|
||||
}
|
||||
|
||||
start_service() {
|
||||
|
||||
#加载模组配置
|
||||
config_load modem
|
||||
|
||||
#统计模组数量
|
||||
modem_count=0
|
||||
config_foreach count_modem_number "modem-device"
|
||||
#设置模组数量
|
||||
uci set modem.@global[0].modem_number=${modem_count}
|
||||
uci commit modem
|
||||
|
||||
#手动设置模组信息
|
||||
config_foreach manual_set_modem_config "modem-device"
|
||||
|
||||
local enable_dial=$(uci -q get modem.@global[0].enable_dial)
|
||||
if [ "$enable_dial" = "0" ]; then
|
||||
stop_service
|
||||
else
|
||||
#删除拨号配置
|
||||
del_dial_config
|
||||
#加载拨号配置
|
||||
config_foreach dial "dial-config"
|
||||
fi
|
||||
}
|
||||
|
||||
stop_service()
|
||||
{
|
||||
#删除记录文件
|
||||
rm -rf ${MODEM_RUN_CONFIG}
|
||||
#停止qmi、mbim拨号
|
||||
killall quectel-CM >/dev/null 2>&1
|
||||
#停止gobinet、ecm、rndis、ncm拨号
|
||||
local modem_number=$(uci -q get modem.@global[0].modem_number)
|
||||
for i in $(seq 0 $((modem_number-1))); do
|
||||
modem_no=$i
|
||||
local mode=$(uci -q get modem.modem${modem_no}.mode)
|
||||
case $mode in
|
||||
"gobinet") stop_gobinet ;;
|
||||
"ecm") stop_ecm ;;
|
||||
"rndis") stop_rndis ;;
|
||||
"ncm") stop_ncm ;;
|
||||
*) stop_ecm ;;
|
||||
esac
|
||||
done
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2023 Siriling <siriling@qq.com>
|
||||
|
||||
START=70
|
||||
STOP=13
|
||||
USE_PROCD=1
|
||||
|
||||
#脚本目录
|
||||
SCRIPT_DIR="/usr/share/modem"
|
||||
|
||||
start_service()
|
||||
{
|
||||
# 暂时弃用
|
||||
# /bin/sh ${SCRIPT_DIR}/modem_init.sh
|
||||
echo "init"
|
||||
# procd_open_instance #启动实例
|
||||
# procd_set_param command /bin/sh /usr/share/modem/modem_init.sh
|
||||
# procd_set_param respawn # 定义respawn参数,告知procd当task程序退出后尝试进行重启
|
||||
# procd_close_instance #关闭实例
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user