X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fmodel%2Fcbi%2Fadmin_network%2Fdhcp.lua;h=bf8418f8123c4590f63a2ac361866ccd4294d707;hp=17dcdb8f0071c4a07b26681957517210e27f7be7;hb=536d32950369342c4c1721ddc3a4bb8044e747ad;hpb=19c79a30b91354932b12ffb9f866471b06a570df diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua b/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua index 17dcdb8f0..bf8418f81 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua @@ -11,58 +11,242 @@ You may obtain a copy of the License at $Id$ ]]-- -require("luci.tools.webadmin") -require("luci.model.uci") -require("luci.util") -m = Map("dhcp", "DHCP") +local sys = require "luci.sys" -s = m:section(TypedSection, "dhcp", "") -s.addremove = true +m = Map("dhcp", translate("DHCP and DNS"), + translate("Dnsmasq is a combined DHCP-Server and DNS-" .. + "Forwarder for NAT " .. + "firewalls")) + +s = m:section(TypedSection, "dnsmasq", translate("Server 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 + + +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 -iface = s:option(ListValue, "interface", translate("interface")) -luci.tools.webadmin.cbi_add_networks(iface) +df = s:taboption("general", DynamicList, "server", translate("DNS forwardings"), + translate("List of DNS " .. + "servers to forward requests to")) -local uci = luci.model.uci.cursor() -uci:foreach("network", "interface", - function (section) - if section[".name"] ~= "loopback" then - iface.default = iface.default or section[".name"] - s:depends("interface", section[".name"]) - end - end) +df.optional = true +df.placeholder = "/example.org/10.1.2.3" -uci:foreach("network", "alias", - function (section) - iface:value(section[".name"]) - s:depends("interface", section[".name"]) - end) -s:option(Value, "start", translate("start")).rmempty = true +rp = s:taboption("general", Flag, "rebind_protection", + translate("Rebind protection"), + translate("Discard upstream RFC1918 responses")) -s:option(Value, "limit", translate("limit")).rmempty = true +rp.rmempty = false -s:option(Value, "leasetime").rmempty = true -s:option(Flag, "dynamicdhcp").rmempty = true +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")) -s:option(Value, "name", translate("name")).optional = true +rl:depends("rebind_protection", "1") -ignore = s:option(Flag, "ignore") -ignore.optional = true -s:option(Value, "netmask", translate("netmask")).optional = true +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 packet 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" + + +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.") .. "
" .. + translate("Use the Add Button to add a new lease entry. The MAC-Address " .. + "indentifies the host, the IPv4-Address specifies to the fixed address to " .. + "use and the Hostname is assigned as symbolic name to the requesting host.")) + +s.addremove = true +s.anonymous = true +s.template = "cbi/tblsection" + +name = s:option(Value, "name", translate("Hostname")) +name.datatype = "hostname" +name.rmempty = true -s:option(Flag, "force").optional = true +mac = s:option(Value, "mac", translate("MAC-Address")) +mac.datatype = "list(macaddr)" -s:option(DynamicList, "dhcp_option").optional = true +ip = s:option(Value, "ip", translate("IPv4-Address")) +ip.datatype = "ip4addr" +sys.net.arptable(function(entry) + ip:value(entry["IP address"]) + mac:value( + entry["HW address"], + entry["HW address"] .. " (" .. entry["IP address"] .. ")" + ) +end) -for i, n in ipairs(s.children) do - if n ~= iface and n ~= ignore then - n:depends("ignore", "") - end -end -return m \ No newline at end of file +return m