From 0eb010a754c18c51c3fde06de63bdec54f85950c Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 9 Aug 2012 10:03:25 +0000 Subject: [PATCH] libs/sys: remove _parse_delimitted_table() and incorperate /etc/config/dhcp leases into mac_hints() --- libs/sys/luasrc/sys.lua | 70 +++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua index 33cf87591..c0fb5286e 100644 --- a/libs/sys/luasrc/sys.lua +++ b/libs/sys/luasrc/sys.lua @@ -230,11 +230,39 @@ net = {} -- 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 = { } @@ -276,6 +304,13 @@ local function _nethints(what, callback) 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 { } @@ -907,39 +942,6 @@ end -- 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 = {} -- 2.11.0