modules/admin-full: allow special value "ignore" for static lease ip address (#558)
[project/luci.git] / modules / admin-full / luasrc / model / cbi / admin_network / dhcp.lua
index 27a4156..7b5a42c 100644 (file)
@@ -14,13 +14,13 @@ $Id$
 
 local sys = require "luci.sys"
 
-m = Map("dhcp", translate("DHCP Server"),
+m = Map("dhcp", translate("DHCP and DNS"),
        translate("Dnsmasq is a combined <abbr title=\"Dynamic Host Configuration Protocol" ..
                "\">DHCP</abbr>-Server and <abbr title=\"Domain Name System\">DNS</abbr>-" ..
                "Forwarder for <abbr title=\"Network Address Translation\">NAT</abbr> " ..
                "firewalls"))
 
-s = m:section(TypedSection, "dnsmasq", translate("Settings"))
+s = m:section(TypedSection, "dnsmasq", translate("Server Settings"))
 s.anonymous = true
 s.addremove = false
 
@@ -79,6 +79,7 @@ s:taboption("advanced", Flag, "filterwin2k",
        translate("Filter useless"),
        translate("Do not forward requests that cannot be answered by public name servers"))
 
+
 s:taboption("advanced", Flag, "localise_queries",
        translate("Localise queries"),
        translate("Localise hostname depending on the requesting subnet if multiple IPs are available"))
@@ -104,6 +105,14 @@ s:taboption("advanced", Flag, "strictorder",
        translate("<abbr title=\"Domain Name System\">DNS</abbr> servers will be queried in the " ..
                "order of the resolvfile")).optional = true
 
+
+bn = s:taboption("advanced", DynamicList, "bogusnxdomain", translate("Bogus NX Domain Override"),
+       translate("List of hosts that supply bogus NX domain results"))
+
+bn.optional = true
+bn.placeholder = "67.215.65.132"
+
+
 s:taboption("general", Flag, "logqueries",
        translate("Log queries"),
        translate("Write received DNS requests to syslog")).optional = true
@@ -169,7 +178,7 @@ lm.placeholder = translate("unlimited")
 
 em = s:taboption("advanced", Value, "ednspacket_max",
        translate("<abbr title=\"maximal\">Max.</abbr> <abbr title=\"Extension Mechanisms for " ..
-               "Domain Name System\">EDNS0</abbr> paket size"),
+               "Domain Name System\">EDNS0</abbr> packet size"),
        translate("Maximum allowed size of EDNS.0 UDP packets"))
 
 em.optional = true
@@ -207,14 +216,12 @@ db:depends("enable_tftp", "1")
 db.placeholder = "pxelinux.0"
 
 
-m2 = Map("dhcp", translate("DHCP Leases"),
+m:section(SimpleSection).template = "admin_network/lease_status"
+
+s = m:section(TypedSection, "host", translate("Static Leases"),
        translate("Static leases are used to assign fixed IP addresses and symbolic hostnames to " ..
                "DHCP clients. They are also required for non-dynamic interface configurations where " ..
-               "only hosts with a corresponding lease are served."))
-
-m2:section(SimpleSection).template = "admin_network/lease_status"
-
-s = m2:section(TypedSection, "host", translate("Static Leases"),
+               "only hosts with a corresponding lease are served.") .. "<br />" ..
        translate("Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</em> " ..
                "indentifies the host, the <em>IPv4-Address</em> specifies to the fixed address to " ..
                "use and the <em>Hostname</em> is assigned as symbolic name to the requesting host."))
@@ -228,10 +235,11 @@ name.datatype = "hostname"
 name.rmempty  = true
 
 mac = s:option(Value, "mac", translate("<abbr title=\"Media Access Control\">MAC</abbr>-Address"))
-mac.datatype = "macaddr"
+mac.datatype = "list(macaddr)"
+mac.rmempty  = true
 
 ip = s:option(Value, "ip", translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Address"))
-ip.datatype = "ip4addr"
+ip.datatype = "or(ip4addr,'ignore')"
 
 sys.net.arptable(function(entry)
        ip:value(entry["IP address"])
@@ -241,5 +249,14 @@ sys.net.arptable(function(entry)
        )
 end)
 
+function ip.validate(self, value, section)
+       local m = mac:formvalue(section) or ""
+       local n = name:formvalue(section) or ""
+       if value and #n == 0 and #m == 0 then
+               return nil, translate("One of hostname or mac address must be specified!")
+       end
+       return Value.validate(self, value, section)
+end
+
 
-return m, m2
+return m