summaryrefslogtreecommitdiffhomepage
path: root/modules/admin-full
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2011-09-17 23:43:55 +0000
committerJo-Philipp Wich <jow@openwrt.org>2011-09-17 23:43:55 +0000
commitbc8eaf6875fb195484b0a86e71ea92dc63b82ded (patch)
tree4a718d17e739010ecbd6cee757e435969003ee33 /modules/admin-full
parentbaa7e82693c3cef220bc92c737a39f29c7317108 (diff)
modules/admin-full: finally sort out dhcp setup issues in interface settings
Diffstat (limited to 'modules/admin-full')
-rw-r--r--modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua173
1 files 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 <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> 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 (<code>2m</code>)."))
- ltime.rmempty = true
- ltime.default = "12h"
+ if not has_section then
- local dd = s:taboption("advanced", Flag, "dynamicdhcp",
- translate("Dynamic <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"),
- 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("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-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 \"<code>6,192.168.2.1," ..
- "192.168.2.2</code>\" 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 <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> 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 (<code>2m</code>)."))
+ ltime.rmempty = true
+ ltime.default = "12h"
+
+ local dd = s:taboption("advanced", Flag, "dynamicdhcp",
+ translate("Dynamic <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"),
+ 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("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-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 \"<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