modules/admin-core, modules/admin-full: fix switch port status for devices with multi...
[project/luci.git] / modules / admin-core / luasrc / tools / status.lua
index e5c517f..3ececa8 100644 (file)
@@ -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