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