Add support for stateful DHCPv6
authorSteven Barth <steven@midlink.org>
Mon, 24 Jun 2013 12:01:11 +0000 (12:01 +0000)
committerSteven Barth <steven@midlink.org>
Mon, 24 Jun 2013 12:01:11 +0000 (12:01 +0000)
libs/core/root/etc/config/ucitrack
modules/admin-core/luasrc/tools/status.lua
modules/admin-full/luasrc/model/cbi/admin_network/ipv6.lua

index 084bd679a030d7e724d4a58c822248f47d181470..04467f4fdf6b2990792e80bccba47225aa2a7518 100644 (file)
@@ -48,3 +48,6 @@ config samba
 
 config tinyproxy
        option init tinyproxy
+
+config 6relayd
+       option init 6relayd
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
 
index ae9bc63386d1649044f1fb28e6c957b8aa1935d3..ba91475dd49e7d6187a803cbbefacccb1179cb39 100644 (file)
@@ -84,4 +84,19 @@ o:depends("rd", "server")
 o = s:option(Flag, "compat_ula", translate("ULA-preference compatibility"),
        translate("Work around IPv6 address-selection issues of some devices."))
 
+m:section(SimpleSection).template = "admin_network/lease_status"
+
+s = m:section(TypedSection, "lease", translate("Static Leases"),
+        translate("Static leases are used to assign fixed IPv6 Interface-IDs to clients. Interface-IDs are appended to available prefixes to form IPv6-addresses. " ..
+            " (e.g. a prefix of 2001:db80::/64 combined with Interface-ID 123456 will form the address 2001:db80::12:3456)") .. "<br />" ..
+        translate("Use the <em>Add</em> Button to add a new lease entry. The <em>DUID</em> " ..
+            "indentifies the host, the <em>Interface-ID</em> specifies the ID to use in addresses."))
+
+s.addremove = true
+s.anonymous = true
+s.template = "cbi/tblsection"
+
+s:option(Value, "duid", translate("DUID")).optional = false
+s:option(Value, "id", translate("Interface-ID")).optional = false
+
 return m