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

config APP_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.

	  See http://udhcp.busybox.net for further details.

config APP_DUMPLEASES
	bool "Lease display utility (dumpleases)"
	default n
	depends on APP_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.

	  See http://udhcp.busybox.net for further details.

config APP_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
	  notifies a set of scripts when a lease is obtained or lost.

	  See http://udhcp.busybox.net for further details.

config FEATURE_UDHCP_SYSLOG
	bool "Log udhcp messages to syslog"
	default n
	depends on APP_UDHCPD || APP_UDHCPC
	select FEATURE_SYSLOG
	help
	  If not daemonized, udhcpd prints its messages to stdout/stderr.
	  If this option is selected, it will also log them to syslog.

	  See http://udhcp.busybox.net for further details.

config FEATURE_UDHCP_DEBUG
	bool "Compile udhcp with noisy debugging messages"
	default n
	depends on APP_UDHCPD || APP_UDHCPC
	help
	  If selected, udhcpd will output extra debugging output.  If using
	  this option, compile uDHCP with "-g", and do not fork the daemon to
	  the background.

	  See http://udhcp.busybox.net for further details.
