X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=modules%2Fluci-mod-admin-full%2Fluasrc%2Fmodel%2Fcbi%2Fadmin_network%2Fdhcp.lua;h=10636a491a307cad7903a3446d21044e75d21e9f;hb=e1edb1025cd9e35b3617c20a1117a348971c0421;hp=bd6f403c53002c9ed32e15d816a14a3a6af37d73;hpb=1bb4822dca6113f73e3bc89e2acf15935e6f8e92;p=project%2Fluci.git diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua index bd6f403c5..10636a491 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua @@ -1,18 +1,9 @@ ---[[ -LuCI - Lua Configuration Interface +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. -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$ -]]-- - -local sys = require "luci.sys" +local ipc = require "luci.ip" +local o +require "luci.util" m = Map("dhcp", translate("DHCP and DNS"), translate("Dnsmasq is a combined /etc/hosts")).optional = true -hf = s:taboption("files", DynamicList, "addnhosts", - translate("Additional Hosts files")) +s:taboption("files", DynamicList, "addnhosts", + translate("Additional Hosts files")).optional = true -hf:depends("nohosts", "") -hf.optional = true +qu = s:taboption("advanced", Flag, "quietdhcp", + translate("Suppress logging"), + translate("Suppress logging of the routine operation of these protocols")) +qu.optional = true +se = s:taboption("advanced", Flag, "sequential_ip", + translate("Allocate IP sequentially"), + translate("Allocate IP addresses sequentially, starting from the lowest available address")) +se.optional = true s:taboption("advanced", Flag, "boguspriv", translate("Filter private"), @@ -84,6 +81,19 @@ s:taboption("advanced", Flag, "localise_queries", translate("Localise queries"), translate("Localise hostname depending on the requesting subnet if multiple IPs are available")) +local have_dnssec_support = luci.util.checklib("/usr/sbin/dnsmasq", "libhogweed.so") + +if have_dnssec_support then + o = s:taboption("advanced", Flag, "dnssec", + translate("DNSSEC")) + o.optional = true + + o = s:taboption("advanced", Flag, "dnsseccheckunsigned", + translate("DNSSEC check unsigned"), + translate("Requires upstream supports DNSSEC; verify unsigned domain responses really come from unsigned domains")) + o.optional = true +end + 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")) @@ -100,6 +110,11 @@ s:taboption("advanced", Flag, "nonegcache", translate("No negative cache"), translate("Do not cache negative replies, e.g. for not existing domains")) +s:taboption("advanced", Value, "serversfile", + translate("Additional servers file"), + translate("This file may contain lines like 'server=/domain/1.2.3.4' or 'server=1.2.3.4' for".. + "domain-specific or full upstream DNS servers.")) + s:taboption("advanced", Flag, "strictorder", translate("Strict order"), translate("DNS servers will be queried in the " .. @@ -142,9 +157,10 @@ 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.optional = true rd:depends("rebind_protection", "1") -rd.datatype = "host" +rd.datatype = "host(1)" rd.placeholder = "ihost.netflix.com" @@ -215,6 +231,29 @@ db.optional = true db:depends("enable_tftp", "1") db.placeholder = "pxelinux.0" +o = s:taboption("general", Flag, "localservice", + translate("Local Service Only"), + translate("Limit DNS service to subnets interfaces on which we are serving DNS.")) +o.optional = false +o.rmempty = false + +o = s:taboption("general", Flag, "nonwildcard", + translate("Non-wildcard"), + translate("Bind only to specific interfaces rather than wildcard address.")) +o.optional = false +o.rmempty = false + +o = s:taboption("general", DynamicList, "interface", + translate("Listen Interfaces"), + translate("Limit listening to these interfaces, and loopback.")) +o.optional = true +o:depends("nonwildcard", true) + +o = s:taboption("general", DynamicList, "notinterface", + translate("Exclude interfaces"), + translate("Prevent listening on these interfaces.")) +o.optional = true +o:depends("nonwildcard", true) m:section(SimpleSection).template = "admin_network/lease_status" @@ -224,7 +263,9 @@ s = m:section(TypedSection, "host", translate("Static Leases"), "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.")) + "use and the Hostname is assigned as symbolic name to the requesting host. " .. + "The optional Lease time can be used to set non-standard host-specific " .. + "lease time, e.g. 12h, 3d or infinite.")) s.addremove = true s.anonymous = true @@ -241,14 +282,16 @@ mac.rmempty = true ip = s:option(Value, "ip", translate("IPv4-Address")) ip.datatype = "or(ip4addr,'ignore')" +time = s:option(Value, "leasetime", translate("Lease time")) +time.rmempty = true + 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"] .. ")" - ) +ipc.neighbors({ family = 4 }, function(n) + if n.mac and n.dest then + ip:value(n.dest:string()) + mac:value(n.mac, "%s (%s)" %{ n.mac, n.dest:string() }) + end end) function ip.validate(self, value, section)