X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fmodel%2Fcbi%2Fadmin_network%2Fdhcp.lua;h=bd6f403c53002c9ed32e15d816a14a3a6af37d73;hb=9edd0e46c3f880727738ce8ca6ff1c8b85f99ef4;hp=af018eaa8510b55bfc12137b10e2058a711b4125;hpb=9354c17eabb266afa7f2642c2e97c6b3af93a72c;p=project%2Fluci.git 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 af018eaa85..bd6f403c53 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua @@ -11,60 +11,254 @@ 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 -iface = s:option(ListValue, "interface", translate("interface")) -luci.tools.webadmin.cbi_add_networks(iface) +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")) -luci.model.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) +s:taboption("general", Flag, "domainneeded", + translate("Domain required"), + translate("Don't forward DNS-Requests without " .. + "DNS-Name")) -luci.model.uci.foreach("network", "alias", - function (section) - iface:value(section[".name"]) - s:depends("interface", section[".name"]) - end) +s:taboption("general", Flag, "authoritative", + translate("Authoritative"), + translate("This is the only DHCP in the local network")) -s:option(Value, "start", translate("start")).rmempty = true -s:option(Value, "limit", translate("limit")).rmempty = true +s:taboption("files", Flag, "readethers", + translate("Use /etc/ethers"), + translate("Read /etc/ethers to configure the DHCP-Server")) -s:option(Value, "leasetime").rmempty = true +s:taboption("files", Value, "leasefile", + translate("Leasefile"), + translate("file where given DHCP-leases will be stored")) -s:option(Flag, "dynamicdhcp").rmempty = true +s:taboption("files", Flag, "noresolv", + translate("Ignore resolve file")).optional = true -s:option(Value, "name", translate("name")).optional = true +rf = s:taboption("files", Value, "resolvfile", + translate("Resolve file"), + translate("local DNS file")) -ignore = s:option(Flag, "ignore") -ignore.optional = true +rf:depends("noresolv", "") +rf.optional = true -s:option(Value, "netmask", translate("netmask")).optional = true -s:option(Flag, "force").optional = true +s:taboption("files", Flag, "nohosts", + translate("Ignore Hosts files")).optional = true -for i, line in pairs(luci.util.execl("dnsmasq --help dhcp")) do - k, v = line:match("([^ ]+) +([^ ]+)") - s:option(Value, "dhcp"..k, v).optional = true -end +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 forwarded and are 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 + +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")) + +rp.rmempty = false + + +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 -for i, n in ipairs(s.children) do - if n ~= iface and n ~= ignore then - n:depends("ignore", "") + +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 + +mac = s:option(Value, "mac", translate("MAC-Address")) +mac.datatype = "list(macaddr)" +mac.rmempty = true + +ip = s:option(Value, "ip", translate("IPv4-Address")) +ip.datatype = "or(ip4addr,'ignore')" + +hostid = s:option(Value, "hostid", translate("IPv6-Suffix (hex)")) + +sys.net.arptable(function(entry) + ip:value(entry["IP address"]) + mac:value( + entry["HW address"], + entry["HW address"] .. " (" .. entry["IP address"] .. ")" + ) +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 \ No newline at end of file + +return m