return
end
- entry({"admin", "network", "mwan"},
- alias("admin", "network", "mwan", "overview"),
+ entry({"admin", "status", "mwan"},
+ alias("admin", "status", "mwan", "overview"),
_("Load Balancing"), 600)
- entry({"admin", "network", "mwan", "overview"},
- alias("admin", "network", "mwan", "overview", "overview_interface"),
- _("Overview"), 10)
- entry({"admin", "network", "mwan", "overview", "overview_interface"},
- template("mwan/overview_interface"))
- entry({"admin", "network", "mwan", "overview", "interface_status"},
+ entry({"admin", "status", "mwan", "overview"},
+ template("mwan/status_interface"))
+ entry({"admin", "status", "mwan", "detail"},
+ template("mwan/status_detail"))
+ entry({"admin", "status", "mwan", "diagnostics"},
+ template("mwan/status_diagnostics"))
+ entry({"admin", "status", "mwan", "troubleshooting"},
+ template("mwan/status_troubleshooting"))
+ entry({"admin", "status", "mwan", "interface_status"},
call("interfaceStatus"))
- entry({"admin", "network", "mwan", "overview", "overview_detailed"},
- template("mwan/overview_detailed"))
- entry({"admin", "network", "mwan", "overview", "detailed_status"},
+ entry({"admin", "status", "mwan", "detailed_status"},
call("detailedStatus"))
+ entry({"admin", "status", "mwan", "diagnostics_display"},
+ call("diagnosticsData"), nil).leaf = true
+ entry({"admin", "status", "mwan", "troubleshooting_display"},
+ call("troubleshootingData"))
+
+
+ entry({"admin", "network", "mwan"},
+ alias("admin", "network", "mwan", "interface"),
+ _("Load Balancing"), 600)
- entry({"admin", "network", "mwan", "configuration"},
- alias("admin", "network", "mwan", "configuration", "interface"),
- _("Configuration"), 20)
- entry({"admin", "network", "mwan", "configuration", "globals"},
- cbi("mwan/globalsconfig"),_("Globals"), 5).leaf = true
- entry({"admin", "network", "mwan", "configuration", "interface"},
+ entry({"admin", "network", "mwan", "globals"},
+ cbi("mwan/globalsconfig"),
+ _("Globals"), 5).leaf = true
+ entry({"admin", "network", "mwan", "interface"},
arcombine(cbi("mwan/interface"), cbi("mwan/interfaceconfig")),
_("Interfaces"), 10).leaf = true
- entry({"admin", "network", "mwan", "configuration", "member"},
+ entry({"admin", "network", "mwan", "member"},
arcombine(cbi("mwan/member"), cbi("mwan/memberconfig")),
_("Members"), 20).leaf = true
- entry({"admin", "network", "mwan", "configuration", "policy"},
+ entry({"admin", "network", "mwan", "policy"},
arcombine(cbi("mwan/policy"), cbi("mwan/policyconfig")),
_("Policies"), 30).leaf = true
- entry({"admin", "network", "mwan", "configuration", "rule"},
+ entry({"admin", "network", "mwan", "rule"},
arcombine(cbi("mwan/rule"), cbi("mwan/ruleconfig")),
_("Rules"), 40).leaf = true
-
- entry({"admin", "network", "mwan", "advanced"},
- alias("admin", "network", "mwan", "advanced", "hotplugscript"),
- _("Advanced"), 100)
- entry({"admin", "network", "mwan", "advanced", "hotplugscript"},
- form("mwan/advanced_hotplugscript"))
- entry({"admin", "network", "mwan", "advanced", "mwanconfig"},
- form("mwan/advanced_mwanconfig"))
- entry({"admin", "network", "mwan", "advanced", "networkconfig"},
- form("mwan/advanced_networkconfig"))
- entry({"admin", "network", "mwan", "advanced", "wirelessconfig"},
- form("mwan/advanced_wirelessconfig"))
- entry({"admin", "network", "mwan", "advanced", "diagnostics"},
- template("mwan/advanced_diagnostics"))
- entry({"admin", "network", "mwan", "advanced", "diagnostics_display"},
- call("diagnosticsData"), nil).leaf = true
- entry({"admin", "network", "mwan", "advanced", "troubleshooting"},
- template("mwan/advanced_troubleshooting"))
- entry({"admin", "network", "mwan", "advanced", "troubleshooting_display"},
- call("troubleshootingData"))
+ entry({"admin", "network", "mwan", "notify"},
+ cbi("mwan/notify"),
+ _("Notification"), 50).leaf = true
end
function getInterfaceStatus(ruleNumber, interfaceName)
+++ /dev/null
--- ------ hotplug script configuration ------ --
-
-fs = require "nixio.fs"
-ut = require "luci.util"
-
-script = "/etc/mwan3.user"
-
-m5 = SimpleForm("luci", nil)
- m5:append(Template("mwan/advanced_hotplugscript")) -- highlight current tab
-
-f = m5:section(SimpleSection, nil,
- translate("This section allows you to modify the content of \"/etc/mwan3.user\".<br />" ..
- "The file is also preserved during sysupgrade.<br />" ..
- "<br />" ..
- "Notes:<br />" ..
- "This file is interpreted as a shell script.<br />" ..
- "The first line of the script must be "#!/bin/sh" without quotes.<br />" ..
- "Lines beginning with # are comments and are not executed.<br />" ..
- "Put your custom mwan3 action here, they will<br />" ..
- "be executed with each netifd hotplug interface event<br />" ..
- "on interfaces for which mwan3 is enabled.<br />" ..
- "<br />" ..
- "There are three main environment variables that are passed to this script.<br />" ..
- "<br />" ..
- "$ACTION Either \"ifup\" or \"ifdown\"<br />" ..
- "$INTERFACE Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")<br />" ..
- "$DEVICE Physical device name which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br />" ..
- "<br />"))
-
-t = f:option(TextValue, "lines")
- t.rmempty = true
- t.rows = 20
- function t.cfgvalue()
- return fs.readfile(script)
- end
- function t.write(self, section, data) -- format and write new data to script
- return fs.writefile(script, ut.trim(data:gsub("\r\n", "\n")) .. "\n")
- end
-
-return m5
+++ /dev/null
--- ------ mwan configuration ------ --
-
-ut = require "luci.util"
-
-mwanConfig = "/etc/config/mwan3"
-
-
-m5 = SimpleForm("luci", nil)
- m5:append(Template("mwan/advanced_mwanconfig")) -- highlight current tab
-
-
-f = m5:section(SimpleSection, nil,
- translate("This section allows you to modify the contents of /etc/config/mwan3"))
-
-t = f:option(TextValue, "lines")
- t.rmempty = true
- t.rows = 20
-
- function t.cfgvalue()
- return nixio.fs.readfile(mwanConfig) or ""
- end
-
- function t.write(self, section, data) -- format and write new data to script
- return nixio.fs.writefile(mwanConfig, "\n" .. ut.trim(data:gsub("\r\n", "\n")) .. "\n")
- end
-
- function f.handle(self, state, data)
- return true
- end
-
-
-return m5
+++ /dev/null
--- ------ network configuration ------ --
-
-ut = require "luci.util"
-
-networkConfig = "/etc/config/network"
-
-
-m5 = SimpleForm("networkconf", nil)
- m5:append(Template("mwan/advanced_networkconfig")) -- highlight current tab
-
-
-f = m5:section(SimpleSection, nil,
- translate("This section allows you to modify the contents of /etc/config/network"))
-
-t = f:option(TextValue, "lines")
- t.rmempty = true
- t.rows = 20
-
- function t.cfgvalue()
- return nixio.fs.readfile(networkConfig) or ""
- end
-
- function t.write(self, section, data) -- format and write new data to script
- return nixio.fs.writefile(networkConfig, "\n" .. ut.trim(data:gsub("\r\n", "\n")) .. "\n")
- end
-
- function f.handle(self, state, data)
- return true
- end
-
-
-return m5
+++ /dev/null
--- ------ wireless configuration ------ --
-
-ut = require "luci.util"
-
-wirelessConfig = "/etc/config/wireless"
-
-
-m5 = SimpleForm("wirelessconf", nil)
- m5:append(Template("mwan/advanced_wirelessconfig")) -- highlight current tab
-
-
-f = m5:section(SimpleSection, nil,
- translate("This section allows you to modify the contents of /etc/config/wireless"))
-
-t = f:option(TextValue, "lines")
- t.rmempty = true
- t.rows = 20
-
- function t.cfgvalue()
- return nixio.fs.readfile(wirelessConfig) or ""
- end
-
- function t.write(self, section, data) -- format and write new data to script
- return nixio.fs.writefile(wirelessConfig, "\n" .. ut.trim(data:gsub("\r\n", "\n")) .. "\n")
- end
-
- function f.handle(self, state, data)
- return true
- end
-
-
-return m5
mwan_interface.sectionhead = translate("Interface")
mwan_interface.sortable = false
mwan_interface.template = "cbi/tblsection"
- mwan_interface.extedit = dsp.build_url("admin", "network", "mwan", "configuration", "interface", "%s")
+ mwan_interface.extedit = dsp.build_url("admin", "network", "mwan", "interface", "%s")
function mwan_interface.create(self, section)
TypedSection.create(self, section)
m5.uci:save("mwan3")
- luci.http.redirect(dsp.build_url("admin", "network", "mwan", "configuration", "interface", section))
+ luci.http.redirect(dsp.build_url("admin", "network", "mwan", "interface", section))
end
m5 = Map("mwan3", translatef("MWAN Interface Configuration - %s", arg[1]),
interfaceWarnings())
- m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "interface")
+ m5.redirect = dsp.build_url("admin", "network", "mwan", "interface")
mwan_interface = m5:section(NamedSection, arg[1], "interface", "")
mwan_member.sectionhead = translate("Member")
mwan_member.sortable = true
mwan_member.template = "cbi/tblsection"
- mwan_member.extedit = ds.build_url("admin", "network", "mwan", "configuration", "member", "%s")
+ mwan_member.extedit = ds.build_url("admin", "network", "mwan", "member", "%s")
function mwan_member.create(self, section)
TypedSection.create(self, section)
m5.uci:save("mwan3")
- luci.http.redirect(ds.build_url("admin", "network", "mwan", "configuration", "member", section))
+ luci.http.redirect(ds.build_url("admin", "network", "mwan", "member", section))
end
m5 = Map("mwan3", translatef("MWAN Member Configuration - %s", arg[1]))
- m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "member")
+ m5.redirect = dsp.build_url("admin", "network", "mwan", "member")
mwan_member = m5:section(NamedSection, arg[1], "member", "")
--- /dev/null
+-- ------ hotplug script configuration ------ --
+
+local fs = require "nixio.fs"
+local ut = require "luci.util"
+script = "/etc/mwan3.user"
+
+m5 = SimpleForm("luci", nil)
+
+f = m5:section(SimpleSection, translate("MWAN Notification"),
+ translate("This section allows you to modify the content of \"/etc/mwan3.user\".<br />" ..
+ "The file is also preserved during sysupgrade.<br />" ..
+ "<br />" ..
+ "Notes:<br />" ..
+ "This file is interpreted as a shell script.<br />" ..
+ "The first line of the script must be "#!/bin/sh" without quotes.<br />" ..
+ "Lines beginning with # are comments and are not executed.<br />" ..
+ "Put your custom mwan3 action here, they will<br />" ..
+ "be executed with each netifd hotplug interface event<br />" ..
+ "on interfaces for which mwan3 is enabled.<br />" ..
+ "<br />" ..
+ "There are three main environment variables that are passed to this script.<br />" ..
+ "<br />" ..
+ "$ACTION Either \"ifup\" or \"ifdown\"<br />" ..
+ "$INTERFACE Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")<br />" ..
+ "$DEVICE Physical device name which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br />" ..
+ "<br />"))
+
+t = f:option(TextValue, "lines")
+t.rmempty = true
+t.rows = 20
+function t.cfgvalue()
+ return fs.readfile(script)
+end
+function t.write(self, section, data)
+ return fs.writefile(script, ut.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+return m5
mwan_policy.sectionhead = translate("Policy")
mwan_policy.sortable = true
mwan_policy.template = "cbi/tblsection"
- mwan_policy.extedit = ds.build_url("admin", "network", "mwan", "configuration", "policy", "%s")
+ mwan_policy.extedit = ds.build_url("admin", "network", "mwan", "policy", "%s")
function mwan_policy.create(self, section)
TypedSection.create(self, section)
m5.uci:save("mwan3")
- luci.http.redirect(ds.build_url("admin", "network", "mwan", "configuration", "policy", section))
+ luci.http.redirect(ds.build_url("admin", "network", "mwan", "policy", section))
end
m5 = Map("mwan3", translatef("MWAN Policy Configuration - %s", arg[1]),
policyWarn())
- m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "policy")
+ m5.redirect = dsp.build_url("admin", "network", "mwan", "policy")
mwan_policy = m5:section(NamedSection, arg[1], "policy", "")
mwan_rule.sectionhead = translate("Rule")
mwan_rule.sortable = true
mwan_rule.template = "cbi/tblsection"
- mwan_rule.extedit = dsp.build_url("admin", "network", "mwan", "configuration", "rule", "%s")
+ mwan_rule.extedit = dsp.build_url("admin", "network", "mwan", "rule", "%s")
function mwan_rule.create(self, section)
TypedSection.create(self, section)
m5.uci:save("mwan3")
- luci.http.redirect(dsp.build_url("admin", "network", "mwan", "configuration", "rule", section))
+ luci.http.redirect(dsp.build_url("admin", "network", "mwan", "rule", section))
end
m5 = Map("mwan3", translatef("MWAN Rule Configuration - %s", arg[1]),
ruleWarn())
- m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "rule")
+ m5.redirect = dsp.build_url("admin", "network", "mwan", "rule")
mwan_rule = m5:section(NamedSection, arg[1], "rule", "")
+++ /dev/null
-<%+header%>
-
-<ul class="cbi-tabmenu">
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
- <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
-</ul>
-
-<%
- local uci = require "luci.model.uci"
-
- interfaceNames = ""
- uci.cursor():foreach("mwan3", "interface",
- function (section)
- interfaceNames = interfaceNames .. section[".name"] .. " "
- end
- )
-%>
-
-<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
-<script type="text/javascript">//<![CDATA[
- var stxhr = new XHR();
-
- function update_status(tool, task, task_name)
- {
- var iface = document.getElementById('mwaniface').value;
- var output = document.getElementById('diag_output');
-
- if (tool == "service")
- {
- output.innerHTML =
- '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="padding: 20px; vertical-align: middle;" /> ' +
- String.format("<%:Waiting for MWAN to %s...%>", task_name)
- ;
- }
- else
- {
- output.innerHTML =
- '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="padding: 20px; vertical-align: middle;" /> ' +
- "<%:Waiting for diagnostic results...%>"
- ;
- }
-
- output.parentNode.style.display = 'block';
- output.style.display = 'inline';
-
- stxhr.get('<%=luci.dispatcher.build_url("admin", "network", "mwan", "advanced")%>/diagnostics_display' + '/' + iface + '/' + tool + '/' + task, null,
- function(x, mArray)
- {
- if (mArray.diagnostics)
- {
- output.innerHTML = String.format('<pre id="diag_output_css">%h</pre>', mArray.diagnostics[0]);
- }
- else
- {
- output.innerHTML = '<pre id="diag_output_css"><strong><%:No diagnostic results returned%></strong></pre>';
- }
- }
- );
- }
-//]]></script>
-
-<div id="mwan_diagnostics" class="cbi-map">
- <fieldset id="diag_select" class="cbi-section">
- <legend><%:MWAN Interface Diagnostics%></legend>
- <select id="mwaniface">
- <% for z in interfaceNames:gmatch("[^ ]+") do -%><option value="<%=z%>"><%=z%></option><%- end %>
- </select>
- <div id="buttoncss">
- <input type="button" value="<%:Ping default gateway%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'gateway', null)" />
- <input type="button" value="<%:Ping tracking IP%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'track_ip', null)" />
- <input type="button" value="<%:Check IP rules%>" class="cbi-button cbi-button-apply" onclick="update_status('rulechk', null, null)" />
- <input type="button" value="<%:Check routing table%>" class="cbi-button cbi-button-apply" onclick="update_status('routechk', null, null)" />
- <input type="button" value="<%:Hotplug ifup%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifup', null)" />
- <input type="button" value="<%:Hotplug ifdown%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifdown', null)" />
- </div>
- </fieldset>
- <fieldset id="diag_select" class="cbi-section">
- <legend><%:MWAN Service Control%></legend>
- <div id="buttoncss">
- <input type="button" value="<%:Restart MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'restart', '<%:restart%>')" />
- <input type="button" value="<%:Stop MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'stop', '<%:stop%>')" />
- <input type="button" value="<%:Start MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'start', '<%:start%>')" />
- </div>
- </fieldset>
- <fieldset class="cbi-section" style="display:none">
- <legend><%:Diagnostic Results%></legend>
- <div id="diag_output"></div>
- </fieldset>
-</div>
-
-<style type="text/css">
- #mwaniface {
- float: left;
- margin: 8px 20px 0px 0px;
- }
- #buttoncss {
- display: table;
- float: left;
- text-align: left;
- }
- .cbi-button {
- margin: 8px 20px 0px 0px;
- min-width: 153px;
- }
- #diag_output_css {
- padding: 20px;
- text-align: left;
- }
-</style>
-
-<%+footer%>
+++ /dev/null
-<ul class="cbi-tabmenu">
- <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
-</ul>
-
-<style type="text/css">
- .cbi-section {
- padding: 20px;
- }
-</style>
+++ /dev/null
-<ul class="cbi-tabmenu">
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
- <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
-</ul>
-
-<style type="text/css">
- .cbi-section {
- padding: 20px;
- }
-</style>
+++ /dev/null
-<ul class="cbi-tabmenu">
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
- <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
-</ul>
-
-<style type="text/css">
- .cbi-section {
- padding: 20px;
- }
-</style>
+++ /dev/null
-<%+header%>
-
-<ul class="cbi-tabmenu">
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
- <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
-</ul>
-
-<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
-<script type="text/javascript">//<![CDATA[
- XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "advanced", "troubleshooting_display")%>', null,
- function(x, mArray)
- {
- var tshoot = document.getElementById('troubleshoot_text');
- if (mArray.versions)
- {
- var versions = '<span class="description">Software versions : </span><br /><br />';
- var mwanConfig = '<br /><br /><span class="description">Output of "cat /etc/config/mwan3" : </span><br /><br />';
- var netConfig = '<br /><br /><span class="description">Output of "cat /etc/config/network" : </span><br /><br />';
- var wifiConfig = '<br /><br /><span class="description">Output of "cat /etc/config/wireless" : </span><br /><br />';
- var ifconfig = '<br /><br /><span class="description">Output of "ifconfig" : </span><br /><br />';
- var ipRoute = '<br /><br /><span class="description">Output of "route -n" : </span><br /><br />';
- var ipRuleShow = '<br /><br /><span class="description">Output of "ip rule show" : </span><br /><br />';
- var routeListTable = '<br /><br /><span class="description">Output of "ip route list table 1-250" : </span><br /><br />';
- var firewallOut = '<br /><br /><span class="description">Firewall default output policy (must be ACCEPT) : </span><br /><br />';
- var iptables = '<br /><br /><span class="description">Output of "iptables -L -t mangle -v -n" : </span><br /><br />';
- tshoot.innerHTML = String.format(
- '<pre>%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s</pre>',
- versions, mArray.versions[0], mwanConfig, mArray.mwanconfig[0], netConfig, mArray.netconfig[0],
- wifiConfig, mArray.wificonfig[0], ifconfig, mArray.ifconfig[0], ipRoute, mArray.routeshow[0],
- ipRuleShow, mArray.iprule[0], routeListTable, mArray.routelist[0], firewallOut, mArray.firewallout[0],
- iptables, mArray.iptables[0]
- );
- }
- else
- {
- tshoot.innerHTML = '<strong><%:Error collecting troubleshooting information%></strong>';
- }
- }
- );
-//]]></script>
-
-<div id="troubleshoot">
- <fieldset class="cbi-section">
- <legend><%:Troubleshooting Data%></legend>
- <div id="troubleshoot_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
- </fieldset>
-</div>
-
-<style type="text/css">
- #troubleshoot_text {
- padding: 20px;
- text-align: left;
- }
- .description {
- background-color: rgb(78, 186, 241);
- }
-</style>
-
-<%+footer%>
+++ /dev/null
-<ul class="cbi-tabmenu">
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
- <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
-</ul>
-
-<style type="text/css">
- .cbi-section {
- padding: 20px;
- }
-</style>
<script type="text/javascript">//<![CDATA[
- XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "overview", "interface_status")%>', null,
+ XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "status", "mwan", "interface_status")%>', null,
function(x, mArray)
{
var status = document.getElementById('mwan_status_text');
+++ /dev/null
-<%+header%>
-
-<ul class="cbi-tabmenu">
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview")%>"><%:Interface Status%></a></li>
- <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview/overview_detailed")%>"><%:Detailed Status%></a></li>
-</ul>
-
-<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
-<script type="text/javascript">//<![CDATA[
- XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "overview", "detailed_status")%>', null,
- function(x, mArray)
- {
- var status = document.getElementById('mwan_detail_text');
- if (mArray.mwandetail)
- {
- status.innerHTML = String.format('<pre>%s</pre>', mArray.mwandetail[0]);
- }
- else
- {
- status.innerHTML = '<strong><%:No detailed status information available%></strong>';
- }
- }
- );
-//]]></script>
-
-<div id="mwan_detail_status">
- <fieldset class="cbi-section">
- <legend><%:MWAN Detailed Status%></legend>
- <div id="mwan_detail_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
- </fieldset>
-</div>
-
-<style type="text/css">
- #mwan_detail_text {
- padding: 20px;
- text-align: left;
- }
-</style>
-
-<%+footer%>
+++ /dev/null
-<%+header%>
-
-<ul class="cbi-tabmenu">
- <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview")%>"><%:Interface Status%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview/overview_detailed")%>"><%:Detailed Status%></a></li>
-</ul>
-
-<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
-<script type="text/javascript">//<![CDATA[
- XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "overview", "interface_status")%>', null,
- function(x, mArray)
- {
- var statusDiv = document.getElementById('mwan_status_text');
- if (mArray.wans)
- {
- var interfaceStatus = '';
- for ( var i = 0; i < mArray.wans.length; i++ )
- {
- var status = '';
- var css = '';
- switch (mArray.wans[i].status)
- {
- case 'online':
- status = '<%:Online (tracking active)%>';
- css = 'wanon';
- break;
- case 'notMonitored':
- status = '<%:Online (tracking off)%>';
- css = 'wanon';
- break;
- case 'offline':
- status = '<%:Offline%>';
- css = 'wanoff';
- break;
- case 'notEnabled':
- status = '<%:Disabled%>';
- css = 'wanoff';
- break;
- }
- interfaceStatus += String.format(
- '<span class="%s"><strong>%s (<a href="%q">%s</a>)</strong><br />%s</span>',
- css, mArray.wans[i].name, mArray.wans[i].link, mArray.wans[i].ifname, status
- );
- }
- statusDiv.innerHTML = interfaceStatus;
- }
- else
- {
- statusDiv.innerHTML = '<strong><%:No MWAN interfaces found%></strong>';
- }
-
- var logs = document.getElementById('mwan_statuslog_text');
- if (mArray.mwanlog)
- {
- var mwanLog = '<%:Last 50 MWAN systemlog entries. Newest entries sorted at the top :%>';
- logs.innerHTML = String.format('<pre>%s<br /><br />%s</pre>', mwanLog, mArray.mwanlog[0]);
- }
- else
- {
- logs.innerHTML = '<strong><%:No MWAN systemlog history found%></strong>';
- }
- }
- );
-//]]></script>
-
-<div id="mwan_interface_status">
- <fieldset id="interface_field" class="cbi-section">
- <legend><%:MWAN Interface Live Status%></legend>
- <div id="mwan_status_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
- </fieldset>
- <fieldset class="cbi-section">
- <legend><%:MWAN Interface Systemlog%></legend>
- <div id="mwan_statuslog_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
- </fieldset>
-</div>
-
-<style type="text/css">
- #mwan_status_text {
- display: table;
- font-size: 14px;
- margin: auto;
- max-width: 1044px;
- min-width: 246px;
- width: 100%;
- }
- .wanon {
- background-color: rgb(144, 240, 144);
- }
- .wanoff {
- background-color: rgb(240, 144, 144);
- }
- .wanon, .wanoff {
- border-radius: 60px;
- box-shadow: 0px 2px 5px -3px;
- float: left;
- margin: 8px 3px 0px 3px;
- min-height: 30px;
- min-width: 235px;
- padding: 5px 10px 8px 10px;
- text-align: center;
- }
- #mwan_statuslog_text {
- padding: 20px;
- text-align: left;
- }
-</style>
-
-<%+footer%>
--- /dev/null
+<%+header%>
+
+<ul class="cbi-tabmenu">
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/overview")%>"><%:Interface Status%></a></li>
+ <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/detail")%>"><%:Detailed Status%></a></li>
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/diagnostics")%>"><%:Diagnostics%></a></li>
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/troubleshooting")%>"><%:Troubleshooting%></a></li>
+</ul>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+ XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "status", "mwan", "detailed_status")%>', null,
+ function(x, mArray)
+ {
+ var status = document.getElementById('mwan_detail_text');
+ if (mArray.mwandetail)
+ {
+ status.innerHTML = String.format('<pre>%s</pre>', mArray.mwandetail[0]);
+ }
+ else
+ {
+ status.innerHTML = '<strong><%:No detailed status information available%></strong>';
+ }
+ }
+ );
+//]]></script>
+
+<div id="mwan_detail_status">
+ <fieldset class="cbi-section">
+ <legend><%:MWAN Detailed Status%></legend>
+ <div id="mwan_detail_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
+ </fieldset>
+</div>
+
+<style type="text/css">
+ #mwan_detail_text {
+ padding: 20px;
+ text-align: left;
+ }
+</style>
+
+<%+footer%>
--- /dev/null
+<%+header%>
+
+<ul class="cbi-tabmenu">
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/overview")%>"><%:Interface Status%></a></li>
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/detail")%>"><%:Detailed Status%></a></li>
+ <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/diagnostics")%>"><%:Diagnostics%></a></li>
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/troubleshooting")%>"><%:Troubleshooting%></a></li>
+</ul>
+
+<%
+ local uci = require "luci.model.uci"
+
+ interfaceNames = ""
+ uci.cursor():foreach("mwan3", "interface",
+ function (section)
+ interfaceNames = interfaceNames .. section[".name"] .. " "
+ end
+ )
+%>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+ var stxhr = new XHR();
+
+ function update_status(tool, task, task_name)
+ {
+ var iface = document.getElementById('mwaniface').value;
+ var output = document.getElementById('diag_output');
+
+ if (tool == "service")
+ {
+ output.innerHTML =
+ '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="padding: 20px; vertical-align: middle;" /> ' +
+ String.format("<%:Waiting for MWAN to %s...%>", task_name)
+ ;
+ }
+ else
+ {
+ output.innerHTML =
+ '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="padding: 20px; vertical-align: middle;" /> ' +
+ "<%:Waiting for diagnostic results...%>"
+ ;
+ }
+
+ output.parentNode.style.display = 'block';
+ output.style.display = 'inline';
+
+ stxhr.get('<%=luci.dispatcher.build_url("admin", "status", "mwan")%>/diagnostics_display' + '/' + iface + '/' + tool + '/' + task, null,
+ function(x, mArray)
+ {
+ if (mArray.diagnostics)
+ {
+ output.innerHTML = String.format('<pre id="diag_output_css">%h</pre>', mArray.diagnostics[0]);
+ }
+ else
+ {
+ output.innerHTML = '<pre id="diag_output_css"><strong><%:No diagnostic results returned%></strong></pre>';
+ }
+ }
+ );
+ }
+//]]></script>
+
+<div id="mwan_diagnostics" class="cbi-map">
+ <fieldset id="diag_select" class="cbi-section">
+ <legend><%:MWAN Interface Diagnostics%></legend>
+ <select id="mwaniface">
+ <% for z in interfaceNames:gmatch("[^ ]+") do -%><option value="<%=z%>"><%=z%></option><%- end %>
+ </select>
+ <div id="buttoncss">
+ <input type="button" value="<%:Ping default gateway%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'gateway', null)" />
+ <input type="button" value="<%:Ping tracking IP%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'track_ip', null)" />
+ <input type="button" value="<%:Check IP rules%>" class="cbi-button cbi-button-apply" onclick="update_status('rulechk', null, null)" />
+ <input type="button" value="<%:Check routing table%>" class="cbi-button cbi-button-apply" onclick="update_status('routechk', null, null)" />
+ <input type="button" value="<%:Hotplug ifup%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifup', null)" />
+ <input type="button" value="<%:Hotplug ifdown%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifdown', null)" />
+ </div>
+ </fieldset>
+ <fieldset id="diag_select" class="cbi-section">
+ <legend><%:MWAN Service Control%></legend>
+ <div id="buttoncss">
+ <input type="button" value="<%:Restart MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'restart', '<%:restart%>')" />
+ <input type="button" value="<%:Stop MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'stop', '<%:stop%>')" />
+ <input type="button" value="<%:Start MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'start', '<%:start%>')" />
+ </div>
+ </fieldset>
+ <fieldset class="cbi-section" style="display:none">
+ <legend><%:Diagnostic Results%></legend>
+ <div id="diag_output"></div>
+ </fieldset>
+</div>
+
+<style type="text/css">
+ #mwaniface {
+ float: left;
+ margin: 8px 20px 0px 0px;
+ }
+ #buttoncss {
+ display: table;
+ float: left;
+ text-align: left;
+ }
+ .cbi-button {
+ margin: 8px 20px 0px 0px;
+ min-width: 153px;
+ }
+ #diag_output_css {
+ padding: 20px;
+ text-align: left;
+ }
+</style>
+
+<%+footer%>
--- /dev/null
+<%+header%>
+
+<ul class="cbi-tabmenu">
+ <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/overview")%>"><%:Interface Status%></a></li>
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/detail")%>"><%:Detailed Status%></a></li>
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/diagnostics")%>"><%:Diagnostics%></a></li>
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/troubleshooting")%>"><%:Troubleshooting%></a></li>
+</ul>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+ XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "status", "mwan", "interface_status")%>', null,
+ function(x, mArray)
+ {
+ var statusDiv = document.getElementById('mwan_status_text');
+ if (mArray.wans)
+ {
+ var interfaceStatus = '';
+ for ( var i = 0; i < mArray.wans.length; i++ )
+ {
+ var status = '';
+ var css = '';
+ switch (mArray.wans[i].status)
+ {
+ case 'online':
+ status = '<%:Online (tracking active)%>';
+ css = 'wanon';
+ break;
+ case 'notMonitored':
+ status = '<%:Online (tracking off)%>';
+ css = 'wanon';
+ break;
+ case 'offline':
+ status = '<%:Offline%>';
+ css = 'wanoff';
+ break;
+ case 'notEnabled':
+ status = '<%:Disabled%>';
+ css = 'wanoff';
+ break;
+ }
+ interfaceStatus += String.format(
+ '<span class="%s"><strong>%s (<a href="%q">%s</a>)</strong><br />%s</span>',
+ css, mArray.wans[i].name, mArray.wans[i].link, mArray.wans[i].ifname, status
+ );
+ }
+ statusDiv.innerHTML = interfaceStatus;
+ }
+ else
+ {
+ statusDiv.innerHTML = '<strong><%:No MWAN interfaces found%></strong>';
+ }
+
+ var logs = document.getElementById('mwan_statuslog_text');
+ if (mArray.mwanlog)
+ {
+ var mwanLog = '<%:Last 50 MWAN systemlog entries. Newest entries sorted at the top :%>';
+ logs.innerHTML = String.format('<pre>%s<br /><br />%s</pre>', mwanLog, mArray.mwanlog[0]);
+ }
+ else
+ {
+ logs.innerHTML = '<strong><%:No MWAN systemlog history found%></strong>';
+ }
+ }
+ );
+//]]></script>
+
+<div id="mwan_interface_status">
+ <fieldset id="interface_field" class="cbi-section">
+ <legend><%:MWAN Interface Live Status%></legend>
+ <div id="mwan_status_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
+ </fieldset>
+ <fieldset class="cbi-section">
+ <legend><%:MWAN Interface Systemlog%></legend>
+ <div id="mwan_statuslog_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
+ </fieldset>
+</div>
+
+<style type="text/css">
+ #mwan_status_text {
+ display: table;
+ font-size: 14px;
+ margin: auto;
+ max-width: 1044px;
+ min-width: 246px;
+ width: 100%;
+ }
+ .wanon {
+ background-color: rgb(144, 240, 144);
+ }
+ .wanoff {
+ background-color: rgb(240, 144, 144);
+ }
+ .wanon, .wanoff {
+ border-radius: 60px;
+ box-shadow: 0px 2px 5px -3px;
+ float: left;
+ margin: 8px 3px 0px 3px;
+ min-height: 30px;
+ min-width: 235px;
+ padding: 5px 10px 8px 10px;
+ text-align: center;
+ }
+ #mwan_statuslog_text {
+ padding: 20px;
+ text-align: left;
+ }
+</style>
+
+<%+footer%>
--- /dev/null
+<%+header%>
+
+<ul class="cbi-tabmenu">
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/overview")%>"><%:Interface Status%></a></li>
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/detail")%>"><%:Detailed Status%></a></li>
+ <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/diagnostics")%>"><%:Diagnostics%></a></li>
+ <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/status/mwan/troubleshooting")%>"><%:Troubleshooting%></a></li>
+</ul>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+ XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "status", "mwan", "troubleshooting_display")%>', null,
+ function(x, mArray)
+ {
+ var tshoot = document.getElementById('troubleshoot_text');
+ if (mArray.versions)
+ {
+ var versions = '<span class="description">Software versions : </span><br /><br />';
+ var mwanConfig = '<br /><br /><span class="description">Output of "cat /etc/config/mwan3" : </span><br /><br />';
+ var netConfig = '<br /><br /><span class="description">Output of "cat /etc/config/network" : </span><br /><br />';
+ var wifiConfig = '<br /><br /><span class="description">Output of "cat /etc/config/wireless" : </span><br /><br />';
+ var ifconfig = '<br /><br /><span class="description">Output of "ifconfig" : </span><br /><br />';
+ var ipRoute = '<br /><br /><span class="description">Output of "route -n" : </span><br /><br />';
+ var ipRuleShow = '<br /><br /><span class="description">Output of "ip rule show" : </span><br /><br />';
+ var routeListTable = '<br /><br /><span class="description">Output of "ip route list table 1-250" : </span><br /><br />';
+ var firewallOut = '<br /><br /><span class="description">Firewall default output policy (must be ACCEPT) : </span><br /><br />';
+ var iptables = '<br /><br /><span class="description">Output of "iptables -L -t mangle -v -n" : </span><br /><br />';
+ tshoot.innerHTML = String.format(
+ '<pre>%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s</pre>',
+ versions, mArray.versions[0], mwanConfig, mArray.mwanconfig[0], netConfig, mArray.netconfig[0],
+ wifiConfig, mArray.wificonfig[0], ifconfig, mArray.ifconfig[0], ipRoute, mArray.routeshow[0],
+ ipRuleShow, mArray.iprule[0], routeListTable, mArray.routelist[0], firewallOut, mArray.firewallout[0],
+ iptables, mArray.iptables[0]
+ );
+ }
+ else
+ {
+ tshoot.innerHTML = '<strong><%:Error collecting troubleshooting information%></strong>';
+ }
+ }
+ );
+//]]></script>
+
+<div id="troubleshoot">
+ <fieldset class="cbi-section">
+ <legend><%:Troubleshooting Data%></legend>
+ <div id="troubleshoot_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
+ </fieldset>
+</div>
+
+<style type="text/css">
+ #troubleshoot_text {
+ padding: 20px;
+ text-align: left;
+ }
+ .description {
+ background-color: rgb(78, 186, 241);
+ }
+</style>
+
+<%+footer%>