--[[ LuCI - Lua Configuration Interface Copyright 2008 Steven Barth Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 $Id$ ]]-- m = Map("dhcp", "Dnsmasq", translate("Dnsmasq is a combined DHCP-Server and DNS-" .. "Forwarder for NAT " .. "firewalls")) s = m:section(TypedSection, "dnsmasq", translate("Settings")) s.anonymous = true s.addremove = false s:tab("general", translate("General Settings")) s:tab("files", translate("Resolv and Hosts Files")) s:tab("tftp", translate("TFTP Settings")) s:tab("advanced", translate("Advanced Settings")) s:taboption("general", Flag, "domainneeded", translate("Domain required"), translate("Don't forward DNS-Requests without " .. "DNS-Name")) s:taboption("general", Flag, "authoritative", translate("Authoritative"), translate("This is the only DHCP in the local network")) s:taboption("files", Flag, "readethers", translate("Use /etc/ethers"), translate("Read /etc/ethers to configure the DHCP-Server")) s:taboption("files", Value, "leasefile", translate("Leasefile"), translate("file where given DHCP-leases will be stored")) s:taboption("files", Flag, "noresolv", translate("Ignore resolve file")).optional = true rf = s:taboption("files", Value, "resolvfile", translate("Resolve file"), translate("local DNS file")) rf:depends("noresolv", "") rf.optional = true s:taboption("files", Flag, "nohosts", translate("Ignore Hosts files")).optional = true hf = s:taboption("files", DynamicList, "addnhosts", translate("Additional Hosts files")) hf:depends("nohosts", "") hf.optional = true s:taboption("advanced", Flag, "boguspriv", translate("Filter private"), translate("Do not forward reverse lookups for local networks")) 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")) s:taboption("general", Value, "local", translate("Local server"), translate("Local domain specification. Names matching this domain are never forwared and resolved from DHCP or hosts files only")) s:taboption("general", Value, "domain", translate("Local domain"), translate("Local domain suffix appended to DHCP names and hosts file entries")) s:taboption("advanced", Flag, "expandhosts", translate("Expand hosts"), translate("Add local domain suffix to names served from hosts files")) s:taboption("advanced", Flag, "nonegcache", translate("No negative cache"), translate("Do not cache negative replies, e.g. for not existing domains")) s:taboption("advanced", Flag, "strictorder", translate("Strict order"), translate("DNS servers will be queried in the " .. "order of the resolvfile")).optional = true s:taboption("general", Flag, "logqueries", translate("Log queries"), translate("Write received DNS requests to syslog")).optional = true df = s:taboption("general", DynamicList, "server", translate("DNS forwardings"), translate("List of DNS " .. "servers to forward requests to")) df.optional = true df.placeholder = "/example.org/10.1.2.3" rp = s:taboption("general", Flag, "rebind_protection", translate("Rebind protection"), translate("Discard upstream RFC1918 responses")) rl = s:taboption("general", Flag, "rebind_localhost", translate("Allow localhost"), translate("Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services")) rl:depends("rebind_protection", "1") rd = s:taboption("general", DynamicList, "rebind_domain", translate("Domain whitelist"), translate("List of domains to allow RFC1918 responses for")) rd:depends("rebind_protection", "1") rd.datatype = "host" rd.placeholder = "ihost.netflix.com" pt = s:taboption("advanced", Value, "port", translate("DNS server port"), translate("Listening port for inbound DNS queries")) pt.optional = true pt.datatype = "port" pt.placeholder = 53 qp = s:taboption("advanced", Value, "queryport", translate("DNS query port"), translate("Fixed source port for outbound DNS queries")) qp.optional = true qp.datatype = "port" qp.placeholder = translate("any") lm = s:taboption("advanced", Value, "dhcpleasemax", translate("Max. DHCP leases"), translate("Maximum allowed number of active DHCP leases")) lm.optional = true lm.datatype = "uinteger" lm.placeholder = translate("unlimited") em = s:taboption("advanced", Value, "ednspacket_max", translate("Max. EDNS0 paket size"), translate("Maximum allowed size of EDNS.0 UDP packets")) em.optional = true em.datatype = "uinteger" em.placeholder = 1280 cq = s:taboption("advanced", Value, "dnsforwardmax", translate("Max. concurrent queries"), translate("Maximum allowed number of concurrent DNS queries")) cq.optional = true cq.datatype = "uinteger" cq.placeholder = 150 s:taboption("tftp", Flag, "enable_tftp", translate("Enable TFTP server")).optional = true tr = s:taboption("tftp", Value, "tftp_root", translate("TFTP server root"), translate("Root directory for files served via TFTP")) tr.optional = true tr:depends("enable_tftp", "1") tr.placeholder = "/" db = s:taboption("tftp", Value, "dhcp_boot", translate("Network boot image"), translate("Filename of the boot image advertised to clients")) db.optional = true db:depends("enable_tftp", "1") db.placeholder = "pxelinux.0" return m