Files
op-packages/luci-app-hypermodem/root/etc/init.d/hypermodem
T

191 lines
4.3 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2014 OpenWrt.org
START=94
STOP=13
USE_PROCD=1
#设置防火墙
# $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 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}.device="${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}.device="${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}"
}
#设置网络接口
# $2:网络接口
set_interface()
{
local network_interface="$1"
local pdp_type
[ "$ipv6" = "1" ] && {
pdp_type="ipv4v6"
}
case $pdp_type in
"ipv4") set_ipv4_interface "wwan_5g" "${network_interface}" ;;
"ipv6") set_ipv6_interface "wwan6_5g" "${network_interface}" ;;
"ipv4v6") set_ipv4v6_interface "wwan_5g" "wwan6_5g" "${network_interface}" ;;
*) set_ipv4v6_interface "wwan_5g" "wwan6_5g" "${network_interface}" ;;
esac
}
run_dial()
{
local enabled
config_get_bool enabled $1 enabled
if [ "$enabled" = "1" ]; then
local apn
local user
local password
local auth
local ipv6
local network_bridge
local device
config_get apn $1 apn
config_get user $1 user
config_get password $1 password
config_get auth $1 auth
config_get ipv6 $1 ipv6
config_get network_bridge $1 network_bridge
config_get device $1 device
devname="$(basename "${device}")"
devicepath="$(find /sys/class/ -name ${devname})"
devpath="$(readlink -f ${devicepath}/device/)"
network="$( ls "${devpath}"/net )"
#拨号配置
procd_open_instance
procd_set_param command quectel-CM
if [ "$ipv6" = 1 ]; then
procd_append_param command "-4" "-6"
fi
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" != "" ]; then
procd_append_param command "$auth"
fi
if [ "$device" != "" ]; then
procd_append_param command -i "$network"
fi
procd_set_param respawn
procd_close_instance
#设置网络接口
local network_interface
if [ -d /sys/class/net/rmnet_mhi0 ]; then
network_interface="rmnet_mhi0.1"
elif [ -d /sys/class/net/wwan0_1 ]; then
network_interface="wwan0_1"
elif [ -d /sys/class/net/wwan0.1 ]; then
network_interface="wwan0.1"
elif [ -d /sys/class/net/wwan0 ]; then
network_interface="wwan0"
fi
set_interface "${network_interface}"
fi
sleep 15
}
service_triggers()
{
procd_add_reload_trigger "hypermodem"
}
start_service() {
config_load hypermodem
config_foreach run_dial service
}
stop_service()
{
killall quectel-CM >/dev/null 2>&1
}
reload_service() {
restart
}