#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

config UDHCPD
	bool "udhcp server (udhcpd)"
	default n
	help
	  udhcpd is a DHCP server geared primarily toward embedded systems,
	  while striving to be fully functional and RFC compliant.

config DHCPRELAY
	bool "dhcprelay"
	default n
	depends on UDHCPD
	help
	  dhcprelay listens for dhcp requests on one or more interfaces
	  and forwards these requests to a different interface or dhcp
	  server.

config DUMPLEASES
	bool "Lease display utility (dumpleases)"
	default n
	depends on UDHCPD
	help
	  dumpleases displays the leases written out by the udhcpd server.
	  Lease times are stored in the file by time remaining in lease, or
	  by the absolute time that it expires in seconds from epoch.

config FEATURE_UDHCPD_WRITE_LEASES_EARLY
	bool "Rewrite the lease file at every new acknowledge"
	default n
	depends on UDHCPD
	help
	  If selected, udhcpd will write a new file with leases every
	  time a new lease has been accepted, thus eliminating the need
	  to send SIGUSR1 for the initial writing or updating. Any timed
	  rewriting remains undisturbed

config DHCPD_LEASES_FILE
	string "Absolute path to lease file"
	default "/var/lib/misc/udhcpd.leases"
	depends on UDHCPD
	help
	  udhcpd stores addresses in a lease file. This is the absolute path
	  of the file. Normally it is safe to leave it untouched.

config UDHCPC
	bool "udhcp client (udhcpc)"
	default n
	help
	  udhcpc is a DHCP client geared primarily toward embedded systems,
	  while striving to be fully functional and RFC compliant.

	  The udhcp client negotiates a lease with the DHCP server and
	  runs a script when a lease is obtained or lost.

config FEATURE_UDHCPC_ARPING
	bool "Verify that the offered address is free, using ARP ping"
	default y
	depends on UDHCPC
	help
	  If selected, udhcpc will send ARP probes and make sure
	  the offered address is really not in use by anyone. The client
	  will DHCPDECLINE the offer if the address is in use,
	  and restart the discover process.

config FEATURE_UDHCP_PORT
	bool "Enable '-P port' option for udhcpd and udhcpc"
	default n
	depends on UDHCPD || UDHCPC
	help
	  At the cost of ~300 bytes, enables -P port option.
	  This feature is typically not needed.

config UDHCP_DEBUG
	int "Maximum verbosity level for udhcp applets (0..9)"
	default 0
	range 0 9
	depends on UDHCPD || UDHCPC || DHCPRELAY
	help
	  Verbosity can be increased with multiple -v options.
	  This options controls how high it can be cranked up.

	  Bigger values result in bigger code. Levels above 1
	  are very verbose and useful for debugging only.

config FEATURE_UDHCP_RFC3397
	bool "Support for RFC3397 domain search (experimental)"
	default n
	depends on UDHCPD || UDHCPC
	help
	  If selected, both client and server will support passing of domain
	  search lists via option 119, specified in RFC3397.

config UDHCPC_DEFAULT_SCRIPT
	string "Absolute path to config script"
	default "/usr/share/udhcpc/default.script"
	depends on UDHCPC
	help
	  This script is called after udhcpc receives an answer. See
	  examples/udhcp for a working example. Normally it is safe
	  to leave this untouched.

config UDHCPC_SLACK_FOR_BUGGY_SERVERS
	int "DHCP options slack buffer size"
	default 80
	range 0 924
	depends on UDHCPD || UDHCPC
	help
	  Some buggy DHCP servers send DHCP offer packets with option
	  field larger than we expect (which might also be considered a
	  buffer overflow attempt). These packets are normally discarded.
	  If circumstances beyond your control force you to support such
	  servers, this may help. The upper limit (924) makes dhcpc accept
	  even 1500 byte packets (maximum-sized ethernet packets).

	  This option does not make dhcp[cd] emit non-standard
	  sized packets.

	  Known buggy DHCP servers:
	  3Com OfficeConnect Remote 812 ADSL Router:
	    seems to confuse maximum allowed UDP packet size with
	    maximum size of entire IP packet, and sends packets which are
	    28 bytes too large.
	  Seednet (ISP) VDSL: sends packets 2 bytes too large.
