luci-base: adds duid_to_mac to sys.lua
authorAnsuel Smith <ansuelsmth@gmail.com>
Sun, 2 Jun 2019 20:33:02 +0000 (22:33 +0200)
committerAnsuel Smith <ansuelsmth@gmail.com>
Mon, 3 Jun 2019 10:48:48 +0000 (12:48 +0200)
Move duid_to_mac function from status.lua to sys.lua.
Implement translation from DUID-LL without header to MAC

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
modules/luci-base/luasrc/sys.lua
modules/luci-base/luasrc/tools/status.lua

index 7e4a9d63cf9c19a14a31a91079ddfa4180d66327..4c6574368da45c3cef017916f568cd7c07fa5268 100644 (file)
@@ -137,7 +137,7 @@ end
 net = {}
 
 local function _nethints(what, callback)
-       local _, k, e, mac, ip, name
+       local _, k, e, mac, ip, name, duid, iaid
        local cur = uci.cursor()
        local ifn = { }
        local hosts = { }
@@ -386,6 +386,26 @@ function net.devices()
        return devs
 end
 
+function net.duid_to_mac(duid)
+       local b1, b2, b3, b4, b5, b6
+
+       if type(duid) == "string" then
+               -- DUID-LLT / Ethernet
+               if #duid == 28 then
+                       b1, b2, b3, b4, b5, b6 = duid:match("^00010001(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)%x%x%x%x%x%x%x%x$")
+
+               -- DUID-LL / Ethernet
+               elseif #duid == 20 then
+                       b1, b2, b3, b4, b5, b6 = duid:match("^00030001(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)$")
+
+               -- DUID-LL / Ethernet (Without Header)
+               elseif #duid == 12 then
+                       b1, b2, b3, b4, b5, b6 = duid:match("^(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)$")
+               end
+       end
+
+       return b1 and luci.ip.checkmac(table.concat({ b1, b2, b3, b4, b5, b6 }, ":"))
+end
 
 process = {}
 
index 635995310f640b758fa5d5afd79a0647c66c50ec..496b7b9fd0a03f91455c32be0590b616ce038f9c 100644 (file)
@@ -6,21 +6,6 @@ module("luci.tools.status", package.seeall)
 local uci = require "luci.model.uci".cursor()
 local ipc = require "luci.ip"
 
-local function duid_to_mac(duid)
-       local b1, b2, b3, b4, b5, b6
-
-       -- DUID-LLT / Ethernet
-       if type(duid) == "string" and #duid == 28 then
-               b1, b2, b3, b4, b5, b6 = duid:match("^00010001(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)%x%x%x%x%x%x%x%x$")
-
-       -- DUID-LL / Ethernet
-       elseif type(duid) == "string" and #duid == 20 then
-               b1, b2, b3, b4, b5, b6 = duid:match("^00030001(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)$")
-       end
-
-       return b1 and ipc.checkmac(table.concat({ b1, b2, b3, b4, b5, b6 }, ":"))
-end
-
 local function dhcp_leases_common(family)
        local rv = { }
        local nfs = require "nixio.fs"
@@ -93,7 +78,7 @@ local function dhcp_leases_common(family)
                                elseif ip and iaid == "ipv4" and family == 4 then
                                        rv[#rv+1] = {
                                                expires  = (expire >= 0) and os.difftime(expire, os.time()),
-                                               macaddr  = ipc.checkmac(duid:gsub("^(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)$", "%1:%2:%3:%4:%5:%6")) or "00:00:00:00:00:00",
+                                               macaddr  = sys.net.duid_to_mac(duid) or "00:00:00:00:00:00",
                                                ipaddr   = ip,
                                                hostname = (name ~= "-") and name
                                        }