From bc8eaf6875fb195484b0a86e71ea92dc63b82ded Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sat, 17 Sep 2011 23:43:55 +0000 Subject: [PATCH] modules/admin-full: finally sort out dhcp setup issues in interface settings --- .../luasrc/model/cbi/admin_network/ifaces.lua | 173 +++++++++++---------- 1 file changed, 89 insertions(+), 84 deletions(-) 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 8f5f5e42f..3aef9d71f 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -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")) @@ -668,101 +682,92 @@ end if has_dnsmasq and net:proto() == "static" then m2 = Map("dhcp", "", "") - - local section_id - function m2.on_parse() - m2.uci:foreach("dhcp", "dhcp", function(s) - if s.interface == arg[1] then - section_id = s['.name'] - 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 - - 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")) - - function s.cfgsections(self) - return { section_id } - end - local ignore = s:taboption("general", Flag, "ignore", - translate("Ignore interface"), - translate("Disable DHCP for " .. - "this interface.")) + local has_section = false - 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] - }) + m2.uci:foreach("dhcp", "dhcp", function(s) + if s.interface == arg[1] then + has_section = true + return false 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 - start.datatype = "uinteger" - start.default = "100" - - local limit = s:taboption("general", Value, "limit", translate("Limit"), - translate("Maximum number of leased addresses.")) - limit.optional = true - limit.datatype = "uinteger" - limit.default = "150" + end) - local ltime = s:taboption("general", Value, "leasetime", translate("Leasetime"), - translate("Expiry time of leased addresses, minimum is 2 Minutes (2m).")) - ltime.rmempty = true - ltime.default = "12h" + if not has_section then - local dd = s:taboption("advanced", Flag, "dynamicdhcp", - translate("Dynamic DHCP"), - translate("Dynamically allocate DHCP addresses for clients. If disabled, only " .. - "clients having static leases will be served.")) - dd.default = dd.enabled + s = m2:section(TypedSection, "dhcp", translate("DHCP Server")) + s.anonymous = true + s.cfgsections = function() return { "_enable" } end - s:taboption("advanced", Flag, "force", translate("Force"), - translate("Force DHCP on this network even if another server is detected.")) + x = s:option(Button, "_enable") + x.title = translate("No DHCP Server configured for this interface") + x.inputtitle = translate("Setup DHCP Server") + x.inputstyle = "apply" - -- XXX: is this actually useful? - --s:taboption("advanced", Value, "name", translate("Name"), - -- translate("Define a name for this network.")) + else - mask = s:taboption("advanced", Value, "netmask", - translate("IPv4-Netmask"), - translate("Override the netmask sent to clients. Normally it is calculated " .. - "from the subnet that is served.")) - - mask.optional = true - mask.datatype = "ip4addr" - - s:taboption("advanced", DynamicList, "dhcp_option", translate("DHCP-Options"), - translate("Define additional DHCP options, for example \"6,192.168.2.1," .. - "192.168.2.2\" which advertises different DNS servers to clients.")) + 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")) + function s.filter(self, section) + return m2.uci:get("dhcp", section, "interface") == arg[1] + end - for i, n in ipairs(s.children) do - if n ~= ignore then - n:depends("ignore", "") + local ignore = s:taboption("general", Flag, "ignore", + translate("Ignore interface"), + translate("Disable DHCP for " .. + "this interface.")) + + local start = s:taboption("general", Value, "start", translate("Start"), + translate("Lowest leased address as offset from the network address.")) + start.optional = true + start.datatype = "uinteger" + start.default = "100" + + local limit = s:taboption("general", Value, "limit", translate("Limit"), + translate("Maximum number of leased addresses.")) + limit.optional = true + limit.datatype = "uinteger" + limit.default = "150" + + local ltime = s:taboption("general", Value, "leasetime", translate("Leasetime"), + translate("Expiry time of leased addresses, minimum is 2 Minutes (2m).")) + ltime.rmempty = true + ltime.default = "12h" + + local dd = s:taboption("advanced", Flag, "dynamicdhcp", + translate("Dynamic DHCP"), + translate("Dynamically allocate DHCP addresses for clients. If disabled, only " .. + "clients having static leases will be served.")) + dd.default = dd.enabled + + s:taboption("advanced", Flag, "force", translate("Force"), + translate("Force DHCP on this network even if another server is detected.")) + + -- XXX: is this actually useful? + --s:taboption("advanced", Value, "name", translate("Name"), + -- translate("Define a name for this network.")) + + mask = s:taboption("advanced", Value, "netmask", + translate("IPv4-Netmask"), + translate("Override the netmask sent to clients. Normally it is calculated " .. + "from the subnet that is served.")) + + mask.optional = true + mask.datatype = "ip4addr" + + s:taboption("advanced", DynamicList, "dhcp_option", translate("DHCP-Options"), + translate("Define additional DHCP options, for example \"6,192.168.2.1," .. + "192.168.2.2\" 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 -- 2.11.0