gluon-status-page: use UCI + iwinfo to get channel information

The network.wireless status ubus call only returns the configured
channel from UCI, breaking the status page in outdoor mode, where the
configuration contains 'auto' instead of a number.

Fixes: 0d3fa6b59b ("gluon-status-page: use ubus to get radio channels")
Closes #2336
This commit is contained in:
Matthias Schiffer 2021-12-15 19:46:26 +01:00
parent e153ba6bd7
commit 201e1597b1
No known key found for this signature in database
GPG Key ID: 16EF3F64CB201D9C

View File

@ -1,7 +1,11 @@
<%- <%-
local iwinfo = require 'iwinfo'
local ubus = require 'ubus' local ubus = require 'ubus'
local unistd = require 'posix.unistd' local unistd = require 'posix.unistd'
local util = require 'gluon.util' local util = require 'gluon.util'
local wireless = require 'gluon.wireless'
local uci = require('simple-uci').cursor()
local translations = {} local translations = {}
local site_i18n = i18n 'gluon-site' local site_i18n = i18n 'gluon-site'
@ -35,22 +39,22 @@
return interfaces return interfaces
end end
local function get_radios(uconn) local function get_radios()
local radios = uconn:call("network.wireless", "status", {})
local ret = {} local ret = {}
for radio, info in pairs(radios) do wireless.foreach_radio(uci, function(radio)
if info.up then local channel = iwinfo.nl80211.channel(wireless.find_phy(radio))
if channel then
table.insert(ret, { table.insert(ret, {
name = radio, name = radio['.name'],
channel = info.config.channel, channel = channel,
}) })
end end
end end)
table.sort(ret, function(a, b) table.sort(ret, function(a, b)
return a.name < b.name return a.name < b.name
end) end)
return ret return ret
end end
@ -72,10 +76,11 @@
end end
local interfaces = get_interfaces(uconn) local interfaces = get_interfaces(uconn)
local radios = get_radios(uconn)
ubus.close(uconn) ubus.close(uconn)
local radios = get_radios()
local function sorted(t) local function sorted(t)
t = {unpack(t)} t = {unpack(t)}
table.sort(t) table.sort(t)