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

menu "Networking Utilities"

config FEATURE_IPV6
	bool "Enable IPv6 support"
	default n
	help
	  Enable IPv6 support in busybox.
	  This adds IPv6 support in the networking applets.

config FEATURE_PREFER_IPV4_ADDRESS
	bool "Prefer IPv4 addresses from DNS queries"
	default y
	depends on FEATURE_IPV6
	help
	  Use IPv4 address of network host if it has one.

	  If this option is off, the first returned address will be used.
	  This may cause problems when your DNS server is IPv6-capable and
	  is returning IPv6 host addresses too. If IPv6 address
	  precedes IPv4 one in DNS reply, busybox network applets
	  (e.g. wget) will use IPv6 address. On an IPv6-incapable host
	  or network applets will fail to connect to the host
	  using IPv6 address.

config VERBOSE_RESOLUTION_ERRORS
	bool "Verbose resolution errors"
	default n
	help
	  Enable if you are not satisfied with simplistic
	  "can't resolve 'hostname.com'" and want to know more.
	  This may increase size of your executable a bit.

config ARP
	bool "arp"
	default n
	help
	  Manipulate the system ARP cache.

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

config BRCTL
	bool "brctl"
	default n
	help
	  Manage ethernet bridges.
	  Supports addbr/delbr and addif/delif.

config FEATURE_BRCTL_FANCY
	bool "Fancy options"
	default n
	depends on BRCTL
	help
	  Add support for extended option like:
	    setageing, setfd, sethello, setmaxage,
	    setpathcost, setportprio, setbridgeprio,
	    stp
	  This adds about 600 bytes.

config FEATURE_BRCTL_SHOW
	bool "Support show, showmac and showstp"
	default n
	depends on BRCTL && FEATURE_BRCTL_FANCY
	help
	  Add support for option which prints the current config:
	    showmacs, showstp, show

config DNSD
	bool "dnsd"
	default n
	help
	  Small and static DNS server daemon.

config ETHER_WAKE
	bool "ether-wake"
	default n
	help
	  Send a magic packet to wake up sleeping machines.

config FAKEIDENTD
	bool "fakeidentd"
	default n
	select FEATURE_SYSLOG
	help
	  fakeidentd listens on the ident port and returns a predefined
	  fake value on any query.

config FTPD
	bool "ftpd"
	default n
	help
	  simple FTP daemon. You have to run it via inetd.

config FEATURE_FTP_WRITE
	bool "Enable upload commands"
	default y
	depends on FTPD
	help
	  Enable all kinds of FTP upload commands (-w option)

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

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

config FEATURE_FTPGETPUT_LONG_OPTIONS
	bool "Enable long options in ftpget/ftpput"
	default n
	depends on GETOPT_LONG && (FTPGET || FTPPUT)
	help
	  Support long options for the ftpget/ftpput applet.

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

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

config FEATURE_HTTPD_RANGES
	bool "Support 'Ranges:' header"
	default n
	depends on HTTPD
	help
	  Makes httpd emit "Accept-Ranges: bytes" header and understand
	  "Range: bytes=NNN-[MMM]" header. Allows for resuming interrupted
	  downloads, seeking in multimedia players etc.

config FEATURE_HTTPD_USE_SENDFILE
	bool "Use sendfile system call"
	default n
	depends on HTTPD
	help
	  When enabled, httpd will use the kernel sendfile() function
	  instead of read/write loop.

config FEATURE_HTTPD_SETUID
	bool "Enable -u <user> option"
	default n
	depends on 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.

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

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

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

config FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
	bool "Support for running scripts through an interpreter"
	default n
	depends on FEATURE_HTTPD_CGI
	help
	  This option enables support for running scripts through an
	  interpreter. Turn this on if you want PHP scripts to work
	  properly. You need to supply an additional line in your httpd
	  config file:
	  *.php:/path/to/your/php

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

config FEATURE_HTTPD_ENCODE_URL_STR
	bool "Enable -e option (useful for CGIs written as shell scripts)"
	default y
	depends on HTTPD
	help
	  This option allows html encoding of arbitrary strings for display
	  by the browser. Output goes to stdout.
	  For example, httpd -e "<Hello World>" produces
	  "&#60Hello&#32World&#62".

config FEATURE_HTTPD_ERROR_PAGES
	bool "Support for custom error pages"
	default n
	depends on HTTPD
	help
	  This option allows you to define custom error pages in
	  the configuration file instead of the default HTTP status
	  error pages. For instance, if you add the line:
	        E404:/path/e404.html
	  in the config file, the server will respond the specified
	  '/path/e404.html' file instead of the terse '404 NOT FOUND'
	  message.

config FEATURE_HTTPD_PROXY
	bool "Support for reverse proxy"
	default n
	depends on HTTPD
	help
	  This option allows you to define URLs that will be forwarded
	  to another HTTP server. To setup add the following line to the
	  configuration file
	        P:/url/:http://hostname[:port]/new/path/
	  Then a request to /url/myfile will be forwarded to
	  http://hostname[:port]/new/path/myfile.

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

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

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

config FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ
	bool "Enable options \"mem_start\", \"io_addr\", and \"irq\""
	default n
	depends on 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 FEATURE_IFCONFIG_HW
	bool "Enable option \"hw\" (ether only)"
	default y
	depends on IFCONFIG
	help
	  Set the hardware address of this interface, if the device driver
	  supports  this  operation. Currently, we only support the 'ether'
	  class.

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

config IFENSLAVE
	bool "ifenslave"
	default n
	help
	  Userspace application to bind several interfaces
	  to a logical interface (use with kernel bonding driver).

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 IFCONFIG and ROUTE, or enable
	  FEATURE_IFUPDOWN_IP and the various 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", "route" and "run-parts" or the "ip" command, either
	  via busybox or via standalone utilities.

config IFUPDOWN_IFSTATE_PATH
	string "Absolute path to ifstate file"
	default "/var/run/ifstate"
	depends on IFUPDOWN
	help
	  ifupdown keeps state information in a file called ifstate.
	  Typically it is located in /var/run/ifstate, however
	  some distributions tend to put it in other places
	  (debian, for example, uses /etc/network/run/ifstate).
	  This config option defines location of ifstate.

config FEATURE_IFUPDOWN_IP
	bool "Use ip applet"
	default n
	depends on 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 FEATURE_IFUPDOWN_IP_BUILTIN
	bool "Use busybox ip applet"
	default y
	depends on FEATURE_IFUPDOWN_IP
	select IP
	select FEATURE_IP_ADDRESS
	select FEATURE_IP_LINK
	select FEATURE_IP_ROUTE
	help
	  Use the busybox iproute "ip" applet to implement "ifupdown".

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

config FEATURE_IFUPDOWN_IFCONFIG_BUILTIN
	bool "Use busybox ifconfig and route applets"
	default y
	depends on IFUPDOWN && !FEATURE_IFUPDOWN_IP
	select IFCONFIG
	select ROUTE
	help
	  Use the busybox iproute "ifconfig" and "route" applets to
	  implement the "ifup" and "ifdown" utilities.

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

config FEATURE_IFUPDOWN_IPV4
	bool "Support for IPv4"
	default y
	depends on IFUPDOWN
	help
	  If you want ifup/ifdown to talk IPv4, leave this on.

config FEATURE_IFUPDOWN_IPV6
	bool "Support for IPv6"
	default n
	depends on IFUPDOWN && FEATURE_IPV6
	help
	  If you need support for IPv6, turn this option on.

### UNUSED
###config FEATURE_IFUPDOWN_IPX
###	bool "Support for IPX"
###	default n
###	depends on IFUPDOWN
###	help
###	  If this option is selected you can use busybox to work with IPX
###	  networks.

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

config FEATURE_IFUPDOWN_EXTERNAL_DHCP
	bool "Support for external dhcp clients"
	default n
	depends on IFUPDOWN
	help
	  This enables support for the external dhcp clients. Clients are
	  tried in the following order: dhcpcd, dhclient, pump and udhcpc.
	  Otherwise, if udhcpc applet is enabled, it is used.
	  Otherwise, ifup/ifdown will have no support for DHCP.

config INETD
	bool "inetd"
	default n
	select FEATURE_SYSLOG
	help
	  Internet superserver daemon

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

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

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

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

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

config FEATURE_INETD_RPC
	bool "Support RPC services"
	default n
	depends on INETD
	select FEATURE_HAVE_RPC
	help
	  Support Sun-RPC based services

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.

config FEATURE_IP_ADDRESS
	bool "ip address"
	default y
	depends on IP
	help
	  Address manipulation support for the "ip" applet.

config FEATURE_IP_LINK
	bool "ip link"
	default y
	depends on IP
	help
	  Configure network devices with "ip".

config FEATURE_IP_ROUTE
	bool "ip route"
	default y
	depends on IP
	help
	  Add support for routing table management to "ip".

config FEATURE_IP_TUNNEL
	bool "ip tunnel"
	default n
	depends on IP
	help
	  Add support for tunneling commands to "ip".

config FEATURE_IP_RULE
	bool "ip rule"
	default n
	depends on IP
	help
	  Add support for rule commands to "ip".

config FEATURE_IP_SHORT_FORMS
	bool "Support short forms of ip commands"
	default n
	depends on IP
	help
	  Also support short-form of ip <OBJECT> commands:
	  ip addr   -> ipaddr
	  ip link   -> iplink
	  ip route  -> iproute
	  ip tunnel -> iptunnel
	  ip rule   -> iprule

	  Say N unless you desparately need the short form of the ip
	  object commands.

config FEATURE_IP_RARE_PROTOCOLS
	bool "Support displaying rarely used link types"
	default n
	depends on IP
	help
	  If you are not going to use links of type "frad", "econet",
	  "bif" etc, you probably don't need to enable this.
	  Ethernet, wireless, infrared, ppp/slip, ip tunnelling
	  link types are supported without this option selected.

config IPADDR
	bool
	default y
	depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_ADDRESS

config IPLINK
	bool
	default y
	depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_LINK

config IPROUTE
	bool
	default y
	depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_ROUTE

config IPTUNNEL
	bool
	default y
	depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_TUNNEL

config IPRULE
	bool
	default y
	depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_RULE

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

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

config FEATURE_IPCALC_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on IPCALC && GETOPT_LONG
	help
	  Support long options for the ipcalc applet.

config NAMEIF
	bool "nameif"
	default n
	select FEATURE_SYSLOG
	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: IFNAMSIZ = 16
	  File fields are separated by space or tab.
	  File format:
	  # Comment
	  new_interface_name    XX:XX:XX:XX:XX:XX

config FEATURE_NAMEIF_EXTENDED
	bool "Extended nameif"
	default n
	depends on NAMEIF
	help
	  This extends the nameif syntax to support the bus_info and driver
	  checks. The syntax is compatible to the normal nameif.
	  File format:
	    new_interface_name  driver=asix bus=usb-0000:00:08.2-3
	    new_interface_name  bus=usb-0000:00:08.2-3 00:80:C8:38:91:B5
	    new_interface_name  mac=00:80:C8:38:91:B5
	    new_interface_name  00:80:C8:38:91:B5

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

config NC_SERVER
	bool "Netcat server options (-l)"
	default n
	depends on NC
	help
	  Allow netcat to act as a server.

config NC_EXTRA
	bool "Netcat extensions (-eiw and filename)"
	default n
	depends on NC
	help
	  Add -e (support for executing the rest of the command line after
	  making or receiving a successful connection), -i (delay interval for
	  lines sent), -w (timeout for initial connection).

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

config FEATURE_NETSTAT_WIDE
	bool "Enable wide netstat output"
	default n
	depends on NETSTAT
	help
	  Add support for wide columns. Useful when displaying IPv6 addresses
	  (-W option).

config FEATURE_NETSTAT_PRG
	bool "Enable PID/Program name output"
	default n
	depends on NETSTAT
	help
	  Add support for -p flag to print out PID and program name.
	  +700 bytes of code.

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

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 PING6
	bool "ping6"
	default n
	depends on FEATURE_IPV6 && PING
	help
	  This will give you a ping that can talk IPv6.

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

config PSCAN
	bool "pscan"
	default n
	help
	  Simple network port scanner.

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

config SLATTACH
	bool "slattach"
	default n
	help
	  slattach is a small utility to attach network interfaces to serial
	  lines.

#config TC
#	bool "tc"
#	default n
#	help
#	  show / manipulate traffic control settings
#
#config FEATURE_TC_INGRESS
#	def_bool n
#	depends on TC

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 FEATURE_TELNET_TTYPE
	bool "Pass TERM type to remote host"
	default y
	depends on 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 FEATURE_TELNET_AUTOLOGIN
	bool "Pass USER type to remote host"
	default y
	depends on TELNET
	help
	  Setting this option will forward the USER environment variable to the
	  remote host you are connecting to. This is useful when you need to
	  log into a machine without telling the username (autologin). This
	  option enables `-a' and `-l USER' arguments.

config TELNETD
	bool "telnetd"
	default n
	select FEATURE_SYSLOG
	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 an
	  SSH daemon and you trust your network, you may say 'y' here. As a
	  more secure alternative, you should seriously consider installing the
	  very small Dropbear SSH daemon instead:
		http://matt.ucc.asn.au/dropbear/dropbear.html

	  Note that for busybox telnetd to work you need several things:
	  First of all, your kernel needs:
		  UNIX98_PTYS=y
		  DEVPTS_FS=y

	  Next, you need a /dev/pts directory on your root filesystem:

		  $ ls -ld /dev/pts
		  drwxr-xr-x  2 root root 0 Sep 23 13:21 /dev/pts/

	  Next you need the pseudo terminal master multiplexer /dev/ptmx:

		  $ ls -la /dev/ptmx
		  crw-rw-rw-  1 root tty 5, 2 Sep 23 13:55 /dev/ptmx

	  Any /dev/ttyp[0-9]* files you may have can be removed.
	  Next, you need to mount the devpts filesystem on /dev/pts using:

		  mount -t devpts devpts /dev/pts

	  You need to be sure that Busybox has LOGIN and
	  FEATURE_SUID enabled. And finally, you should make
	  certain that Busybox has been installed setuid root:

		chown root.root /bin/busybox
		chmod 4755 /bin/busybox

	  with all that done, telnetd _should_ work....


config FEATURE_TELNETD_STANDALONE
	bool "Support standalone telnetd (not inetd only)"
	default n
	depends on TELNETD
	help
	  Selecting this will make telnetd able to run standalone.

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 TFTPD
	bool "tftpd"
	default n
	help
	  This enables the Trivial File Transfer Protocol server program.
	  It expects that stdin is a datagram socket and a packet
	  is already pending on it. It will exit after one transfer.
	  In other words: it should be run from inetd in nowait mode,
	  or from udpsvd. Example: "udpsvd -E 0 69 tftpd DIR"

config FEATURE_TFTP_GET
	bool "Enable \"get\" command"
	default y
	depends on TFTP || TFTPD
	help
	  Add support for the GET command within the TFTP client. This allows
	  a client to retrieve a file from a TFTP server.
	  Also enable upload support in tftpd, if tftpd is selected.

config FEATURE_TFTP_PUT
	bool "Enable \"put\" command"
	default y
	depends on TFTP || TFTPD
	help
	  Add support for the PUT command within the TFTP client. This allows
	  a client to transfer a file to a TFTP server.
	  Also enable download support in tftpd, if tftpd is selected.

config FEATURE_TFTP_BLOCKSIZE
	bool "Enable \"blksize\" protocol option"
	default n
	depends on TFTP || TFTPD
	help
	  Allow tftp to specify block size, and tftpd to understand
	  "blksize" option.

config TFTP_DEBUG
	bool "Enable debug"
	default n
	depends on TFTP || TFTPD
	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 TRACEROUTE
	bool "traceroute"
	default n
	help
	  Utility to trace the route of IP packets

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

config FEATURE_TRACEROUTE_SOURCE_ROUTE
	bool "Enable loose source route"
	default n
	depends on TRACEROUTE
	help
	  Add option to specify a loose source route gateway
	  (8 maximum).

config FEATURE_TRACEROUTE_USE_ICMP
	bool "Use ICMP instead of UDP"
	default n
	depends on TRACEROUTE
	help
	  Add option -I to use ICMP ECHO instead of UDP datagrams.

source networking/udhcp/Config.in

config IFUPDOWN_UDHCPC_CMD_OPTIONS
	string "ifup udhcpc command line options"
	default "-R -n"
	depends on IFUPDOWN && APP_UDHCPC
	help
	  Command line options to pass to udhcpc from ifup.
	  Intended to alter options not available in /etc/network/interfaces.
	  (IE: --syslog --background etc...)

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

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

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

config FEATURE_WGET_AUTHENTICATION
	bool "Enable HTTP authentication"
	default y
	depends on WGET
	help
	  Support authenticated HTTP transfers.

config FEATURE_WGET_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on WGET && GETOPT_LONG
	help
	  Support long options for the wget applet.

config ZCIP
	bool "zcip"
	default n
	select FEATURE_SYSLOG
	help
	  ZCIP provides ZeroConf IPv4 address selection, according to RFC 3927.
	  It's a daemon that allocates and defends a dynamically assigned
	  address on the 169.254/16 network, requiring no system administrator.

	  See http://www.zeroconf.org for further details, and "zcip.script"
	  in the busybox examples.

config TCPSVD
	bool "tcpsvd"
	default n
	help
	  tcpsvd listens on a TCP port and runs a program for each new
	  connection.

config TUNCTL
	bool "tunctl"
	default n
	help
	  tunctl creates or deletes tun devices.

config FEATURE_TUNCTL_UG
	bool "Support owner:group assignment"
	default n
	depends on TUNCTL
	help
	  Allow to specify owner and group of newly created interface.
	  340 bytes of pure bloat. Say no here.

config UDPSVD
	bool "udpsvd"
	default n
	help
	  udpsvd listens on an UDP port and runs a program for each new
	  connection.

endmenu
