diff options
-rw-r--r-- | modules/admin-core/luasrc/tools/status.lua | 34 | ||||
-rw-r--r-- | modules/admin-full/luasrc/controller/admin/network.lua | 12 | ||||
-rw-r--r-- | modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua | 7 | ||||
-rw-r--r-- | modules/admin-full/luasrc/view/admin_network/switch_status.htm | 44 | ||||
-rw-r--r-- | themes/base/htdocs/luci-static/resources/icons/port_down.png | bin | 0 -> 982 bytes | |||
-rw-r--r-- | themes/base/htdocs/luci-static/resources/icons/port_up.png | bin | 0 -> 1405 bytes |
6 files changed, 94 insertions, 3 deletions
diff --git a/modules/admin-core/luasrc/tools/status.lua b/modules/admin-core/luasrc/tools/status.lua index cd543f71e8..e5c517f238 100644 --- a/modules/admin-core/luasrc/tools/status.lua +++ b/modules/admin-core/luasrc/tools/status.lua @@ -9,7 +9,6 @@ You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -$Id$ ]]-- module("luci.tools.status", package.seeall) @@ -153,3 +152,36 @@ function wifi_network(id) end return { } end + +function switch_status(dev) + local ports = { } + local swc = io.popen("swconfig dev %q show" % dev, "r") + if swc then + local l + repeat + l = swc:read("*l") + if l then + local port, up = l:match("port:(%d+) link:(%w+)") + if port then + local speed = l:match(" speed:(%d+)") + local duplex = l:match(" (%w+)-duplex") + local txflow = l:match(" (txflow)") + local rxflow = l:match(" (rxflow)") + local auto = l:match(" (auto)") + + ports[#ports+1] = { + port = tonumber(port) or 0, + speed = tonumber(speed) or 0, + link = (up == "up"), + duplex = (duplex == "full"), + rxflow = (not not rxflow), + txflow = (not not txflow), + auto = (not not auto) + } + end + end + until not l + swc:close() + end + return ports +end diff --git a/modules/admin-full/luasrc/controller/admin/network.lua b/modules/admin-full/luasrc/controller/admin/network.lua index 00e1fe2ff1..85dc68fff0 100644 --- a/modules/admin-full/luasrc/controller/admin/network.lua +++ b/modules/admin-full/luasrc/controller/admin/network.lua @@ -10,7 +10,6 @@ You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -$Id$ ]]-- module("luci.controller.admin.network", package.seeall) @@ -39,6 +38,9 @@ function index() page.target = cbi("admin_network/vlan") page.title = _("Switch") page.order = 20 + + page = entry({"admin", "network", "switch_status"}, call("switch_status"), nil) + page.leaf = true end @@ -417,6 +419,14 @@ function lease_status() luci.http.write(']') end +function switch_status() + local path = luci.dispatcher.context.requestpath + local s = require "luci.tools.status" + + luci.http.prepare_content("application/json") + luci.http.write_json(s.switch_status(path[#path])) +end + function diag_command(cmd) local path = luci.dispatcher.context.requestpath local addr = path[#path] diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua b/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua index 25fd0a899c..9dc3f2f636 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua @@ -10,7 +10,6 @@ You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -$Id$ ]]-- m = Map("network", translate("Switch"), translate("The network ports on this device can be combined to several <abbr title=\"Virtual Local Area Network\">VLAN</abbr>s in which computers can communicate directly with each other. <abbr title=\"Virtual Local Area Network\">VLAN</abbr>s are often used to separate different network segments. Often there is by default one Uplink port for a connection to the next greater network like the internet and other ports for a local network.")) @@ -276,6 +275,12 @@ m.uci:foreach("network", "switch", port_opts[#port_opts+1] = po end + + + -- Switch status template + s = m:section(SimpleSection) + s.template = "admin_network/switch_status" + s.switch = switch_name end ) diff --git a/modules/admin-full/luasrc/view/admin_network/switch_status.htm b/modules/admin-full/luasrc/view/admin_network/switch_status.htm new file mode 100644 index 0000000000..31da264dc4 --- /dev/null +++ b/modules/admin-full/luasrc/view/admin_network/switch_status.htm @@ -0,0 +1,44 @@ +<script type="text/javascript">//<![CDATA[ + var tb; + var ths = document.getElementsByTagName('th'); + for (var i = 0; i < ths.length; i++) + if (ths[i].className = 'cbi-section-table-cell' && !ths[i].innerHTML) + { + ths[i].innerHTML = '<%:Port status:%>'; + tb = ths[i].parentNode; + break; + } + + if (tb) + { + XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "switch_status", self.switch)%>', null, + function(x, st) + { + if (st && st.length) + { + for (var i = 0; i < st.length; i++) + { + var th = tb.childNodes[i+1]; + + if (st[i].link) + { + th.innerHTML = String.format( + '<small><img src="<%=resource%>/icons/port_up.png" />' + + '<br />%d<%:baseT%> %s</small>', + st[i].speed, st[i].duplex + ? '<%:full-duplex%>' : '<%:half-duplex%>' + ); + } + else + { + th.innerHTML = String.format( + '<small><img src="<%=resource%>/icons/port_down.png" />' + + '<br /><%:no link%></small>' + ); + } + } + } + } + ); + } +//]]></script> diff --git a/themes/base/htdocs/luci-static/resources/icons/port_down.png b/themes/base/htdocs/luci-static/resources/icons/port_down.png Binary files differnew file mode 100644 index 0000000000..25ea172324 --- /dev/null +++ b/themes/base/htdocs/luci-static/resources/icons/port_down.png diff --git a/themes/base/htdocs/luci-static/resources/icons/port_up.png b/themes/base/htdocs/luci-static/resources/icons/port_up.png Binary files differnew file mode 100644 index 0000000000..9182478870 --- /dev/null +++ b/themes/base/htdocs/luci-static/resources/icons/port_up.png |