summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-base/root/usr/libexec/rpcd
diff options
context:
space:
mode:
Diffstat (limited to 'modules/luci-base/root/usr/libexec/rpcd')
-rwxr-xr-xmodules/luci-base/root/usr/libexec/rpcd/luci60
1 files changed, 60 insertions, 0 deletions
diff --git a/modules/luci-base/root/usr/libexec/rpcd/luci b/modules/luci-base/root/usr/libexec/rpcd/luci
index e27149127c..e94e3f1f74 100755
--- a/modules/luci-base/root/usr/libexec/rpcd/luci
+++ b/modules/luci-base/root/usr/libexec/rpcd/luci
@@ -274,6 +274,66 @@ local methods = {
end
},
+ getWirelessDevices = {
+ call = function(args)
+ local ubus = require "ubus".connect()
+ if not ubus then
+ return { error = "Unable to establish ubus connection" }
+ end
+
+ local status = ubus:call("network.wireless", "status", {})
+ if type(status) == "table" then
+ local radioname, radiodata
+ for radioname, radiodata in pairs(status) do
+ if type(radiodata) == "table" then
+ radiodata.iwinfo = ubus:call("iwinfo", "info", { device = radioname }) or {}
+ radiodata.iwinfo.bitrate = nil
+ radiodata.iwinfo.bssid = nil
+ radiodata.iwinfo.encryption = nil
+ radiodata.iwinfo.mode = nil
+ radiodata.iwinfo.quality = nil
+ radiodata.iwinfo.quality_max = nil
+ radiodata.iwinfo.ssid = nil
+
+ local iwdata = nil
+
+ if type(radiodata.interfaces) == "table" then
+ local _, interfacedata
+ for _, interfacedata in ipairs(radiodata.interfaces) do
+ if type(interfacedata) == "table" and
+ type(interfacedata.ifname) == "string"
+ then
+ local iwinfo = ubus:call("iwinfo", "info", { device = interfacedata.ifname })
+
+ iwdata = iwdata or iwinfo
+ interfacedata.iwinfo = iwinfo or {}
+ end
+ end
+ end
+
+ radiodata.iwinfo = {}
+
+ local _, k, v
+ for k, v in pairs(iwdata or ubus:call("iwinfo", "info", { device = radioname }) or {}) do
+ if k ~= "bitrate" and k ~= "bssid" and k ~= "encryption" and
+ k ~= "mode" and k ~= "quality" and k ~= "quality_max" and
+ k ~= "ssid"
+ then
+ if type(v) == "table" then
+ radiodata.iwinfo[k] = json.parse(json.stringify(v))
+ else
+ radiodata.iwinfo[k] = v
+ end
+ end
+ end
+ end
+ end
+ end
+
+ return status
+ end
+ },
+
getBoardJSON = {
call = function(args)
local jsc = require "luci.jsonc"