mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-06 20:14:10 +08:00
🌴 Sync 2026-03-05 23:51:42
This commit is contained in:
1 parent
97c049ed0a
commit
0acff03804
14253 files changed
+3893239
No files matched your search
@@ -0,0 +1,17 @@
|
||||
#
|
||||
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=Virtual WAN config generator
|
||||
LUCI_DEPENDS:=+kmod-macvlan +luci-app-mwan3
|
||||
PKG_VERSION:=2.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
#Makefile for syncdial
|
||||
@@ -0,0 +1,32 @@
|
||||
module("luci.controller.syncdial", package.seeall)
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/syncdial") then
|
||||
return
|
||||
end
|
||||
|
||||
local page
|
||||
page = entry({"admin", "network", "syncdial"}, cbi("syncdial"), _("多线多拨"),103)
|
||||
page.dependent = true
|
||||
page.acl_depends = { "luci-app-syncdial" }
|
||||
|
||||
page = entry({"admin", "network", "syncdial", "status"}, call("act_status"))
|
||||
page.leaf = true
|
||||
page = entry({"admin", "network", "macvlan_redial"}, call("redial"), nil)
|
||||
page.leaf = true
|
||||
end
|
||||
|
||||
function act_status()
|
||||
local e = {}
|
||||
local mwan3_status = luci.util.exec("mwan3 status")
|
||||
e.num_online = 0
|
||||
for _ in mwan3_status:gmatch("tracking is active") do
|
||||
e.num_online = e.num_online + 1
|
||||
end
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(e)
|
||||
end
|
||||
|
||||
function redial()
|
||||
os.execute("killall -9 pppd")
|
||||
end
|
||||
@@ -0,0 +1,91 @@
|
||||
local e = require"nixio.fs"
|
||||
require("luci.tools.webadmin")
|
||||
|
||||
m = Map("syncdial")
|
||||
m.title = translate("多线多拨")
|
||||
m.description = translate("使用macvlan驱动创建多个虚拟WAN口,支持并发多拨。")
|
||||
|
||||
m:section(SimpleSection).template = "syncdial/syncdial_status"
|
||||
|
||||
s = m:section(NamedSection, "config", "syncdial", translate("配置"))
|
||||
s.anonymous = true
|
||||
|
||||
o = s:option(Flag, "enabled", translate("启用"))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Flag, "syncon", translate("启用并发多拨"))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(ListValue, "dial_type", translate("多拨类型"))
|
||||
o:value("1", translate("单线多拨"))
|
||||
o:value("2", translate("双线多拨"))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Value, "wanselect", translate("选择外网接口"))
|
||||
o.description = translate("指定要多拨的外网接口,如wan")
|
||||
luci.tools.webadmin.cbi_add_networks(o)
|
||||
o.optional = false
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Flag, "ipv6", translate("启用ipv6"))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Value, "wannum", translate("虚拟WAN接口数量"))
|
||||
o.datatype = "and(uinteger,range(0,249))"
|
||||
o.optional = false
|
||||
o.default = 1
|
||||
|
||||
o = s:option(Flag, "bindwan", translate("绑定物理接口"))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Value, "wanselect2", translate("选择第二个外网接口"))
|
||||
o.description = translate("<font color=\"red\">指定要多拨的第二个外网接口,如wan2</font>")
|
||||
luci.tools.webadmin.cbi_add_networks(o)
|
||||
o.optional=false
|
||||
o:depends("dial_type","2")
|
||||
|
||||
o = s:option(Value, "wannum2", translate("第二条线虚拟WAN接口数量"))
|
||||
o.description = translate("设置第二条线的拨号数")
|
||||
o.datatype = "and(uinteger,range(0,249))"
|
||||
o.optional = false
|
||||
o.default = 1
|
||||
o:depends("dial_type","2")
|
||||
|
||||
o = s:option(Flag, "bindwan2", translate("绑定物理接口"))
|
||||
o.description = translate("第二条线生成的虚拟接口绑定当前物理接口")
|
||||
o.rmempty = false
|
||||
o:depends("dial_type","2")
|
||||
|
||||
o = s:option(Flag, "dialchk", translate("启用掉线检测"))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Value, "dialnum", translate("最低在线接口数量"))
|
||||
o.description = translate("如果在线接口数量小于这个值则重拨。(每个ipv6也算一个接口)")
|
||||
o.datatype = "and(uinteger,range(0,248))"
|
||||
o.optional = false
|
||||
o.default = 2
|
||||
|
||||
o = s:option(Value, "dialnum2", translate("第二条线最低在线接口数量"))
|
||||
o.description = translate("如果第二条线在线接口数量小于这个值则重拨。(每个ipv6也算一个接口)")
|
||||
o.datatype = "range(0,248)"
|
||||
o.optional = false
|
||||
o.default = 2
|
||||
o:depends("dial_type","2")
|
||||
|
||||
o = s:option(Value, "dialwait", translate("重拨等待时间"))
|
||||
o.description = translate("重拨时,接口全部下线后下一次拨号前的等待时间。单位:秒 最小值:5秒")
|
||||
o.datatype = "and(uinteger,min(5))"
|
||||
o.optional = false
|
||||
|
||||
o = s:option(Flag, "old_frame", translate("使用旧的macvlan创建方式"))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Flag, "nomwan", translate("不自动配置MWAN3负载均衡"))
|
||||
o.description = translate("需要自定义负载均衡设置或者要使用策略路由的用户选择")
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(DummyValue, "_redial", translate("重新并发拨号"))
|
||||
o.template = "syncdial/redial_button"
|
||||
o.width = "10%"
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,17 @@
|
||||
<%+cbi/valueheader%>
|
||||
<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-17.110.13538-6360059"></script>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
|
||||
function do_macvlan_redial()
|
||||
{
|
||||
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "macvlan_redial")%>', null,
|
||||
function(x, st)
|
||||
{
|
||||
window.location.href='<%=luci.dispatcher.build_url("admin", "network", "network")%>';
|
||||
}
|
||||
);
|
||||
}
|
||||
//]]></script>
|
||||
|
||||
<input class="btn cbi-button cbi-button-save" id="cbi-macvlan_rediag-<%=section%>-action" type="button" value="重新拨号" onclick="do_macvlan_redial()" />
|
||||
<%+cbi/valuefooter%>
|
||||
@@ -0,0 +1,17 @@
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
XHR.poll(3, '<%=luci.dispatcher.build_url("admin", "network", "syncdial", "status")%>', null,
|
||||
function(x, data) {
|
||||
var tb = document.getElementById('syncdial_status');
|
||||
if (data && tb) {
|
||||
tb.innerHTML = '<b><%:当前在线接口数量:%> ' + data.num_online + '</b>';
|
||||
}
|
||||
}
|
||||
);
|
||||
//]]>
|
||||
</script>
|
||||
<style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style>
|
||||
<fieldset class="cbi-section">
|
||||
<p id="syncdial_status">
|
||||
<em><%:Collecting data...%></em>
|
||||
</p>
|
||||
</fieldset>
|
||||
Executable
+328
@@ -0,0 +1,328 @@
|
||||
#!/bin/sh
|
||||
#macvlan及PPPoE拨号接口配置批量自动生成脚本
|
||||
#Copyright (C) 2016
|
||||
. /lib/functions.sh
|
||||
|
||||
#检测IP列表
|
||||
chk_ip_list="www.baidu.com 114.114.114.114 119.29.29.29"
|
||||
chk_ip6_list="2400:da00:2::29"
|
||||
origfirewall=$(uci get firewall.@zone[1].network)
|
||||
backupdev=$(uci get syncdial.config.devbackup)
|
||||
norun=$(echo $origfirewall|grep vwan)
|
||||
nomwan=$(uci get syncdial.config.nomwan)
|
||||
wanselect=$(uci get syncdial.config.wanselect)
|
||||
wannum=$(uci get syncdial.config.wannum)
|
||||
oldframe=$(uci get syncdial.config.old_frame)
|
||||
bindwan=$(uci -q get syncdial.config.bindwan)
|
||||
ipv6=$(uci -q get syncdial.config.ipv6)
|
||||
dial_type=$(uci get syncdial.config.dial_type)
|
||||
[ "$dial_type" -eq 2 ] && {
|
||||
wanselect2=$(uci get syncdial.config.wanselect2)
|
||||
[ $? -ne 0 ] && {
|
||||
logger -t Syncppp "You must select another pppoe interface ! 启用双线多拨必须同时选择第二个外网接口!"
|
||||
return 0
|
||||
}
|
||||
|
||||
wannum2=$(uci get syncdial.config.wannum2)
|
||||
[ $? -ne 0 ] && {
|
||||
logger -t Syncppp "When dualdial is enabled, the number of the second virtual WAN cannot be blank! 启用双线多拨时第二个虚拟WAN接口数不能为空!"
|
||||
return 0
|
||||
}
|
||||
bindwan2=$(uci -q get syncdial.config.bindwan2)
|
||||
}
|
||||
|
||||
#添加MWAN负载均衡相关配置
|
||||
#$1:接口名称
|
||||
mwan_cfg_add() {
|
||||
#gen mwan3_interface
|
||||
uci set mwan3.${1}=interface
|
||||
uci set mwan3.${1}.enabled=1
|
||||
uci set mwan3.${1}.count=2
|
||||
uci set mwan3.${1}.timeout=2
|
||||
uci set mwan3.${1}.interval=5
|
||||
uci set mwan3.${1}.down=4
|
||||
uci set mwan3.${1}.up=1
|
||||
for i in $chk_ip_list
|
||||
do
|
||||
uci add_list mwan3.${1}.track_ip="$i"
|
||||
done
|
||||
uci set mwan3.${1}.reliability=1
|
||||
uci set mwan3.${1}.initial_state=online
|
||||
uci set mwan3.${1}.family=ipv4
|
||||
uci set mwan3.${1}.track_method=ping
|
||||
uci set mwan3.${1}.size=56
|
||||
uci set mwan3.${1}.failure_interval=5
|
||||
uci set mwan3.${1}.recovery_interval=5
|
||||
uci set mwan3.${1}.flush_conntrack=never
|
||||
#gen mwan3_member
|
||||
uci set mwan3.${1}_m1_w1=member
|
||||
uci set mwan3.${1}_m1_w1.interface=${1}
|
||||
uci set mwan3.${1}_m1_w1.metric=1
|
||||
uci set mwan3.${1}_m1_w1.weight=1
|
||||
#gen mwan3_policy
|
||||
uci add_list mwan3.balanced.use_member=${1}_m1_w1
|
||||
[ "$ipv6" == "1" ] && {
|
||||
#gen mwan3_interface
|
||||
uci set mwan3.${1}_6=interface
|
||||
uci set mwan3.${1}_6.enabled=1
|
||||
uci set mwan3.${1}_6.count=2
|
||||
uci set mwan3.${1}_6.timeout=2
|
||||
uci set mwan3.${1}_6.interval=5
|
||||
uci set mwan3.${1}_6.down=4
|
||||
uci set mwan3.${1}_6.up=1
|
||||
for i in $chk_ip6_list
|
||||
do
|
||||
uci add_list mwan3.${1}.track_ip="$i"
|
||||
done
|
||||
uci set mwan3.${1}_6.reliability=1
|
||||
uci set mwan3.${1}_6.initial_state=online
|
||||
uci set mwan3.${1}_6.family=ipv6
|
||||
uci set mwan3.${1}_6.track_method=ping
|
||||
uci set mwan3.${1}_6.size=56
|
||||
uci set mwan3.${1}_6.failure_interval=5
|
||||
uci set mwan3.${1}_6.recovery_interval=5
|
||||
uci set mwan3.${1}_6.flush_conntrack=never
|
||||
#gen mwan3_member
|
||||
uci set mwan3.${1}_6_m1_w1=member
|
||||
uci set mwan3.${1}_6_m1_w1.interface=${1}_6
|
||||
uci set mwan3.${1}_6_m1_w1.metric=1
|
||||
uci set mwan3.${1}_6_m1_w1.weight=1
|
||||
#gen mwan3_policy
|
||||
uci add_list mwan3.balanced.use_member=${1}_6_m1_w1
|
||||
}
|
||||
}
|
||||
|
||||
#删除MWAN负载均衡相关配置
|
||||
#$1:接口名称
|
||||
mwan_cfg_del() {
|
||||
uci del mwan3.${1}
|
||||
uci del mwan3.${1}_m1_w1
|
||||
uci del_list mwan3.balanced.use_member=${1}_m1_w1
|
||||
[ "$ipv6" == "1" ] && {
|
||||
uci del mwan3.${1}_6
|
||||
uci del mwan3.${1}_6_m1_w1
|
||||
uci del_list mwan3.balanced.use_member=${1}_6_m1_w1
|
||||
}
|
||||
}
|
||||
|
||||
#添加macvlan设备
|
||||
#$1:设虚拟备名称 $2:原始设备名称
|
||||
macvlan_dev_add() {
|
||||
uci set network.macvlandev_${1}=device
|
||||
uci set network.macvlandev_${1}.name=${1}
|
||||
uci set network.macvlandev_${1}.device=${2}
|
||||
uci set network.macvlandev_${1}.type=macvlan
|
||||
}
|
||||
|
||||
#添加PPPoE接口
|
||||
#$1:接口名称 $2:设备名称 $3:账户 $4:密码 $5:网关跃点
|
||||
pppoe_if_add() {
|
||||
#gen vwan macaddr
|
||||
NEW_MACADDR=$(openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//')
|
||||
#gen wan if
|
||||
uci set network.${1}=interface
|
||||
uci set network.${1}.device=${3}
|
||||
uci set network.${1}.proto=pppoe
|
||||
uci set network.${1}.username=${4}
|
||||
uci set network.${1}.password=${5}
|
||||
uci set network.${1}.metric=${2}
|
||||
uci set network.${1}.macaddr=$NEW_MACADDR
|
||||
[ "$ipv6" == "1" ] && {
|
||||
uci set network.${1}_6=interface
|
||||
uci set network.${1}_6.device=pppoe-${1}
|
||||
uci set network.${1}_6.proto=dhcpv6
|
||||
uci set network.${1}_6.metric=$((${5}+984))
|
||||
uci set network.${1}_6.macaddr=$NEW_MACADDR
|
||||
uci add_list firewall.@zone[1].network=${1}_6
|
||||
}
|
||||
#gen firewall
|
||||
uci add_list firewall.@zone[1].network=${1}
|
||||
}
|
||||
|
||||
|
||||
orig_firewall_add() {
|
||||
need_del_rule=`uci -q get firewall.@zone[1].network | awk -F"'" '{print $2}'`
|
||||
uci del_list firewall.@zone[1].network="$need_del_rule"
|
||||
for k in $( seq 1 250 )
|
||||
do
|
||||
origdev=$(echo $origfirewall | cut -d " " -f$k)
|
||||
if [ -z "$origdev" ]; then
|
||||
break
|
||||
fi
|
||||
[ -z "$(uci get firewall.@zone[1].network | grep -w $origdev)" ] && uci add_list firewall.@zone[1].network=$origdev
|
||||
done
|
||||
}
|
||||
|
||||
apply_cfg() {
|
||||
uci commit
|
||||
#/etc/init.d/network restart &
|
||||
logger -t Syncppp "Apply syncdial configuaration."
|
||||
ifup wan &
|
||||
killall pppconnectcheck
|
||||
}
|
||||
|
||||
general_config_load() {
|
||||
config_load 'syncdial'
|
||||
config_get_bool enabled 'config' 'enabled'
|
||||
config_get_bool old_frame 'config' 'old_frame'
|
||||
congig_get_bool dial_type 'config' 'dial_type'
|
||||
|
||||
if [ "$enabled" -eq 0 ]; then
|
||||
if [ "$old_frame" -eq 1 ]; then
|
||||
mwan_cfg_add $wanselect
|
||||
if [ "$dial_type" -eq 2 ]; then
|
||||
mwan_cfg_add $wanselect2
|
||||
fi
|
||||
fi
|
||||
echo "Disabled.Exit now."
|
||||
apply_cfg
|
||||
exit 1
|
||||
fi
|
||||
|
||||
config_load 'network'
|
||||
config_get pppoe_user $wanselect 'username'
|
||||
config_get pppoe_password $wanselect 'password'
|
||||
pppoe_device=$(uci get network.$wanselect.device)
|
||||
[ "$dial_type" -eq 2 ] && {
|
||||
config_get pppoe_user2 $wanselect2 'username'
|
||||
config_get pppoe_password2 $wanselect2 'password'
|
||||
pppoe_device2=$(uci get network.$wanselect2.device)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
check_remove_device() {
|
||||
local devcfg=${1}
|
||||
[ ${devcfg::11} == 'macvlandev_' ] && uci del network.${devcfg}
|
||||
}
|
||||
|
||||
check_remove_interface() {
|
||||
local ifcfg=${1}
|
||||
[ ${ifcfg::4} == 'vwan' ] && {
|
||||
uci del network.${ifcfg}
|
||||
uci del_list firewall.@zone[1].network=${ifcfg}
|
||||
[ "$nomwan" -ne 1 ] && mwan_cfg_del ${ifcfg}
|
||||
}
|
||||
uci set firewall.@zone[1].network="$backupdev"
|
||||
}
|
||||
|
||||
general_config_remove() {
|
||||
config_load network
|
||||
config_foreach check_remove_device 'device'
|
||||
config_foreach check_remove_interface 'interface'
|
||||
all_macvlans=`ip link show |grep macvlan | awk -F":" '{print $2}' | awk -F"@" '{print $1}'`
|
||||
[ -n "$all_macvlans" ] && {
|
||||
for macvlan in $all_macvlans
|
||||
do
|
||||
ip link delete $macvlan
|
||||
done
|
||||
}
|
||||
[ "$(uci get network.$wanselect.proto)" == "none" ] && {
|
||||
uci set network.$wanselect.proto=pppoe
|
||||
}
|
||||
|
||||
if [ "$oldframe" -eq 0 ]; then
|
||||
[ "$wanselect" != "$(echo $(uci get syncdial.config.devbackup)| cut -d " " -f1)" ] && \
|
||||
[ "$wanselect" != "$(echo $(uci get syncdial.config.devbackup)| cut -d " " -f2)" ] && \
|
||||
[ "$nomwan" -ne 1 ] && mwan_cfg_del $wanselect
|
||||
else
|
||||
[ "$nomwan" -ne 1 ] && mwan_cfg_del $wanselect
|
||||
fi
|
||||
|
||||
[ "$dial_type" -eq 2 ] && {
|
||||
[ $(uci get network.$wanselect2.proto) == "none" ] && {
|
||||
uci set network.$wanselect2.proto=pppoe
|
||||
}
|
||||
|
||||
if [ "$oldframe" -eq 0 ]; then
|
||||
[ "$wanselect2" != "$(echo $(uci get syncdial.config.devbackup)| cut -d " " -f1)" ] && \
|
||||
[ "$wanselect2" != "$(echo $(uci get syncdial.config.devbackup)| cut -d " " -f2)" ] && \
|
||||
[ "$nomwan" -ne 1 ] && mwan_cfg_del $wanselect2
|
||||
else
|
||||
[ "$nomwan" -ne 1 ] && mwan_cfg_del $wanselect2
|
||||
fi
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[ -z "$norun" ] && uci set syncdial.config.devbackup="$origfirewall" && uci commit syncdial
|
||||
general_config_remove
|
||||
general_config_load
|
||||
|
||||
uci set network.$wanselect.metric=40
|
||||
if [ "$wannum" -gt 0 ]; then
|
||||
[ "$old_frame" -eq 1 ] && {
|
||||
uci set network.$wanselect.proto=none
|
||||
device=$(uci get network.$wanselect.device)
|
||||
for i in $(seq 1 $wannum)
|
||||
do
|
||||
ip link add link $device name macvlan$i type macvlan
|
||||
ifconfig macvlan$i hw ether $(echo $(cat /sys/class/net/$device/address|awk -F ":" '{print $1":"$2":"$3":"$4":"$5":" }')$(echo "" | awk -F ":" '{printf("%X\n", 16+i);}' i=$i))
|
||||
ifconfig macvlan$i up
|
||||
done
|
||||
}
|
||||
[ "$wanselect" != "$(echo $(uci get syncdial.config.devbackup)| cut -d " " -f1)" ] && \
|
||||
[ "$wanselect" != "$(echo $(uci get syncdial.config.devbackup)| cut -d " " -f2)" ] && \
|
||||
[ "$old_frame" -eq 0 -a "$nomwan" -ne 1 ] && mwan_cfg_add $wanselect
|
||||
|
||||
|
||||
for i in $(seq 1 $wannum)
|
||||
do
|
||||
[ "$old_frame" -eq 0 ] && macvlan_dev_add macvlan$i $pppoe_device
|
||||
if [ "$bindwan" != "" -a "$bindwan" == "1" ]; then
|
||||
pppoe_if_add vwan$i $((40+$i)) $pppoe_device $pppoe_user $pppoe_password
|
||||
else
|
||||
pppoe_if_add vwan$i $((40+$i)) macvlan$i $pppoe_user $pppoe_password
|
||||
fi
|
||||
[ "$nomwan" -ne 1 ] && mwan_cfg_add vwan$i $((40+$i))
|
||||
done
|
||||
else
|
||||
[ "$nomwan" -ne 1 ] && mwan_cfg_add $wanselect
|
||||
fi
|
||||
|
||||
###dualdial configuration
|
||||
[ "$nomwan" -ne 1 ] && [ -z "$(uci get mwan3.ipv6_default_rule)" ] && {
|
||||
uci set mwan3.ipv6_default_rule=rule
|
||||
uci set mwan3.ipv6_default_rule.dest_ip='::/0'
|
||||
uci set mwan3.ipv6_default_rule.proto='all'
|
||||
uci set mwan3.ipv6_default_rule.sticky='0'
|
||||
uci set mwan3.ipv6_default_rule.use_policy='balanced'
|
||||
}
|
||||
[ "$(uci -q get syncdial.config.dial_type)" = "2" ] && {
|
||||
|
||||
uci set network.$wanselect2.metric=60
|
||||
if [ "$wannum2" -gt 0 ]; then
|
||||
[ "$old_frame" -eq 1 ] && {
|
||||
uci set network.$wanselect2.proto=none
|
||||
device2=$(uci get network.$wanselect2.device)
|
||||
for i in $(seq 1 $wannum2)
|
||||
do
|
||||
ip link add link $device2 name macvlan$(($wannum+$i)) type macvlan
|
||||
ifconfig macvlan$(($wannum+$i)) hw ether $(echo $(cat /sys/class/net/$device2/address|awk -F ":" '{print $1":"$2":"$3":"$4":"$5":" }')$(echo "" | awk -F ":" '{printf("%X\n", 16+i);}' i=$i))
|
||||
ifconfig macvlan$(($wannum+$i)) up
|
||||
done
|
||||
}
|
||||
[ "$wanselect2" != "$(echo $(uci get syncdial.config.devbackup)| cut -d " " -f1)" ] && \
|
||||
[ "$wanselect2" != "$(echo $(uci get syncdial.config.devbackup)| cut -d " " -f2)" ] && \
|
||||
[ "$old_frame" -eq 0 -a "$nomwan" -ne 1 ] && mwan_cfg_add $wanselect2
|
||||
|
||||
|
||||
for i in $(seq 1 $wannum2)
|
||||
do
|
||||
[ "$old_frame" -eq 0 ] && macvlan_dev_add macvlan$(($wannum+$i)) $pppoe_device2
|
||||
if [ "$bindwan2" != "" -a "$bindwan2" == "1" ]; then
|
||||
pppoe_if_add vwan$(($wannum+$i)) $((60+$i)) $pppoe_device2 $pppoe_user2 $pppoe_password2
|
||||
else
|
||||
pppoe_if_add vwan$(($wannum+$i)) $((60+$i)) macvlan$(($wannum+$i)) $pppoe_user2 $pppoe_password2
|
||||
fi
|
||||
[ "$nomwan" -ne 1 ] && mwan_cfg_add vwan$(($wannum+$i)) $((60+$i))
|
||||
done
|
||||
else
|
||||
[ "$nomwan" -ne 1 ] && mwan_cfg_add $wanselect2
|
||||
fi
|
||||
}
|
||||
|
||||
orig_firewall_add
|
||||
apply_cfg
|
||||
|
||||
return 0
|
||||
Executable
+63
@@ -0,0 +1,63 @@
|
||||
#!/bin/sh
|
||||
#PPPoE拨号在线接口数检测及重拨脚本
|
||||
. /lib/functions.sh
|
||||
[ -f /etc/config/syncdial ] || {
|
||||
return 1
|
||||
}
|
||||
#操作配置
|
||||
#参数 $1 配置项
|
||||
ifs_opt_down() {
|
||||
local ifn=$1
|
||||
local ifprefix=${ifn:0:4}
|
||||
|
||||
[ "$ifprefix" = "vwan" ] || return
|
||||
ifdown $ifn
|
||||
}
|
||||
|
||||
ifs_opt_up() {
|
||||
local ifn=$1
|
||||
local ifprefix=${ifn:0:4}
|
||||
|
||||
[ "$ifprefix" = "vwan" ] || return
|
||||
ifup $ifn
|
||||
}
|
||||
|
||||
config_load "syncdial"
|
||||
config_get_bool dialchk config dialchk 0
|
||||
config_get dial config dialnum
|
||||
config_get dialwait config dialwait 20
|
||||
config_get enabled config enabled 0
|
||||
[ "$enabled" = "0" ] && {
|
||||
echo "syncdial disabled."
|
||||
return 0
|
||||
}
|
||||
[ "$dialchk" = "0" ] && {
|
||||
echo "dial check disabled."
|
||||
return 0
|
||||
}
|
||||
[ $(ps | grep -c "pppconnectcheck") -gt 3 ] && logger -t PPPoE-IFChecker "Another checker is running.exit." && return 1
|
||||
|
||||
PPPUPNUM=$(ifconfig | grep -c vwan)
|
||||
logger -t PPPoE-IFChecker "$PPPUPNUM interfaces are online."
|
||||
if [ ! "$PPPUPNUM" -lt $dial ]; then
|
||||
interval="$(uci get mwan3.wan.failure_interval)"
|
||||
cheng="$(uci get mwan3.wan.up)"
|
||||
[ -z "$interval" ] && interval=5
|
||||
[ -z "$cheng" ] && cheng=1
|
||||
sleep $((interval*cheng+1))
|
||||
PPPUPNUM=$(mwan3 interfaces | grep -c "is online")
|
||||
[ "$PPPUPNUM" == "0" ] && (pgrep mwan3track || (logger -t PPPoE-IFChecker "mwan3track not running" ; return 1))
|
||||
[ ! "$PPPUPNUM" -lt $dial ] && logger -t PPPoE-IFChecker "Nothing to do.Exit." && return 0
|
||||
fi
|
||||
logger -t PPPoE-IFChecker "Stop interfaces."
|
||||
ifdown wan
|
||||
config_load "network"
|
||||
config_foreach ifs_opt_down "interface"
|
||||
sleep $dialwait
|
||||
logger -t PPPoE-IFChecker "Start interfaces."
|
||||
config_foreach ifs_opt_up "interface"
|
||||
ifup wan
|
||||
logger -t PPPoE-IFChecker "Interfaces restarted."
|
||||
logger -t PPPoE-IFChecker "Another checker will be started 15s later."
|
||||
sleep 15 && pppconnectcheck &
|
||||
return 0
|
||||
@@ -0,0 +1,19 @@
|
||||
|
||||
config syncdial 'config'
|
||||
option syncon '1'
|
||||
option dialwait '25'
|
||||
option dialchk '1'
|
||||
option nomwan '0'
|
||||
option wanselect 'wan'
|
||||
option dial_type '2'
|
||||
option wannum '3'
|
||||
option wanselect2 'wan2'
|
||||
option wannum2 '2'
|
||||
option dialnum '3'
|
||||
option dialnum2 '2'
|
||||
option old_frame '1'
|
||||
option devbackup 'wan wan6 wan2'
|
||||
option bindwan '0'
|
||||
option bindwan2 '0'
|
||||
option enabled '0'
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
[ "$ACTION" = "ifdown" ] && pppconnectcheck &
|
||||
|
||||
wanselect=$(uci get syncdial.config.wanselect)
|
||||
[ "$(uci get syncdial.config.dial_type)" = "2" ] && {
|
||||
wanselect2=$(uci get syncdial.config.wanselect2)
|
||||
}
|
||||
|
||||
[ "$(uci get syncdial.config.enabled)" = "1" ] && \
|
||||
[ "$(uci get syncdial.config.old_frame)" = "1" ] && \
|
||||
[ "$DEVICE" = "$(uci get network.$wanselect.device)" ] && \
|
||||
[ "$ACTION" = "ifup" ] && {
|
||||
device=$(uci get network.$wanselect.device)
|
||||
wannum=$(uci get syncdial.config.wannum)
|
||||
for i in $(seq 1 $wannum)
|
||||
do
|
||||
[ -d /sys/class/net/macvlan$i ] || {
|
||||
ip link add link $device name macvlan$i type macvlan
|
||||
ifconfig macvlan$i hw ether $(echo $(cat /sys/class/net/$device/address|awk -F ":" '{print $1":"$2":"$3":"$4":"$5":" }')$(echo "" | awk -F ":" '{printf("%X\n", 16+i);}' i=$i))
|
||||
ifconfig macvlan$i up
|
||||
}
|
||||
done
|
||||
|
||||
[ "$(uci get syncdial.config.dial_type)" = "2" ] && {
|
||||
device2=$(uci get network.$wanselect2.device)
|
||||
wannum2=$(uci get syncdial.config.wannum2)
|
||||
for i in $(seq 1 $wannum2)
|
||||
do
|
||||
[ -d /sys/class/net/macvlan$(($wannum+$i)) ] || {
|
||||
ip link add link $device2 name macvlan$(($wannum+$i)) type macvlan
|
||||
ifconfig macvlan$(($wannum+$i)) hw ether $(echo $(cat /sys/class/net/$device2/address|awk -F ":" '{print $1":"$2":"$3":"$4":"$5":" }')$(echo "" | awk -F ":" '{printf("%X\n", 16+i);}' i=$i))
|
||||
ifconfig macvlan$(($wannum+$i)) up
|
||||
}
|
||||
done
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
[ "$(uci get syncdial.config.enabled)" = "1" ] && \
|
||||
[ "$(uci get syncdial.config.old_frame)" = "1" ] && \
|
||||
[ "$DEVICE" = "$(uci get network.wan.device)" ] && \
|
||||
[ "$ACTION" = "ifup" ] && {
|
||||
device=$(uci get network.wan.device)
|
||||
wannum=$(uci get syncdial.config.wannum)
|
||||
for i in $(seq 1 $wannum)
|
||||
do
|
||||
[ -d /sys/class/net/macvlan$i ] || {
|
||||
ip link add link $device name macvlan$i type macvlan
|
||||
ifconfig macvlan$i hw ether $(echo $(cat /sys/class/net/$device/address|awk -F ":" '{print $1":"$2":"$3":"$4":"$5":" }')$(echo "" | awk -F ":" '{printf("%X\n", 16+i);}' i=$i))
|
||||
ifconfig macvlan$i up
|
||||
}
|
||||
done
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
#!/bin/sh
|
||||
[ ! -f "/usr/share/ucitrack/luci-app-syncdial.json" ] && {
|
||||
cat > /usr/share/ucitrack/luci-app-syncdial.json << EEOF
|
||||
{
|
||||
"config": "syncdial",
|
||||
"init": "syncdial"
|
||||
}
|
||||
EEOF
|
||||
}
|
||||
touch /etc/config/syncdial
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@syncdial[-1]
|
||||
add ucitrack syncdial
|
||||
set ucitrack.@syncdial[-1].exec='/bin/genwancfg'
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
rm -f /tmp/luci-indexcache
|
||||
exit 0
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"luci-app-syncdial": {
|
||||
"description": "Grant UCI access for luci-app-syncdial",
|
||||
"read": {
|
||||
"uci": [ "syncdial" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "syncdial" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user