mirror of
https://github.com/openwrt/luci.git
synced 2025-12-21 23:34:34 +04:00
libs/sys: remove _parse_delimitted_table() and incorperate /etc/config/dhcp leases into mac_hints()
This commit is contained in:
@@ -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 = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user