modules/admin-full: finally sort out dhcp setup issues in interface settings
This commit is contained in:
parent
baa7e82693
commit
bc8eaf6875
1 changed files with 96 additions and 91 deletions
|
@ -58,6 +58,20 @@ if not net then
|
||||||
return
|
return
|
||||||
end
|
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]
|
local ifc = net:get_interfaces()[1]
|
||||||
|
|
||||||
s = m:section(NamedSection, arg[1], "interface", translate("Common Configuration"))
|
s = m:section(NamedSection, arg[1], "interface", translate("Common Configuration"))
|
||||||
|
@ -668,101 +682,92 @@ end
|
||||||
|
|
||||||
if has_dnsmasq and net:proto() == "static" then
|
if has_dnsmasq and net:proto() == "static" then
|
||||||
m2 = Map("dhcp", "", "")
|
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 has_section = false
|
||||||
local c = 1
|
|
||||||
section_id = arg[1]
|
m2.uci:foreach("dhcp", "dhcp", function(s)
|
||||||
while m2.uci:get("dhcp", section_id) do
|
if s.interface == arg[1] then
|
||||||
section_id = arg[1] .. c
|
has_section = true
|
||||||
c = c + 1
|
return false
|
||||||
|
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
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
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."))
|
|
||||||
|
|
||||||
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
|
|
||||||
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
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue