diff --git a/net/mwan3-luci/Makefile b/net/mwan3-luci/Makefile index 465363326..25ae76763 100644 --- a/net/mwan3-luci/Makefile +++ b/net/mwan3-luci/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-mwan3 PKG_VERSION:=1.3 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_MAINTAINER:=Aedan Renner PKG_LICENSE:=GPLv2 @@ -20,14 +20,15 @@ define Package/luci-app-mwan3 CATEGORY:=LuCI SUBMENU:=3. Applications TITLE:=LuCI support for the MWAN3 multiwan hotplug script - DEPENDS:=+mwan3 + DEPENDS:=+mwan3 +luci-mod-admin-full +luci-lib-nixio PKGARCH:=all MAINTAINER:=Aedan Renner endef define Package/luci-app-mwan3/description -Hotplug script which makes configuration of multiple WAN interfaces simple and manageable -With loadbalancing/failover support for up to 250 WAN interfaces, connection tracking and an easy to manage traffic ruleset +Hotplug script which makes configuration of multiple WAN interfaces simple and +manageable with loadbalancing/failover support for up to 250 physical or logical +WAN interfaces, connection tracking and an easy to manage traffic ruleset endef define Build/Compile diff --git a/net/mwan3-luci/files/etc/hotplug.d/iface/16-mwan3custombak b/net/mwan3-luci/files/etc/hotplug.d/iface/16-mwan3custombak old mode 100644 new mode 100755 index 9bd0beeff..954d1ad86 --- a/net/mwan3-luci/files/etc/hotplug.d/iface/16-mwan3custombak +++ b/net/mwan3-luci/files/etc/hotplug.d/iface/16-mwan3custombak @@ -1,22 +1,21 @@ #!/bin/sh # to enable this script uncomment the case loop at the bottom -# to report MWAN3 status on interface up/down events modify the lines in the send_reportdata function +# to report mwan3 status on interface hotplug ifup/ifdown events modify the lines in the send_alert function send_alert() { - # $1 stores the mwan3 status information - # insert your code here to send the contents of $1 - echo "$1" + # variable "$1" stores the mwan3 status information + # insert your code here to send the contents of "$1" } gather_event_info() { # create event information message - local EVENT_INFO="Interface [ "$INTERFACE" ($DEVICE) ] on router [ "$(uci get -p /var/state system.@system[0].hostname)" ] has triggered an [ "$ACTION" ] hotplug event on "$(date)"" + local EVENT_INFO="Interface [ "$INTERFACE" ($DEVICE) ] on router [ "$(uci get -p /var/state system.@system[0].hostname)" ] has triggered a hotplug [ "$ACTION" ] event on "$(date +"%a %b %d %Y %T %Z")"" # get current interface, policy and rule status - local CURRENT_STATUS="$(mwan3 status)" + local CURRENT_STATUS="$(/usr/sbin/mwan3 status)" # get last 50 mwan3 systemlog messages local MWAN3_LOG="$(echo -e "Last 50 MWAN3 systemlog entries. Newest entries sorted at the top:\n$(logread | grep mwan3 | tail -n 50 | sed 'x;1!H;$!d;x')")" diff --git a/net/mwan3-luci/files/etc/uci-defaults/mwan3 b/net/mwan3-luci/files/etc/uci-defaults/mwan3 deleted file mode 100755 index a19d4cb25..000000000 --- a/net/mwan3-luci/files/etc/uci-defaults/mwan3 +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -# delete existing mwan3 ucitrack entry and add new entry -uci -q batch <<-EOF >/dev/null - del ucitrack.@mwan3[-1] - add ucitrack mwan3 - set ucitrack.@mwan3[-1].exec="/etc/init.d/mwan3 restart" - commit ucitrack -EOF - -# make controller file addition take effect without system restart -rm -rf /tmp/luci-indexcache /tmp/luci-modulecache - -exit 0 diff --git a/net/mwan3-luci/files/etc/uci-defaults/mwan3-luci b/net/mwan3-luci/files/etc/uci-defaults/mwan3-luci new file mode 100755 index 000000000..2b74d63b5 --- /dev/null +++ b/net/mwan3-luci/files/etc/uci-defaults/mwan3-luci @@ -0,0 +1,14 @@ +#!/bin/sh + +# replace existing mwan3-luci ucitrack entry +uci -q batch <<-EOF >/dev/null + del ucitrack.@mwan3[-1] + add ucitrack mwan3 + set ucitrack.@mwan3[-1].exec="/usr/sbin/mwan3 restart" + commit ucitrack +EOF + +# remove LuCI cache +rm -rf /tmp/luci-indexcache /tmp/luci-modulecache + +exit 0 diff --git a/net/mwan3-luci/files/usr/lib/lua/luci/controller/mwan3.lua b/net/mwan3-luci/files/usr/lib/lua/luci/controller/mwan3.lua index 13ff0902e..33dbcf44a 100644 --- a/net/mwan3-luci/files/usr/lib/lua/luci/controller/mwan3.lua +++ b/net/mwan3-luci/files/usr/lib/lua/luci/controller/mwan3.lua @@ -168,7 +168,7 @@ function mwan3_diag_data(iface, tool, alt) local ifdev = ut.trim(sys.exec("uci get -p /var/state network." .. iface .. ".ifname")) if ifdev ~= "" then if tool == "ping" then - local gateway = ut.trim(sys.exec("route -n | awk -F' ' '{ if ($8 == \"" .. ifdev .. "\" && $1 == \"0.0.0.0\") print $2 }'")) + local gateway = ut.trim(sys.exec("route -n | awk '{ if ($8 == \"" .. ifdev .. "\" && $1 == \"0.0.0.0\" && $3 == \"0.0.0.0\") print $2 }'")) if gateway ~= "" then if alt == "gateway" then local cmd = "ping -c 3 -W 2 -I " .. ifdev .. " " .. gateway @@ -247,17 +247,17 @@ function mwan3_tshoot_data() else lucirelease = "\nLuCI - unknown" end - local mwan3version = ut.trim(sys.exec("opkg info mwan3 | grep Version | awk -F' ' '{ print $2 }'")) + local mwan3version = ut.trim(sys.exec("opkg info mwan3 | grep Version | awk '{ print $2 }'")) if mwan3version ~= "" then mwan3version = "\n\nmwan3 - " .. mwan3version else mwan3version = "\nmwan3 - unknown" end - local mwan3lversion = ut.trim(sys.exec("opkg info luci-app-mwan3 | grep Version | awk -F' ' '{ print $2 }'")) + local mwan3lversion = ut.trim(sys.exec("opkg info luci-app-mwan3 | grep Version | awk '{ print $2 }'")) if mwan3lversion ~= "" then - mwan3lversion = "\nluci-app-mwan3 - " .. mwan3lversion + mwan3lversion = "\nmwan3-luci - " .. mwan3lversion else - mwan3lversion = "\nluci-app-mwan3 - unknown" + mwan3lversion = "\nmwan3-luci - unknown" end local softrev = wrtrelease .. lucirelease .. mwan3version .. mwan3lversion rv.mw3ver = { } @@ -316,7 +316,7 @@ function mwan3_tshoot_data() rv.iprule[ipruleid[ipr]] = { rule = ipr } -- ip route list table 1-250 - local routelisting, rlstr = ut.trim(sys.exec("ip rule | sed 's/://g' | awk -F' ' '$1>=2001 && $1<=2250' | awk -F' ' '{ print $NF }'")), "" + local routelisting, rlstr = ut.trim(sys.exec("ip rule | sed 's/://g' | awk '$1>=2001 && $1<=2250' | awk '{ print $NF }'")), "" if routelisting ~= "" then for line in routelisting:gmatch("[^\r\n]+") do rlstr = rlstr .. line .. "\n" .. sys.exec("ip route list table " .. line) diff --git a/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_interface.lua b/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_interface.lua index 3d504a24f..101bcea9d 100644 --- a/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_interface.lua +++ b/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_interface.lua @@ -30,7 +30,7 @@ function iface_check() -- find issues with too many interfaces, reliability and err_netcfg_list = err_netcfg_list .. ifname .. " " err_route_list = err_route_list .. ifname .. " " else - local rtcheck = ut.trim(sys.exec("route -n | awk -F' ' '{ if ($8 == \"" .. ifdev .. "\" && $1 == \"0.0.0.0\") print $1 }'")) + local rtcheck = ut.trim(sys.exec("route -n | awk '{ if ($8 == \"" .. ifdev .. "\" && $1 == \"0.0.0.0\" && $3 == \"0.0.0.0\") print $1 }'")) if rtcheck == "" then err_found = 1 err_route_list = err_route_list .. ifname .. " " @@ -44,12 +44,12 @@ function iface_check() -- find issues with too many interfaces, reliability and end ) -- check if any interfaces have duplicate metrics - local metric_dupnums = sys.exec("echo '" .. metric_list .. "' | awk -F' ' '{ print $2 }' | uniq -d") + local metric_dupnums = sys.exec("echo '" .. metric_list .. "' | awk '{ print $2 }' | uniq -d") if metric_dupnums ~= "" then err_found = 1 local metric_dupes = "" for line in metric_dupnums:gmatch("[^\r\n]+") do - metric_dupes = sys.exec("echo '" .. metric_list .. "' | grep '" .. line .. "' | awk -F' ' '{ print $1 }'") + metric_dupes = sys.exec("echo '" .. metric_list .. "' | grep '" .. line .. "' | awk '{ print $1 }'") err_dupmet_list = err_dupmet_list .. metric_dupes end err_dupmet_list = sys.exec("echo '" .. err_dupmet_list .. "' | tr '\n' ' '") diff --git a/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_interfaceconfig.lua b/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_interfaceconfig.lua index 2119c048b..3da1e5349 100644 --- a/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_interfaceconfig.lua +++ b/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_interfaceconfig.lua @@ -12,9 +12,9 @@ function iface_check() end ) -- compare metric against list - local metric_dupnums, metric_dupes = sys.exec("echo '" .. metric_list .. "' | awk -F' ' '{ print $2 }' | uniq -d"), "" + local metric_dupnums, metric_dupes = sys.exec("echo '" .. metric_list .. "' | awk '{ print $2 }' | uniq -d"), "" for line in metric_dupnums:gmatch("[^\r\n]+") do - metric_dupes = sys.exec("echo '" .. metric_list .. "' | grep '" .. line .. "' | awk -F' ' '{ print $1 }'") + metric_dupes = sys.exec("echo '" .. metric_list .. "' | grep '" .. line .. "' | awk '{ print $1 }'") err_dupmet_list = err_dupmet_list .. metric_dupes end if sys.exec("echo '" .. err_dupmet_list .. "' | grep -w " .. arg[1]) ~= "" then @@ -36,7 +36,7 @@ function iface_check() err_netcfg = 1 err_route = 1 else - local rtcheck = ut.trim(sys.exec("route -n | awk -F' ' '{ if ($8 == \"" .. ifdev .. "\" && $1 == \"0.0.0.0\") print $1 }'")) + local rtcheck = ut.trim(sys.exec("route -n | awk '{ if ($8 == \"" .. ifdev .. "\" && $1 == \"0.0.0.0\" && $3 == \"0.0.0.0\") print $1 }'")) if rtcheck == "" then err_route = 1 end diff --git a/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_policy.lua b/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_policy.lua index 02471b992..ef09451fb 100644 --- a/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_policy.lua +++ b/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_policy.lua @@ -68,6 +68,19 @@ use_member = mwan_policy:option(DummyValue, "use_member", translate("Members ass end +last_resort = mwan_policy:option(DummyValue, "last_resort", translate("Last resort")) + last_resort.rawhtml = true + function last_resort.cfgvalue(self, s) + local str = self.map:get(s, "last_resort") + if str == "unreachable" or str == "" or str == null then + return "unreachable (reject)" + elseif str == "blackhole" then + return "blackhole (drop)" + elseif str == "main" then + return "main (use main routing table)" + end + end + errors = mwan_policy:option(DummyValue, "errors", translate("Errors")) errors.rawhtml = true function errors.cfgvalue(self, s) diff --git a/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_policyconfig.lua b/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_policyconfig.lua index a6523ad8e..dfd725337 100644 --- a/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_policyconfig.lua +++ b/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_policyconfig.lua @@ -45,6 +45,13 @@ mwan_policy = m5:section(NamedSection, arg[1], "policy", "") use_member = mwan_policy:option(DynamicList, "use_member", translate("Member used")) cbi_add_member(use_member) +last_resort = mwan_policy:option(ListValue, "last_resort", translate("Last resort"), + translate("When all policy members are offline use this behavior for matched traffic")) + last_resort.default = "unreachable" + last_resort:value("unreachable", translate("unreachable (reject)")) + last_resort:value("blackhole", translate("blackhole (drop)")) + last_resort:value("main", translate("main (use main routing table)")) + -- ------ currently configured members ------ -- diff --git a/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_ruleconfig.lua b/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_ruleconfig.lua index e83fa629f..21a01b863 100644 --- a/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_ruleconfig.lua +++ b/net/mwan3-luci/files/usr/lib/lua/luci/model/cbi/mwan3/mwan3_ruleconfig.lua @@ -28,7 +28,7 @@ function cbi_add_policy(field) end function cbi_add_protocol(field) - local protos = ut.trim(sys.exec("cat /etc/protocols | grep ' # ' | awk -F' ' '{print $1}' | grep -vw -e 'ip' -e 'tcp' -e 'udp' -e 'icmp' -e 'esp' | grep -v 'ipv6' | sort | tr '\n' ' '")) + local protos = ut.trim(sys.exec("cat /etc/protocols | grep ' # ' | awk '{print $1}' | grep -vw -e 'ip' -e 'tcp' -e 'udp' -e 'icmp' -e 'esp' | grep -v 'ipv6' | sort | tr '\n' ' '")) for p in string.gmatch(protos, "%S+") do field:value(p) end diff --git a/net/mwan3-luci/files/usr/lib/lua/luci/view/mwan3/mwan3_adv_diagnostics.htm b/net/mwan3-luci/files/usr/lib/lua/luci/view/mwan3/mwan3_adv_diagnostics.htm index 6d9abcbed..f0ceb1261 100644 --- a/net/mwan3-luci/files/usr/lib/lua/luci/view/mwan3/mwan3_adv_diagnostics.htm +++ b/net/mwan3-luci/files/usr/lib/lua/luci/view/mwan3/mwan3_adv_diagnostics.htm @@ -57,10 +57,7 @@ { var temp = ''; var ncint = 'No diagnostic results returned'; - temp = String.format( - '
%s
', - ncint - ); + temp = String.format('
%s
', ncint); output.innerHTML = temp; } } diff --git a/net/mwan3-luci/files/usr/lib/lua/luci/view/mwan3/mwan3_adv_troubleshoot.htm b/net/mwan3-luci/files/usr/lib/lua/luci/view/mwan3/mwan3_adv_troubleshoot.htm index 1a92ebd02..7a27d6619 100644 --- a/net/mwan3-luci/files/usr/lib/lua/luci/view/mwan3/mwan3_adv_troubleshoot.htm +++ b/net/mwan3-luci/files/usr/lib/lua/luci/view/mwan3/mwan3_adv_troubleshoot.htm @@ -29,7 +29,7 @@ temp = String.format( '
%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s
', - mwanvers, st.mw3ver[0].mwan3v, mwan3cnfg, st.mwan3config[0].mwn3cfg, netcnfg, st.netconfig[0].netcfg, ifcnfg, st.ifconfig[0].ifcfg, iproute, st.rtshow[0].iprtshow, iprulesh, st.iprule[0].rule, routelisttbl, st.routelist[0].iprtlist, firewalldef, st.fidef[0].firedef, iptable, st.iptables[0].iptbls + mwanvers, st.mw3ver[0].mwan3v, mwan3cnfg, st.mwan3config[0].mwn3cfg, netcnfg, st.netconfig[0].netcfg, ifcnfg, st.ifconfig[0].ifcfg, iproute, st.rtshow[0].iprtshow, iprulesh, st.iprule[0].rule, routelisttbl, st.routelist[0].iprtlist, firewalldef, st.fidef[0].firedef, iptable, st.iptables[0].iptbls ); tx.innerHTML = temp; } @@ -37,10 +37,7 @@ { var temp = ''; var terror = 'Error collecting troubleshooting information'; - temp = String.format( - '%s', - terror - ); + temp = String.format('%s', terror); tx.innerHTML = temp; } } @@ -53,6 +50,7 @@
<%:Loading%> Collecting data...
+