luci-base: eliminiate use of uci state vars in luci.sys
authorJo-Philipp Wich <jow@openwrt.org>
Tue, 27 Oct 2015 13:11:11 +0000 (14:11 +0100)
committerJo-Philipp Wich <jow@openwrt.org>
Tue, 27 Oct 2015 13:13:05 +0000 (14:13 +0100)
Rewrite `luci.sys.wifi.getiwinfo()` to use the ubus wireless state instead of
depreacated uci state vars in order to map abstract network notation to
wireless ifnames.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
modules/luci-base/luasrc/sys.lua

index 3977da3eda54b195ccc81fd2a67d6ca6890be2d7..77f4d44a5430ae23ded07caa35365f9469b51d8d 100644 (file)
@@ -581,30 +581,20 @@ function wifi.getiwinfo(ifname)
        local stat, iwinfo = pcall(require, "iwinfo")
 
        if ifname then
-               local c = 0
-               local u = uci.cursor_state()
                local d, n = ifname:match("^(%w+)%.network(%d+)")
-               if d and n then
+               local wstate = luci.util.ubus("network.wireless", "status") or { }
+
+               d = d or ifname
+               n = n and tonumber(n) or 1
+
+               if type(wstate[d]) == "table" and
+                  type(wstate[d].interfaces) == "table" and
+                  type(wstate[d].interfaces[n]) == "table" and
+                  type(wstate[d].interfaces[n].ifname) == "string"
+               then
+                       ifname = wstate[d].interfaces[n].ifname
+               else
                        ifname = d
-                       n = tonumber(n)
-                       u:foreach("wireless", "wifi-iface",
-                               function(s)
-                                       if s.device == d then
-                                               c = c + 1
-                                               if c == n then
-                                                       ifname = s.ifname or s.device
-                                                       return false
-                                               end
-                                       end
-                               end)
-               elseif u:get("wireless", ifname) == "wifi-device" then
-                       u:foreach("wireless", "wifi-iface",
-                               function(s)
-                                       if s.device == ifname and s.ifname then
-                                               ifname = s.ifname
-                                               return false
-                                       end
-                               end)
                end
 
                local t = stat and iwinfo.type(ifname)