X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fsys%2Fluasrc%2Fsys.lua;h=3412b32b703983397bd59f91df210521ae16af94;hp=3e2ce7f3194ad16f99d866100eb706d047d701b7;hb=98996e380a7301ec5127de83e047d0bf8cf3df43;hpb=4b9f7db1cea69524ca46098b446b0fe51e87091b;ds=sidebyside diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua index 3e2ce7f31..3412b32b7 100644 --- a/libs/sys/luasrc/sys.lua +++ b/libs/sys/luasrc/sys.lua @@ -35,7 +35,8 @@ luci.util = require "luci.util" luci.fs = require "luci.fs" luci.ip = require "luci.ip" -local tonumber, ipairs, pairs, pcall = tonumber, ipairs, pairs, pcall +local tonumber, ipairs, pairs, pcall, type = + tonumber, ipairs, pairs, pcall, type --- LuCI Linux and POSIX system utilities. @@ -680,6 +681,36 @@ function wifi.iwscan(iface) return iface and (iws[iface] or {}) or iws end +--- Get available channels from given wireless iface. +-- @param iface Wireless interface (optional) +-- @return Table of available channels +function wifi.channels(iface) + local cmd = "iwlist " .. ( iface or "" ) .. " freq 2>/dev/null" + local cns = { } + + local fd = io.popen(cmd) + if fd then + local ln, c, f + repeat + ln = fd:read("*l") or "" + c, f = ln:match("Channel (%d+) : (%d+%.%d+) GHz") + if c and f then + cns[tonumber(c)] = tonumber(f) + end + until not ( #ln > 0 ) + fd:close() + end + + if #cns == 0 then + cms = { + 2.412, 2.417, 2.422, 2.427, 2.432, 2.437, + 2.442, 2.447, 2.452, 2.457, 2.462 + } + end + + return cns +end + --- LuCI system utilities / init related functions. -- @class module