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

config CONFIG_APP_UDHCPD
	bool "udhcp Server (udhcpd)"
	default n
	select CONFIG_FEATURE_SYSLOG
	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 CONFIG_APP_DUMPLEASES
	bool "Lease display utility (dumpleases)"
	default n
	depends on CONFIG_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 CONFIG_APP_UDHCPC
	bool "udhcp Client (udhcpc)"
	default n
	select CONFIG_FEATURE_SYSLOG
	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 CONFIG_FEATURE_UDHCP_SYSLOG
	bool "Log udhcp messages to syslog"
	default n
	depends on CONFIG_APP_UDHCPD || CONFIG_APP_UDHCPC
	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 CONFIG_FEATURE_UDHCP_DEBUG
	bool "Compile udhcp with noisy debugging messages"
	default n
	depends on CONFIG_APP_UDHCPD || CONFIG_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.
