diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2012-11-01 20:03:36 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2012-11-01 20:03:36 +0000 |
commit | 36f88887c19d2b0098ae1965b6725845705efc51 (patch) | |
tree | 4b73eab4ac1485ce96417803167e47a696b39c7a /modules | |
parent | 59af400346d15250af5873db66e420592a5b9ff9 (diff) |
modules/admin-core, modules/admin-full: fix switch port status for devices with multiple switches
Diffstat (limited to 'modules')
3 files changed, 60 insertions, 55 deletions
diff --git a/modules/admin-core/luasrc/tools/status.lua b/modules/admin-core/luasrc/tools/status.lua index e5c517f23..3ececa8f1 100644 --- a/modules/admin-core/luasrc/tools/status.lua +++ b/modules/admin-core/luasrc/tools/status.lua @@ -153,35 +153,40 @@ function wifi_network(id) 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) - } +function switch_status(devs) + local dev + local switches = { } + for dev in devs:gmatch("[^%s,]+") do + 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 - end - until not l - swc:close() + until not l + swc:close() + end + switches[dev] = ports end - return ports + return switches end 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 9dc3f2f63..b0de19133 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua @@ -14,6 +14,8 @@ You may obtain a copy of the License at 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.")) +local switches = { } + m.uci:foreach("network", "switch", function(x) local sid = x['.name'] @@ -199,7 +201,7 @@ m.uci:foreach("network", "switch", end - local vid = s:option(Value, has_vlan4k or "vlan", "VLAN ID") + local vid = s:option(Value, has_vlan4k or "vlan", "VLAN ID", "<div id='portstatus-%s'></div>" % switch_name) vid.rmempty = false vid.forcewrite = true @@ -276,12 +278,13 @@ 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 + switches[#switches+1] = switch_name end ) +-- Switch status template +s = m:section(SimpleSection) +s.template = "admin_network/switch_status" +s.switches = switches + return m diff --git a/modules/admin-full/luasrc/view/admin_network/switch_status.htm b/modules/admin-full/luasrc/view/admin_network/switch_status.htm index 0b284833e..b299575e2 100644 --- a/modules/admin-full/luasrc/view/admin_network/switch_status.htm +++ b/modules/admin-full/luasrc/view/admin_network/switch_status.htm @@ -1,31 +1,28 @@ <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) + var switches = [ '<%=table.concat(self.switches, "', '")%>' ]; + XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "switch_status")%>/' + switches.join(','), null, + function(x, st) { - 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) + for (var i = 0; i < switches.length; i++) { - if (st && st.length) + var ports = st[switches[i]]; + var th0 = document.getElementById('portstatus-' + switches[i]); + + if (th0 && ports && ports.length) { - for (var i = 0; i < st.length; i++) + if (!th0.innerHTML) + th0.innerHTML = '<%:Port status:%>'; + + for (var j = 0; j < ports.length; j++) { - var th = tb.childNodes[i+1]; + var th = th0.parentNode.parentNode.childNodes[j+1]; - if (st[i].link) + if (ports[j].link) { th.innerHTML = String.format( '<small><img src="<%=resource%>/icons/port_up.png" />' + '<br />%d<%:baseT%><br />%s</small>', - st[i].speed, st[i].duplex + ports[j].speed, ports[j].duplex ? '<%:full-duplex%>' : '<%:half-duplex%>' ); } @@ -39,6 +36,6 @@ } } } - ); - } + } + ); //]]></script> |