luci-app-modem: add mwan3 quick config
This commit is contained in:
parent
12d039cbc5
commit
86b5c73cab
@ -13,7 +13,8 @@ function index()
|
|||||||
end
|
end
|
||||||
|
|
||||||
entry({"admin", "network", "modem"}, alias("admin", "network", "modem", "modem_info"), translate("Modem"), 100).dependent = true
|
entry({"admin", "network", "modem"}, alias("admin", "network", "modem", "modem_info"), translate("Modem"), 100).dependent = true
|
||||||
|
--mwan配置
|
||||||
|
entry({"admin", "network", "modem", "mwan_config"}, cbi("modem/mwan_config"), translate("Mwan Config"), 1).leaf = true
|
||||||
--模块信息
|
--模块信息
|
||||||
entry({"admin", "network", "modem", "modem_info"}, template("modem/modem_info"), translate("Modem Information"),10).leaf = true
|
entry({"admin", "network", "modem", "modem_info"}, template("modem/modem_info"), translate("Modem Information"),10).leaf = true
|
||||||
entry({"admin", "network", "modem", "get_at_port"}, call("getATPort"), nil).leaf = true
|
entry({"admin", "network", "modem", "get_at_port"}, call("getATPort"), nil).leaf = true
|
||||||
|
89
luci-app-modem/luasrc/model/cbi/modem/mwan_config.lua
Normal file
89
luci-app-modem/luasrc/model/cbi/modem/mwan_config.lua
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
|
||||||
|
|
||||||
|
local d = require "luci.dispatcher"
|
||||||
|
local uci = luci.model.uci.cursor()
|
||||||
|
local sys = require "luci.sys"
|
||||||
|
local script_path="/usr/share/modem/"
|
||||||
|
|
||||||
|
m = Map("modem_mwan")
|
||||||
|
m.title = translate("Mwan Config")
|
||||||
|
m.description = translate("Check and modify the mwan configuration")
|
||||||
|
s = m:section(NamedSection, "global", "global", translate("gloal Config"))
|
||||||
|
s.anonymous = true
|
||||||
|
s.addremove = false
|
||||||
|
enable_mwan = s:option(Flag, "enable_mwan", translate("Enable MWAN"))
|
||||||
|
sticky = s:option(Flag,"sticky_mode",translate("sticky mode"))
|
||||||
|
sticky.default = 0
|
||||||
|
sticky.description = translate("same source ip address will always use the same wan interface")
|
||||||
|
sticky_timeout = s:option(Value,"sticky_timeout",translate("sticky timeout"))
|
||||||
|
sticky_timeout.default = 300
|
||||||
|
sticky_timeout.datatype = "uinteger"
|
||||||
|
sticky_timeout:depends("sticky_mode",1)
|
||||||
|
|
||||||
|
s = m:section(NamedSection, "ipv4", "ipv4", translate("IPV4 Config"))
|
||||||
|
s.anonymous = true
|
||||||
|
s.addremove = false
|
||||||
|
--设置mwan策略 0:不使用 1:使用(作为后备) 2:使用(作为主要) 3:使用(作为负载均衡)
|
||||||
|
o = s:option(ListValue, "mwan_policy", translate("MWAN Policy"))
|
||||||
|
o:value("0", translate("Not Use"))
|
||||||
|
o:value("1", translate("Use(WWAN As Backup)"))
|
||||||
|
o:value("2", translate("Use(WWAN As Main)"))
|
||||||
|
o:value("3", translate("Use(WWAN For Load Balance)"))
|
||||||
|
|
||||||
|
--设置mwan 有线wan端口
|
||||||
|
o = s:option(Value, "wan_ifname", translate("WAN Interface"))
|
||||||
|
o.rmempty = ture
|
||||||
|
o.description = translate("Please enter the WAN interface name")
|
||||||
|
o.template = "cbi/network_netlist"
|
||||||
|
o.widget = "optional"
|
||||||
|
o.nocreate = true
|
||||||
|
o.unspecified = true
|
||||||
|
|
||||||
|
--设置mwan wwan端口
|
||||||
|
o = s:option(Value, "wwan_ifname", translate("WWAN Interface"))
|
||||||
|
o.rmempty = ture
|
||||||
|
o.description = translate("Please enter the WWAN interface name")
|
||||||
|
o.template = "cbi/network_netlist"
|
||||||
|
o.widget = "optional"
|
||||||
|
o.nocreate = true
|
||||||
|
o.unspecified = true
|
||||||
|
o = s:option(DynamicList, 'track_ip', translate('track_ip'))
|
||||||
|
o.datatype = 'host'
|
||||||
|
|
||||||
|
-- m.title = translate("Mwan Config")
|
||||||
|
-- m.description = translate("Check and modify the mwan configuration")
|
||||||
|
-- s = m:section(NamedSection, "ipv6", "ipv6", translate("IPV6 Config"))
|
||||||
|
-- s.anonymous = true
|
||||||
|
-- s.addremove = false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- --设置mwan策略 0:不使用 1:使用(作为后备) 2:使用(作为主要) 3:使用(作为负载均衡)
|
||||||
|
-- o = s:option(ListValue, "mwan_policy", translate("MWAN Policy"))
|
||||||
|
-- o:value("0", translate("Not Use"))
|
||||||
|
-- o:value("1", translate("Use(WWAN As Backup)"))
|
||||||
|
-- o:value("2", translate("Use(WWAN As Main)"))
|
||||||
|
-- o:value("3", translate("Use(WWAN For Load Balance)"))
|
||||||
|
|
||||||
|
-- --设置mwan 有线wan端口
|
||||||
|
-- o = s:option(Value, "wan_ifname", translate("WAN Interface"))
|
||||||
|
-- o.rmempty = ture
|
||||||
|
-- o.description = translate("Please enter the WAN interface name")
|
||||||
|
-- o.template = "cbi/network_netlist"
|
||||||
|
-- o.widget = "optional"
|
||||||
|
-- o.nocreate = true
|
||||||
|
-- o.unspecified = true
|
||||||
|
|
||||||
|
-- --设置mwan wwan端口
|
||||||
|
-- o = s:option(Value, "wwan_ifname", translate("WWAN Interface"))
|
||||||
|
-- o.rmempty = ture
|
||||||
|
-- o.description = translate("Please enter the WWAN interface name")
|
||||||
|
-- o.template = "cbi/network_netlist"
|
||||||
|
-- o.widget = "optional"
|
||||||
|
-- o.nocreate = true
|
||||||
|
-- o.unspecified = true
|
||||||
|
|
||||||
|
-- o = s:option(DynamicList, 'track_ip', translate('track_ip'))
|
||||||
|
-- o.datatype = 'host'
|
||||||
|
return m
|
10
luci-app-modem/root/etc/config/modem_mwan
Normal file
10
luci-app-modem/root/etc/config/modem_mwan
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
config ipv4 'ipv4'
|
||||||
|
option wan_ifname 'wan'
|
||||||
|
option wwan_ifname 'wwan_5g_0'
|
||||||
|
list track_ip 'test.ustc.edu.cn'
|
||||||
|
list track_ip 'cip.cc'
|
||||||
|
list track_ip '208.67.222.222'
|
||||||
|
list track_ip '208.67.220.220'
|
||||||
|
|
||||||
|
config global 'global'
|
||||||
|
option enable_mwan '0'
|
53
luci-app-modem/root/etc/init.d/modem_mwan
Executable file
53
luci-app-modem/root/etc/init.d/modem_mwan
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
USE_PROCD=1
|
||||||
|
START=30
|
||||||
|
|
||||||
|
set_rule()
|
||||||
|
{
|
||||||
|
proto=$1
|
||||||
|
policy=$2
|
||||||
|
case $policy in
|
||||||
|
0)
|
||||||
|
cmd="stop"
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
cmd="wan"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
cmd="wwan"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
cmd="lb"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
cmd="stop"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
logger -t modem_mwan "before set $proto $cmd"
|
||||||
|
/usr/share/modem/modem_mwan.sh $proto $cmd
|
||||||
|
logger -t modem_mwan "set $proto $cmd"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
start_service() {
|
||||||
|
logger -t modem_mwan "start modem_mwan"
|
||||||
|
config_load modem_mwan
|
||||||
|
config_get enable global enable_mwan 0
|
||||||
|
if [ "$enable" = "0" ]; then
|
||||||
|
stop_service
|
||||||
|
fi
|
||||||
|
config_get v4 ipv4 mwan_policy 0
|
||||||
|
set_rule ipv4 $v4
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_service() {
|
||||||
|
/usr/share/modem/modem_mwan.sh ipv4 stop
|
||||||
|
/usr/share/modem/modem_mwan.sh ipv4 disable
|
||||||
|
}
|
||||||
|
|
||||||
|
service_triggers() {
|
||||||
|
procd_add_reload_trigger 'modem_mwan'
|
||||||
|
}
|
@ -16,6 +16,8 @@ uci -q batch <<-EOF >/dev/null
|
|||||||
delete ucitrack.@modem[-1]
|
delete ucitrack.@modem[-1]
|
||||||
add ucitrack modem
|
add ucitrack modem
|
||||||
set ucitrack.@modem[-1].init=modem
|
set ucitrack.@modem[-1].init=modem
|
||||||
|
add ucitrack modem
|
||||||
|
set ucitrack.@modem_mwan[-1].init=modem_mwan
|
||||||
commit ucitrack
|
commit ucitrack
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
192
luci-app-modem/root/usr/share/modem/modem_mwan.sh
Executable file
192
luci-app-modem/root/usr/share/modem/modem_mwan.sh
Executable file
@ -0,0 +1,192 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
. /lib/functions.sh
|
||||||
|
family=$1
|
||||||
|
config_load modem_mwan
|
||||||
|
config_get wan "$family" wan_ifname
|
||||||
|
config_get wwan "$family" wwan_ifname
|
||||||
|
config_get track_ip "$family" track_ip
|
||||||
|
config_get sticky_mode global sticky_mode
|
||||||
|
config_get sticky_timeout global sticky_timeout
|
||||||
|
|
||||||
|
append_if(){
|
||||||
|
interface=$1
|
||||||
|
track_ip=$2
|
||||||
|
uci batch <<EOF
|
||||||
|
set mwan3.$interface=interface
|
||||||
|
set mwan3.$interface.enabled=1
|
||||||
|
set mwan3.$interface.family="$family"
|
||||||
|
set mwan3.$interface.track_method=ping
|
||||||
|
set mwan3.$interface.reliability='1'
|
||||||
|
set mwan3.$interface.count='1'
|
||||||
|
set mwan3.$interface.size='56'
|
||||||
|
set mwan3.$interface.max_ttl='60'
|
||||||
|
set mwan3.$interface.timeout='4'
|
||||||
|
set mwan3.$interface.interval='10'
|
||||||
|
set mwan3.$interface.failure_interval='5'
|
||||||
|
set mwan3.$interface.recovery_interval='5'
|
||||||
|
set mwan3.$interface.down='5'
|
||||||
|
set mwan3.$interface.up='5'
|
||||||
|
set mwan3.$interface.add_by=modem
|
||||||
|
delete mwan3.$interface.track_ip
|
||||||
|
EOF
|
||||||
|
if [ -n "$track_ip" ]; then
|
||||||
|
for ip in $track_ip; do
|
||||||
|
uci add_list mwan3.$interface.track_ip=$ip
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
add_mwan3_member()
|
||||||
|
{
|
||||||
|
interface=$1
|
||||||
|
metric=$2
|
||||||
|
weight=$3
|
||||||
|
member_name="${interface}_m_${metric}_w_${weight}"
|
||||||
|
uci batch <<EOF
|
||||||
|
set mwan3.$member_name=member
|
||||||
|
set mwan3.$member_name.interface=$interface
|
||||||
|
set mwan3.$member_name.metric=$metric
|
||||||
|
set mwan3.$member_name.weight=$weight
|
||||||
|
set mwan3.$member_name.add_by=modem
|
||||||
|
EOF
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_member()
|
||||||
|
{
|
||||||
|
config_load mwan3
|
||||||
|
config_foreach remove_member_cb member
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_member_cb()
|
||||||
|
{
|
||||||
|
local add_by
|
||||||
|
config_get add_by $1 add_by
|
||||||
|
if [ "$add_by" = "modem" ]; then
|
||||||
|
uci delete mwan3.$1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_mwan3_policy()
|
||||||
|
{
|
||||||
|
policy_name=$1
|
||||||
|
use_member=$2
|
||||||
|
uci batch <<EOF
|
||||||
|
set mwan3.$policy_name=policy
|
||||||
|
set mwan3.$policy_name.last_resort='default'
|
||||||
|
set mwan3.$policy_name.add_by=modem
|
||||||
|
delete mwan3.$policy_name.use_member
|
||||||
|
EOF
|
||||||
|
for member in $use_member; do
|
||||||
|
uci add_list mwan3.$policy_name.use_member=$member
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
flush_config(){
|
||||||
|
config_load mwan3
|
||||||
|
config_foreach remove_cb interface
|
||||||
|
config_foreach remove_cb member
|
||||||
|
config_foreach remove_cb policy
|
||||||
|
config_foreach remove_cb rule
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_cb(){
|
||||||
|
local add_by
|
||||||
|
config_get add_by $1 add_by
|
||||||
|
if [ "$add_by" = "modem" ]; then
|
||||||
|
uci delete mwan3.$1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
add_balance_policy()
|
||||||
|
{
|
||||||
|
|
||||||
|
add_mwan3_member $wan 1 1
|
||||||
|
add_mwan3_member $wwan 1 1
|
||||||
|
add_mwan3_policy lb_${family} "${wan}_m_1_w_1 ${wwan}_m_1_w_1"
|
||||||
|
}
|
||||||
|
|
||||||
|
add_wan_prefer_policy()
|
||||||
|
{
|
||||||
|
config_load modem_mwan
|
||||||
|
config_get wan "$family" wan_ifname
|
||||||
|
config_get wwan "$family" wwan_ifname
|
||||||
|
config_get track_ip "$family" track_ip
|
||||||
|
add_mwan3_member $wan 1 1
|
||||||
|
add_mwan3_member $wwan 2 1
|
||||||
|
add_mwan3_policy preferwan_${family} "${wan}_w_1_m_1 ${wwan}_w_2_m_1"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
add_wwan_prefer_policy()
|
||||||
|
{
|
||||||
|
add_mwan3_member $wan 2 1
|
||||||
|
add_mwan3_member $wwan 1 1
|
||||||
|
add_mwan3_policy preferwwan_${family} "${wan}_w_2_m_1 ${wwan}_w_1_m_1"
|
||||||
|
}
|
||||||
|
|
||||||
|
set_if()
|
||||||
|
{
|
||||||
|
family=$1
|
||||||
|
append_if $wan "$track_ip"
|
||||||
|
append_if $wwan "$track_ip"
|
||||||
|
}
|
||||||
|
|
||||||
|
gen_if()
|
||||||
|
{
|
||||||
|
append_if $wan "$track_ip"
|
||||||
|
append_if $wwan "$track_ip"
|
||||||
|
}
|
||||||
|
|
||||||
|
gen_rule()
|
||||||
|
{
|
||||||
|
use_policy=$1
|
||||||
|
rule_name=${family}_rule
|
||||||
|
uci batch <<EOF
|
||||||
|
set mwan3.$rule_name=rule
|
||||||
|
set mwan3.$rule_name.family="$family"
|
||||||
|
set mwan3.$rule_name.sticky=$sticky_mode
|
||||||
|
set mwan3.$rule_name.proto='all'
|
||||||
|
set mwan3.$rule_name.use_policy=$use_policy
|
||||||
|
set mwan3.$rule_name.add_by=modem
|
||||||
|
EOF
|
||||||
|
if [ -n "$sticky_timeout" ]; then
|
||||||
|
uci set mwan3.$rule_name.timeout=$sticky_timeout
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
/etc/init.d/mwan3 stop
|
||||||
|
case $2 in
|
||||||
|
"lb")
|
||||||
|
set_if $family
|
||||||
|
add_balance_policy
|
||||||
|
gen_rule lb_${family}
|
||||||
|
start=start
|
||||||
|
;;
|
||||||
|
"wan")
|
||||||
|
set_if $family
|
||||||
|
add_wan_prefer_policy
|
||||||
|
gen_rule preferwan_${family}
|
||||||
|
start=start
|
||||||
|
;;
|
||||||
|
"wwan")
|
||||||
|
set_if $family
|
||||||
|
add_wwan_prefer_policy
|
||||||
|
gen_rule preferwwan_${family}
|
||||||
|
start=start
|
||||||
|
;;
|
||||||
|
"disable")
|
||||||
|
/etc/init.d/mwan3 stop
|
||||||
|
flush_config
|
||||||
|
;;
|
||||||
|
"stop")
|
||||||
|
rule_name=${family}_rule
|
||||||
|
uci delete mwan3.$rule_name
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
uci commit mwan3
|
||||||
|
/etc/init.d/mwan3 $start
|
Loading…
x
Reference in New Issue
Block a user