-- The following fields are defined for arp entry objects:
-- { "IP address", "HW address", "HW type", "Flags", "Mask", "Device" }
function net.arptable(callback)
- return _parse_delimited_table(io.lines("/proc/net/arp"), "%s%s+", callback)
+ local arp, e, r, v
+ if fs.access("/proc/net/arp") then
+ for e in io.lines("/proc/net/arp") do
+ local r = { }, v
+ for v in e:gmatch("%S+") do
+ r[#r+1] = v
+ end
+
+ if r[1] ~= "IP" then
+ local x = {
+ ["IP address"] = r[1],
+ ["HW type"] = r[2],
+ ["Flags"] = r[3],
+ ["HW address"] = r[4],
+ ["Mask"] = r[5],
+ ["Device"] = r[6]
+ }
+
+ if callback then
+ callback(x)
+ else
+ arp = arp or { }
+ arp[#arp+1] = x
+ end
+ end
+ end
+ end
+ return arp
end
local function _nethints(what, callback)
local _, k, e, mac, ip, name
+ local cur = uci.cursor()
local ifn = { }
local hosts = { }
end
end
+ cur:foreach("dhcp", "host",
+ function(s)
+ for mac in luci.util.imatch(s.mac) do
+ _add(what, mac:upper(), s.ip, nil, s.name)
+ end
+ end)
+
for _, e in ipairs(nixio.getifaddrs()) do
if e.name ~= "lo" then
ifn[e.name] = ifn[e.name] or { }
local u = uci.cursor_state()
local d, n = ifname:match("^(%w+)%.network(%d+)")
if d and n then
+ ifname = d
n = tonumber(n)
u:foreach("wireless", "wifi-iface",
function(s)
end
end
---- Get available channels from given wireless iface.
--- @param iface Wireless interface (optional)
--- @return Table of available channels
-function wifi.channels(iface)
- local stat, iwinfo = pcall(require, "iwinfo")
- local cns
-
- if stat then
- local t = iwinfo.type(iface or "")
- if iface and t and iwinfo[t] then
- cns = iwinfo[t].freqlist(iface)
- end
- end
-
- if not cns or #cns == 0 then
- cns = {
- {channel = 1, mhz = 2412},
- {channel = 2, mhz = 2417},
- {channel = 3, mhz = 2422},
- {channel = 4, mhz = 2427},
- {channel = 5, mhz = 2432},
- {channel = 6, mhz = 2437},
- {channel = 7, mhz = 2442},
- {channel = 8, mhz = 2447},
- {channel = 9, mhz = 2452},
- {channel = 10, mhz = 2457},
- {channel = 11, mhz = 2462}
- }
- end
-
- return cns
-end
-
--- LuCI system utilities / init related functions.
-- @class module
-- Internal functions
-function _parse_delimited_table(iter, delimiter, callback)
- delimiter = delimiter or "%s+"
-
- local data = {}
- local trim = luci.util.trim
- local split = luci.util.split
-
- local keys = split(trim(iter()), delimiter, nil, true)
- for i, j in pairs(keys) do
- keys[i] = trim(keys[i])
- end
-
- for line in iter do
- local row = {}
- line = trim(line)
- if #line > 0 then
- for i, j in pairs(split(line, delimiter, nil, true)) do
- if keys[i] then
- row[keys[i]] = j
- end
- end
- end
-
- if callback then
- callback(row)
- else
- data[#data+1] = row
- end
- end
-
- return data
-end
-
function _parse_mixed_record(cnt, delimiter)
delimiter = delimiter or " "
local data = {}