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

menu "Networking Utilities"

config CONFIG_FEATURE_IPV6
	bool "Enable IPv6 support"
	default n
	help
	  Enable IPv6 support to busybox. This makes applets that talk IP
	  able to work with IPv6.

config CONFIG_ARPING
	bool "arping"
	default n
	help
	  Ping hosts by ARP packets

config CONFIG_FTPGET
	bool "ftpget"
	default n
	help
	  Retrieve a remote file via FTP.

config CONFIG_FTPPUT
	bool "ftpput"
	default n
	help
	  Store a remote file via FTP.

config CONFIG_HOSTNAME
	bool "hostname"
	default n
	help
	  Show or set the system's host name

config CONFIG_HTTPD
	bool "httpd"
	default n
	help
	  Serve web pages via an HTTP server.

config CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
	bool "  Support using httpd only from inetd"
	default n
	depends on CONFIG_HTTPD
	help
	  This option disables uid and port options for the httpd applet
	  but requires inetd server daemon.

config CONFIG_FEATURE_HTTPD_BASIC_AUTH
	bool "  Enable Basic http Authentication"
	default y
	depends on CONFIG_HTTPD
	help
	  Utilizes password settings from /etc/httpd.conf for basic
	  authentication on a per url basis.

config CONFIG_FEATURE_HTTPD_AUTH_MD5
	bool "  Support MD5 crypted passwords for http Authentication"
	default n
	depends on CONFIG_FEATURE_HTTPD_BASIC_AUTH
	help
	  Enables basic per url authentication from /etc/httpd.conf 
	  using md5 passwords.


if !CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
config CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP
	bool "  Support reloading the global config file using hup signal"
	default n
	depends on CONFIG_HTTPD
	help
	  This option enables processing of SIGHUP to reload cached
	  configuration settings.

config CONFIG_FEATURE_HTTPD_SETUID
	bool "  Enable support -u <user> option"
	default n
	depends on CONFIG_HTTPD
	help
	  This option allows the server to run as a specific user
	  rather than defaulting to the user that starts the server.
	  Use of this option requires special privileges to change to a
	  different user.
endif

config CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES
	bool "  Support loading additional MIME types at run-time"
	default n
	depends on CONFIG_HTTPD
	help
	  This option enables support for additional MIME types at
	  run-time to be specified in the configuration file.

config CONFIG_FEATURE_HTTPD_CGI
	bool "  Support Common Gateway Interface (CGI)"
	default y
	depends on CONFIG_HTTPD
	help
	  This option allows scripts and executables to be invoked
  	  when specific urls are requested.

config CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
	bool "  Support the REMOTE_PORT environment variable for CGI"
	default n
	depends on CONFIG_FEATURE_HTTPD_CGI
	help
	  Use of this option can assist scripts in generating
	  references that contain a unique port number.

config CONFIG_FEATURE_HTTPD_SET_CGI_VARS_TO_ENV
	bool "  Enable setting of CGI_varname=value environment vars for CGI"
	default n
	depends on CONFIG_FEATURE_HTTPD_CGI
	help
	  This option parses POST or GET arguments from a form and
	  sets environment variables with their value.  This simplifies
	  and speeds up CGI scripts.  A form argument of foo=bar would
	  result in a script having the environment variable CGI_foo set
	  to 'bar'.  In addition, this option sets a variable that
	  lists all the argument names.  e.g. CGI_VARNAMES_="name1 name2".

config CONFIG_FEATURE_HTTPD_ENCODE_URL_STR
	bool "  Enable the -e option for shell script CGI simplification."
	default y
	depends on CONFIG_HTTPD
	help
	  After set, this option allows html encoding arbitrary
	  strings for display of the browser.  Output goes to stdout.
	  For example, httpd -e "<Hello World>" as
	  "&#60Hello&#32World&#62".

config CONFIG_IFCONFIG
	bool "ifconfig"
	default n
	help
	  Ifconfig is used to configure the kernel-resident network interfaces.

config CONFIG_FEATURE_IFCONFIG_STATUS
	bool "  Enable status reporting output (+7k)"
	default y
	depends on CONFIG_IFCONFIG
	help
	  If ifconfig is called with no arguments it will display the status
	  of the currently active interfaces.

config CONFIG_FEATURE_IFCONFIG_SLIP
	bool "  Enable slip-specific options \"keepalive\" and \"outfill\""
	default n
	depends on CONFIG_IFCONFIG
	help
	  Allow "keepalive" and "outfill" support for SLIP.  If you're not
	  planning on using serial lines, leave this unchecked.

config CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ
	bool "  Enable options \"mem_start\", \"io_addr\", and \"irq\""
	default n
	depends on CONFIG_IFCONFIG
	help
	  Allow the start address for shared memory, start address for I/O,
	  and/or the interrupt line used by the specified device.

config CONFIG_FEATURE_IFCONFIG_HW
	bool "  Enable option \"hw\" (ether only)"
	default y
	depends on CONFIG_IFCONFIG
	help
	  Set the hardware address of this interface, if the device driver
	  supports  this  operation.  Currently, we only support the 'ether'
	  class.

config CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS
	bool "  Set the broadcast automatically"
	default n
	depends on CONFIG_IFCONFIG
	help
	  Setting this will make ifconfig attempt to find the broadcast
	  automatically if the value '+' is used.

config CONFIG_IFUPDOWN
	bool "ifupdown"
	default n
	help
	  Activate or deactivate the specified interfaces.  This applet makes
	  use of either "ifconfig" and "route" or the "ip" command to actually
	  configure network interfaces.  Therefore, you will probably also want
	  to enable either CONFIG_IFCONFIG and CONFIG_ROUTE, or enable
	  CONFIG_FEATURE_IFUPDOWN_IP and the various CONFIG_IP options.  Of
	  course you could use non-busybox versions of these programs, so
	  against my better judgement (since this will surely result in plenty
	  of support questions on the mailing list), I do not force you to
	  enable these additional options.  It is up to you to supply either
	  "ifconfig" and "route" or the "ip" command, either via busybox or via
	  standalone utilities.

config CONFIG_FEATURE_IFUPDOWN_IP
	bool "  Use ip applet"
	default n
	depends on CONFIG_IFUPDOWN 
	help
	  Use the iproute "ip" command to implement "ifup" and "ifdown", rather
	  than the default of using the older 'ifconfig' and 'route' utilities.

config CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN
	bool "  Use busybox ip applet"
	default y
	depends on CONFIG_FEATURE_IFUPDOWN_IP
	select CONFIG_IP
	select CONFIG_FEATURE_IP_ADDRESS
	select CONFIG_FEATURE_IP_LINK
	select CONFIG_FEATURE_IP_ROUTE
	help
	  Use the busybox iproute "ip" applet to implement "ifupdown".

	  If leave this disabled, you must install the full-blown iproute2
	  utility or the  "ifup" and "ifdown" applets will not work.

config CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN
	bool "  Use busybox ifconfig and route applets"
	default y
	depends on CONFIG_IFUPDOWN && !CONFIG_FEATURE_IFUPDOWN_IP
	select CONFIG_IFCONFIG
	select CONFIG_ROUTE
	help
	  Use the busybox iproute "ifconfig" and "route" applets to 
	  implement the "ifup" and "ifdown" utilities.

	  If leave this disabled, you must install the full-blown ifconfig
	  and route utilities, or the  "ifup" and "ifdown" applets will not 
	  work.

config CONFIG_FEATURE_IFUPDOWN_IPV4
	bool "  Enable support for IPv4"
	default y
	depends on CONFIG_IFUPDOWN
	help
	  If you want busybox to talk IPv4, leave this on.

config CONFIG_FEATURE_IFUPDOWN_IPV6
	bool "  Enable support for IPv6"
	default n
	depends on CONFIG_IFUPDOWN
	help
	  If you need support for IPv6, turn this option on.

config CONFIG_FEATURE_IFUPDOWN_IPX
	bool "  Enable support for IPX"
	default n
	depends on CONFIG_IFUPDOWN
	help
	  If this option is selected you can use busybox to work with IPX
	  networks.

config CONFIG_FEATURE_IFUPDOWN_MAPPING
	bool "  Enable mapping support"
	default n
	depends on CONFIG_IFUPDOWN
	help
	  This enables support for the "mapping" stanza, unless you have
	  a weird network setup you don't need it.

config CONFIG_INETD
	bool "inetd"
	default n
	help
	  Internet superserver daemon

config CONFIG_FEATURE_INETD_SUPPORT_BILTIN_ECHO
	bool "  Support echo service"
	default y
	depends on CONFIG_INETD
	help
	  Echo received data internal inetd service

config CONFIG_FEATURE_INETD_SUPPORT_BILTIN_DISCARD
	bool "  Support discard service"
	default y
	depends on CONFIG_INETD
	help
	  Internet /dev/null internal inetd service

config CONFIG_FEATURE_INETD_SUPPORT_BILTIN_TIME
	bool "  Support time service"
	default y
	depends on CONFIG_INETD
	help
	  Return 32 bit time since 1900 internal inetd service

config CONFIG_FEATURE_INETD_SUPPORT_BILTIN_DAYTIME
	bool "  Support daytime service"
	default y
	depends on CONFIG_INETD
	help
	  Return human-readable time internal inetd service

config CONFIG_FEATURE_INETD_SUPPORT_BILTIN_CHARGEN
	bool "  Support chargen service"
	default y
	depends on CONFIG_INETD
	help
	  Familiar character generator internal inetd service


config CONFIG_IP
	bool "ip"
	default n
	help
	  The "ip" applet is a TCP/IP interface configuration and routing
	  utility.  You generally don't need "ip" to use busybox with
	  TCP/IP.

if CONFIG_IP && CONFIG_IPADDR
	config CONFIG_FEATURE_IP_ADDRESS
		default y
	comment "  address (forced enabled for ipaddr)"
endif
if ! (CONFIG_IP && CONFIG_IPADDR)
	config CONFIG_FEATURE_IP_ADDRESS
		bool "  address"
		default y
		depends on CONFIG_IP
		help
		  Address manipulation support for the "ip" applet.
endif

if CONFIG_IP && CONFIG_IPLINK
	config CONFIG_FEATURE_IP_LINK
		default y
	comment "  link (forced enabled for iplink)"
endif
if !(CONFIG_IP && CONFIG_IPLINK)
	config CONFIG_FEATURE_IP_LINK
		bool "  link"
		default y
		depends on CONFIG_IP
		help
		  Configure network devices with "ip".
endif

if CONFIG_IP && CONFIG_IPROUTE
	config CONFIG_FEATURE_IP_ROUTE
		default y
	comment "  route (forced enabled for iproute)"
endif
if !(CONFIG_IP && CONFIG_IPROUTE)
	config CONFIG_FEATURE_IP_ROUTE
		bool "  route"
		default y
		depends on CONFIG_IP
		help
		  Add support for routing table management to "ip".  
endif

if CONFIG_IP && CONFIG_IPTUNNEL
	config CONFIG_FEATURE_IP_TUNNEL
		default y
	comment "  tunnel (forced enabled for iptunnel)"
endif
if !(CONFIG_IP && CONFIG_IPTUNNEL)
	config CONFIG_FEATURE_IP_TUNNEL
		bool "  tunnel"
		default n
		depends on CONFIG_IP
		help
		  Add support for tunneling commands to "ip".
endif

config CONFIG_IPCALC
	bool "ipcalc"
	default n
	help
	  ipcalc takes an IP address and netmask and calculates the
	  resulting broadcast, network, and host range.

config CONFIG_FEATURE_IPCALC_FANCY
	bool "  Fancy IPCALC, more options, adds 1 kbyte"
	default y
	depends on CONFIG_IPCALC
	help
	  Adds the options hostname, prefix and silent to the output of "ipcalc".

config CONFIG_IPADDR
	bool "ipaddr"
	default n
	help
	  Equivalent to selecting address support to "ip", above.

config CONFIG_IPLINK
	bool "iplink"
	default n
	help
	  Equivalent to selecting link support to "ip", above.

config CONFIG_IPROUTE
	bool "iproute"
	default n
	help
	  Equivalent to selecting route support to "ip", above.

config CONFIG_IPTUNNEL
	bool "iptunnel"
	default n
	help
	  Equivalent to selecting tunnel support to "ip", above.

config CONFIG_NAMEIF
	bool "nameif"
	default n
	help
	  nameif is used to rename network interface by its MAC address.
	  Renamed interfaces MUST be in the down state.
	  It is possible to use a file (default: /etc/mactab)
	  with list of new interface names and MACs.
	  Maximum interface name length: IF_NAMESIZE = 16
	  File fields are separated by space or tab.
	  File format:
	  # Comment
	  new_interface_name	XX:XX:XX:XX:XX:XX

config CONFIG_NC
	bool "nc"
	default n
	help
	  A simple Unix utility which reads and writes data across network
	  connections.

config CONFIG_NETSTAT
	bool "netstat"
	default n
	help
	  netstat prints information about the Linux networking subsystem.

config CONFIG_NSLOOKUP
	bool "nslookup"
	default n
	help
	  nslookup is a tool to query Internet name servers.

config CONFIG_PING
	bool "ping"
	default n
	help
	  ping uses the ICMP protocol's mandatory ECHO_REQUEST datagram to
	  elicit an ICMP ECHO_RESPONSE from a host or gateway.

config CONFIG_FEATURE_FANCY_PING
	bool "  Enable fancy ping output"
	default y
	depends on CONFIG_PING
	help
	  Make the output from the ping applet include statistics, and at the
	  same time provide full support for ICMP packets.

config CONFIG_PING6
	bool "ping6"
	default n
	depends on CONFIG_FEATURE_IPV6
	help
	  This will give you a ping that can talk IPv6.

config CONFIG_FEATURE_FANCY_PING6
	bool "  Enable fancy ping6 output"
	default y
	depends on CONFIG_PING6
	help
	  Make the output from the ping6 applet include statistics, and at the
	  same time provide full support for ICMP packets.

config CONFIG_ROUTE
	bool "route"
	default n
	help
	  Route displays or manipulates the kernel's IP routing tables.

config CONFIG_TELNET
	bool "telnet"
	default n
	help
	  Telnet is an interface to the TELNET protocol, but is also commonly
	  used to test other simple protocols.

config CONFIG_FEATURE_TELNET_TTYPE
	bool "  Pass TERM type to remote host"
	default y
	depends on CONFIG_TELNET
	help
	  Setting this option will forward the TERM environment variable to the
	  remote host you are connecting to.  This is useful to make sure that
	  things like ANSI colors and other control sequences behave.

config CONFIG_TELNETD
	bool "telnetd"
	default n
	help
	  A daemon for the TELNET protocol, allowing you to log onto the host
	  running the daemon.  Please keep in mind that the TELNET protocol
	  sends passwords in plain text.  If you can't afford the space for
	  any SSH daemon and you trust your network, you may say 'y' here.

config CONFIG_FEATURE_TELNETD_INETD
	bool "  Support call from inetd only"
	default n
	depends on CONFIG_TELNETD
	help
	  Selecting this will make telnetd only callable from inetd,
	  removing the standalone support.

config CONFIG_TFTP
	bool "tftp"
	default n
	help
	  This enables the Trivial File Transfer Protocol client program.  TFTP
	  is usually used for simple, small transfers such as a root image
	  for a network-enabled bootloader.

config CONFIG_FEATURE_TFTP_GET
	bool "  Enable \"get\" command"
	default y
	depends on CONFIG_TFTP
	help
	  Add support for the GET command within the TFTP client.  This allows
	  a client to retrieve a file from a TFTP server.

config CONFIG_FEATURE_TFTP_PUT
	bool "  Enable \"put\" command"
	default y
	depends on CONFIG_TFTP
	help
	  Add support for the PUT command within the TFTP client.  This allows
	  a client to transfer a file to a TFTP server.

config CONFIG_FEATURE_TFTP_BLOCKSIZE
	bool "  Enable \"blocksize\" command"
	default n
	depends on CONFIG_TFTP
	help
	  Allow the client to specify the desired block size for transfers.

config CONFIG_FEATURE_TFTP_DEBUG
	bool "  Enable debug"
	default n
	depends on CONFIG_TFTP
	help
	  Enable debug settings for tftp.  This is useful if you're running
	  into problems with tftp as the protocol doesn't help you much when
	  you run into problems.

config CONFIG_TRACEROUTE
	bool "traceroute"
	default n
	help
	  Utility to trace the route of IP packets

config CONFIG_FEATURE_TRACEROUTE_VERBOSE
	bool "  Enable verbose output"
	default n
	depends on CONFIG_TRACEROUTE
	help
	  Add some verbosity to traceroute.  This includes amongst other things
	  hostnames and ICMP response types.

config CONFIG_VCONFIG
	bool "vconfig"
	default n
	help
	  Creates, removes, and configures VLAN interfaces

config CONFIG_WGET
	bool "wget"
	default n
	help
	  wget is a utility for non-interactive download of files from HTTP,
	  HTTPS, and FTP servers.

config CONFIG_FEATURE_WGET_STATUSBAR
	bool "  Enable a nifty process meter (+2k)"
	default y
	depends on CONFIG_WGET
	help
	  Enable the transfer progress bar for wget transfers.

config CONFIG_FEATURE_WGET_AUTHENTICATION
	bool "  Enable HTTP authentication"
	default y
	depends on CONFIG_WGET
	help
	  Support authenticated HTTP transfers.

config CONFIG_FEATURE_WGET_IP6_LITERAL
	bool "  Enable IPv6 literal addresses"
	default y
	depends on CONFIG_WGET
	help
	  Support IPv6 address literal notation in URLs.

source networking/udhcp/Config.in

endmenu

