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 VLANs in which computers can communicate directly with each other. VLANs 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 @@ + diff --git a/themes/base/htdocs/luci-static/resources/icons/port_down.png b/themes/base/htdocs/luci-static/resources/icons/port_down.png new file mode 100644 index 0000000000..25ea172324 Binary files /dev/null and b/themes/base/htdocs/luci-static/resources/icons/port_down.png differ diff --git a/themes/base/htdocs/luci-static/resources/icons/port_up.png b/themes/base/htdocs/luci-static/resources/icons/port_up.png new file mode 100644 index 0000000000..9182478870 Binary files /dev/null and b/themes/base/htdocs/luci-static/resources/icons/port_up.png differ