From 493b7d4ee9325c1e9e36481123ed6112a4a6bd07 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Fri, 17 Jan 2014 15:46:56 +0000 Subject: [PATCH] Adapt IPv6 interface to new architecture --- modules/admin-core/luasrc/tools/status.lua | 58 +++++----- .../luasrc/model/cbi/admin_network/dhcp.lua | 2 + .../luasrc/model/cbi/admin_network/ifaces.lua | 40 ++++++- .../luasrc/model/cbi/admin_network/ipv6.lua | 102 ------------------ 4 files changed, 69 insertions(+), 133 deletions(-) delete mode 100644 modules/admin-full/luasrc/model/cbi/admin_network/ipv6.lua diff --git a/modules/admin-core/luasrc/tools/status.lua b/modules/admin-core/luasrc/tools/status.lua index becd7d465..27bc925bd 100644 --- a/modules/admin-core/luasrc/tools/status.lua +++ b/modules/admin-core/luasrc/tools/status.lua @@ -58,6 +58,34 @@ local function dhcp_leases_common(family) fd:close() end + local fd = io.open("/tmp/hosts/odhcpd", "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 and iaid ~= "ipv4" and family == 6 then + rv[#rv+1] = { + expires = os.difftime(tonumber(ts) or 0, os.time()), + duid = duid, + ip6addr = ip, + hostname = (name ~= "-") and name + } + elseif ip and iaid == "ipv4" and family == 4 then + rv[#rv+1] = { + expires = os.difftime(tonumber(ts) or 0, os.time()), + macaddr = duid, + ipaddr = ip, + hostname = (name ~= "-") and name + } + end + end + end + fd:close() + end + return rv end @@ -66,35 +94,7 @@ function dhcp_leases() end function dhcp6_leases() - 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) - end + return dhcp_leases_common(6) end function wifi_networks() diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua b/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua index 7b5a42c22..581790839 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua @@ -241,6 +241,8 @@ mac.rmempty = true ip = s:option(Value, "ip", translate("IPv4-Address")) ip.datatype = "or(ip4addr,'ignore')" +hostid = s:option(Value, "hostid", translate("IPv6-Suffix (hex)")) + sys.net.arptable(function(entry) ip:value(entry["IP address"]) mac:value( diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua index f483dfa86..cdd1c133e 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -405,7 +405,7 @@ if has_dnsmasq and net:proto() == "static" then end end) - if not has_section then + if not has_section and has_dnsmasq then s = m2:section(TypedSection, "dhcp", translate("DHCP Server")) s.anonymous = true @@ -416,13 +416,14 @@ if has_dnsmasq and net:proto() == "static" then x.inputtitle = translate("Setup DHCP Server") x.inputstyle = "apply" - else + elseif has_section then s = m2:section(TypedSection, "dhcp", translate("DHCP Server")) s.addremove = false s.anonymous = true s:tab("general", translate("General Setup")) s:tab("advanced", translate("Advanced Settings")) + s:tab("ipv6", translate("IPv6 Settings")) function s.filter(self, section) return m2.uci:get("dhcp", section, "interface") == arg[1] @@ -481,6 +482,41 @@ if has_dnsmasq and net:proto() == "static" then end end + o = s:taboption("ipv6", ListValue, "ra", translate("Router Advertisement-Service")) + o:value("", translate("disabled")) + o:value("server", translate("server mode")) + o:value("relay", translate("relay mode")) + o:value("hybrid", translate("hybrid mode")) + + o = s:taboption("ipv6", ListValue, "dhcpv6", translate("DHCPv6-Service")) + o:value("", translate("disabled")) + o:value("server", translate("server mode")) + o:value("relay", translate("relay mode")) + o:value("hybrid", translate("hybrid mode")) + + o = s:taboption("ipv6", ListValue, "ndp", translate("NDP-Proxy")) + o:value("", translate("disabled")) + o:value("relay", translate("relay mode")) + o:value("hybrid", translate("hybrid mode")) + + o = s:taboption("ipv6", ListValue, "ra_management", translate("DHCPv6-Mode")) + o:value("", translate("stateless")) + o:value("1", translate("stateless + stateful")) + o:value("2", translate("stateful-only")) + o:depends("dhcpv6", "server") + o:depends("dhcpv6", "hybrid") + o.default = "1" + + o = s:taboption("ipv6", Flag, "ra_default", translate("Always announce default router"), + translate("Announce as default router even if no public prefix is available.")) + o:depends("ra", "server") + o:depends("ra", "hybrid") + + s:taboption("ipv6", DynamicList, "dns", translate("Announced DNS servers")) + s:taboption("ipv6", DynamicList, "domain", translate("Announced DNS domains")) + + else + m2 = nil end end diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/ipv6.lua b/modules/admin-full/luasrc/model/cbi/admin_network/ipv6.lua deleted file mode 100644 index 257173e07..000000000 --- a/modules/admin-full/luasrc/model/cbi/admin_network/ipv6.lua +++ /dev/null @@ -1,102 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface - -Copyright 2013 Steven Barth - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -]]-- - -local m, s, o - -m = Map("6relayd", translate("IPv6 RA and DHCPv6"), - translate("6relayd is a daemon for serving and relaying IPv6 management protocols to ".. - "configure clients and downstream routers. ".. - "It provides server services for RA, stateless and stateful DHCPv6, ".. - "prefix delegation and can be used to relay RA, DHCPv6 and NDP between routed ".. - "(non-bridged) interfaces in case no delegated prefixes are available.")) - -s = m:section(TypedSection, "server", translate("Server Settings")) -s.addremove = false -s.anonymous = true - - -o = s:option(DynamicList, "network", translate("Service Interfaces"), - translate("Interfaces to provide services on or to relay services to.")) -o.widget = "checkbox" -o.template = "cbi/network_netlist" -o.nocreate = true -o.nobridges = true -o.novirtual = true -o.optional = false - -o = s:option(ListValue, "rd", translate("Router Advertisement-Service")) -o:value("", translate("disabled")) -o:value("server", translate("server mode")) -o:value("relay", translate("relay mode")) - -o = s:option(ListValue, "dhcpv6", translate("DHCPv6-Service")) -o:value("", translate("disabled")) -o:value("server", translate("server mode")) -o:value("relay", translate("relay mode")) - -o = s:option(ListValue, "management_level", translate("DHCPv6-Mode")) -o:value("", translate("stateless")) -o:value("1", translate("stateless + stateful")) -o:value("2", translate("stateful-only")) -o:depends("dhcpv6", "server") - -o = s:option(ListValue, "ndp", translate("NDP-Proxy")) -o:value("", translate("disabled")) -o:value("relay", translate("relay mode")) - -o = s:option(Flag, "fallback_relay", translate("Fallback to relay"), - translate("Relay services from master to server interfaces when there is no public prefix available.")) -o.enabled = "rd dhcpv6 ndp" -o.disabled = "" - -o = s:option(Value, "master", translate("Master Interface"), - translate("Specifies the master interface for services that are relayed.")) -o.template = "cbi/network_netlist" -o.nocreate = true -o:depends("rd", "relay") -o:depends("dhcpv6", "relay") -o:depends("ndp", "relay") -o:depends("fallback_relay", "rd dhcpv6 ndp") - -o = s:option(Flag, "always_rewrite_dns", translate("Always announce local DNS"), - translate("Announce the local router as DNS server even in relay mode.")) -o:depends("rd", "relay") -o:depends("dhcpv6", "relay") -o:depends("fallback_relay", "rd dhcpv6 ndp") - -o = s:option(Value, "rewrite_dns_addr", translate("Override announced DNS-server"), - translate("Announce a custom DNS-server instead of the local one.")) - -o = s:option(Flag, "always_assume_default", translate("Always announce default router"), - translate("Announce as default router even if no public prefix is available.")) -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)") .. "
" .. - translate("Use the Add Button to add a new lease entry. The DUID " .. - "indentifies the host, the Interface-ID 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 -- 2.25.1