modules/admin-full: finally sort out dhcp setup issues in interface settings

This commit is contained in:
Jo-Philipp Wich 2011-09-17 23:43:55 +00:00
parent baa7e82693
commit bc8eaf6875

View file

@ -58,6 +58,20 @@ if not net then
return
end
-- dhcp setup was requested, create section and reload page
if m:formvalue("cbid.dhcp._enable._enable") then
m.uci:section("dhcp", "dhcp", nil, {
interface = arg[1],
start = "100",
limit = "150",
leasetime = "12h"
})
m.uci:save("dhcp")
luci.http.redirect(luci.dispatcher.build_url("admin/network/network", arg[1]))
return
end
local ifc = net:get_interfaces()[1]
s = m:section(NamedSection, arg[1], "interface", translate("Common Configuration"))
@ -669,24 +683,27 @@ end
if has_dnsmasq and net:proto() == "static" then
m2 = Map("dhcp", "", "")
local section_id
function m2.on_parse()
local has_section = false
m2.uci:foreach("dhcp", "dhcp", function(s)
if s.interface == arg[1] then
section_id = s['.name']
has_section = true
return false
end
end)
if not section_id then
local c = 1
section_id = arg[1]
while m2.uci:get("dhcp", section_id) do
section_id = arg[1] .. c
c = c + 1
end
end
end
if not has_section then
s = m2:section(TypedSection, "dhcp", translate("DHCP Server"))
s.anonymous = true
s.cfgsections = function() return { "_enable" } end
x = s:option(Button, "_enable")
x.title = translate("No DHCP Server configured for this interface")
x.inputtitle = translate("Setup DHCP Server")
x.inputstyle = "apply"
else
s = m2:section(TypedSection, "dhcp", translate("DHCP Server"))
s.addremove = false
@ -694,8 +711,8 @@ if has_dnsmasq and net:proto() == "static" then
s:tab("general", translate("General Setup"))
s:tab("advanced", translate("Advanced Settings"))
function s.cfgsections(self)
return { section_id }
function s.filter(self, section)
return m2.uci:get("dhcp", section, "interface") == arg[1]
end
local ignore = s:taboption("general", Flag, "ignore",
@ -703,19 +720,6 @@ if has_dnsmasq and net:proto() == "static" then
translate("Disable <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> for " ..
"this interface."))
ignore.rmempty = false
ignore.default = ignore.enabled
function ignore.write(self, section, value)
if m2.uci:get("dhcp", section) ~= "dhcp" then
m2.uci:section("dhcp", "dhcp", section, {
interface = arg[1]
})
end
m2.uci:set("dhcp", section, "ignore", (value == "1") and "1" or "0")
end
local start = s:taboption("general", Value, "start", translate("Start"),
translate("Lowest leased address as offset from the network address."))
start.optional = true
@ -758,12 +762,13 @@ if has_dnsmasq and net:proto() == "static" then
translate("Define additional DHCP options, for example \"<code>6,192.168.2.1," ..
"192.168.2.2</code>\" which advertises different DNS servers to clients."))
for i, n in ipairs(s.children) do
if n ~= ignore then
n:depends("ignore", "")
end
end
end
end
return m, m2