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

menu "udhcp Server/Client"

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

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

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

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

config CONFIG_DUMPLEASES
	bool "Lease display utility (dumpleases)"
	default n
	depends on CONFIG_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_FEATURE_UDHCP_SYSLOG
	bool "  Log udhcp messages to syslog (instead of stdout)"
	default n
	depends on CONFIG_UDHCPD || CONFIG_UDHCPC
	help
	  If selected, udhcpd will log all its messages to syslog, otherwise,
	  it will attempt to log them to stdout.

	  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_UDHCPD || CONFIG_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.

endmenu

