libs/sys: remove _parse_delimitted_table() and incorperate /etc/config/dhcp leases into mac_hints()
This commit is contained in:
parent
9bd814cf0e
commit
0eb010a754
1 changed files with 36 additions and 34 deletions
|
@ -230,11 +230,39 @@ net = {}
|
||||||
-- The following fields are defined for arp entry objects:
|
-- The following fields are defined for arp entry objects:
|
||||||
-- { "IP address", "HW address", "HW type", "Flags", "Mask", "Device" }
|
-- { "IP address", "HW address", "HW type", "Flags", "Mask", "Device" }
|
||||||
function net.arptable(callback)
|
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
|
end
|
||||||
|
|
||||||
local function _nethints(what, callback)
|
local function _nethints(what, callback)
|
||||||
local _, k, e, mac, ip, name
|
local _, k, e, mac, ip, name
|
||||||
|
local cur = uci.cursor()
|
||||||
local ifn = { }
|
local ifn = { }
|
||||||
local hosts = { }
|
local hosts = { }
|
||||||
|
|
||||||
|
@ -276,6 +304,13 @@ local function _nethints(what, callback)
|
||||||
end
|
end
|
||||||
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
|
for _, e in ipairs(nixio.getifaddrs()) do
|
||||||
if e.name ~= "lo" then
|
if e.name ~= "lo" then
|
||||||
ifn[e.name] = ifn[e.name] or { }
|
ifn[e.name] = ifn[e.name] or { }
|
||||||
|
@ -907,39 +942,6 @@ end
|
||||||
|
|
||||||
-- Internal functions
|
-- 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)
|
function _parse_mixed_record(cnt, delimiter)
|
||||||
delimiter = delimiter or " "
|
delimiter = delimiter or " "
|
||||||
local data = {}
|
local data = {}
|
||||||
|
|
Loading…
Reference in a new issue