Add support for stateful DHCPv6
[project/luci.git] / modules / admin-core / luasrc / tools / status.lua
index 3ececa8f1340b4b04865a0161bca20f9f23afe83..becd7d465981964e0d730dcde7721919d7ec5338 100644 (file)
@@ -66,10 +66,34 @@ function dhcp_leases()
 end
 
 function dhcp6_leases()
-       if luci.sys.call("dnsmasq --version 2>/dev/null | grep -q ' DHCPv6 '") == 0 then
+       local nfs = require "nixio.fs"
+       local leasefile = "/tmp/hosts/6relayd"
+       local rv = {}
+
+       if nfs.access(leasefile, "r") then
+               local fd = io.open(leasefile, "r")
+               if fd then
+                       while true do
+                               local ln = fd:read("*l")
+                               if not ln then
+                                       break
+                               else
+                                       local iface, duid, iaid, name, ts, id, length, ip = ln:match("^# (%S+) (%S+) (%S+) (%S+) (%d+) (%S+) (%S+) (.*)")
+                                       if ip then
+                                               rv[#rv+1] = {
+                                                       expires  = os.difftime(tonumber(ts) or 0, os.time()),
+                                                       duid     = duid,
+                                                       ip6addr  = ip,
+                                                       hostname = (name ~= "-") and name
+                                               }
+                                       end
+                               end
+                       end
+                       fd:close()
+               end
+               return rv
+       elseif luci.sys.call("dnsmasq --version 2>/dev/null | grep -q ' DHCPv6 '") == 0 then
                return dhcp_leases_common(6)
-       else
-               return nil
        end
 end