Add support for stateful DHCPv6

This commit is contained in:
Steven Barth 2013-05-23 10:14:20 +00:00
parent 029631ec48
commit 5200eb1577
3 changed files with 45 additions and 3 deletions

View file

@ -48,3 +48,6 @@ config samba
config tinyproxy
option init tinyproxy
config 6relayd
option init 6relayd

View 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

View 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