luci-base: eliminiate use of uci state vars in luci.sys
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>
This commit is contained in:
parent
57ba1922b7
commit
927dc1aff9
1 changed files with 12 additions and 22 deletions
|
@ -581,30 +581,20 @@ function wifi.getiwinfo(ifname)
|
||||||
local stat, iwinfo = pcall(require, "iwinfo")
|
local stat, iwinfo = pcall(require, "iwinfo")
|
||||||
|
|
||||||
if ifname then
|
if ifname then
|
||||||
local c = 0
|
|
||||||
local u = uci.cursor_state()
|
|
||||||
local d, n = ifname:match("^(%w+)%.network(%d+)")
|
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
|
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
|
end
|
||||||
|
|
||||||
local t = stat and iwinfo.type(ifname)
|
local t = stat and iwinfo.type(ifname)
|
||||||
|
|
Loading…
Reference in a new issue