#
# 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_UNIX_LOCAL
	bool "Enable Unix domain socket support (usually not needed)"
	default n
	help
	  Enable Unix domain socket support in all busybox networking
	  applets.  Address of the form local:/path/to/unix/socket
	  will be recognized.

	  This extension is almost never used in real world usage.
	  You most likely want to say N.

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 FEATURE_FTPD_ACCEPT_BROKEN_LIST
	bool "Enable workaround for RFC-violating clients"
	default y
	depends on FTPD
	help
	  Some ftp-clients (among them KDE's Konqueror) issue illegal
	  "LIST -la" requests. This option works around those problems.
	  It might prevent you from listing files starting with "-" and
	  it increases the code size by ~40 bytes.
	  Most other ftp servers seem to behave similar to this.

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 LONG_OPTS && (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 IFPLUGD
	bool "ifplugd"
	default n
	help
	  Network interface plug detection daemon.

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 && LONG_OPTS
	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 NTPD
	bool "ntpd"
	default n
	help
	  The NTP client/server daemon.

config FEATURE_NTPD_SERVER
        bool "Make ntpd usable as a NTP server"
        default y
        depends on NTPD
        help
	  Make ntpd usable as a NTP server. If you disable this option
	  ntpd will be usable only as a NTP client.

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 FEATURE_TELNETD_INETD_WAIT
	bool "Support -w SEC option (inetd wait mode)"
	default n
	depends on FEATURE_TELNETD_STANDALONE
	help
	  This option allows you to run telnetd in "inet wait" mode.
	  Example inetd.conf line (note "wait", not usual "nowait"):

	  telnet stream tcp wait root /bin/telnetd telnetd -w10

	  In this example, inetd passes _listening_ socket_ as fd 0
	  to telnetd when connection appears.
	  telnetd will wait for connections until all existing
	  connections are closed, and no new connections
	  appear during 10 seconds. Then it exits, and inetd continues
	  to listen for new connections.

	  This option is rarely used. "tcp nowait" is much more usual
	  way of running tcp services, including telnetd.
	  You most probably want to say N here.

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' and 'tsize' protocol options"
	default n
	depends on TFTP || TFTPD
	help
	  Allow tftp to specify block size, and tftpd to understand
	  "blksize" and "tsize" options.

config FEATURE_TFTP_PROGRESS_BAR
	bool "Enable tftp progress meter"
	default n
	depends on TFTP && FEATURE_TFTP_BLOCKSIZE
	help
	  Show progress bar.

config TFTP_DEBUG
	bool "Enable debug"
	default n
	depends on TFTP || TFTPD
	help
	  Make tftp[d] print debugging messages on stderr.
	  This is useful if you are diagnosing a bug in tftp[d].

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

config TRACEROUTE6
	bool "traceroute6"
	default n
	depends on FEATURE_IPV6 && TRACEROUTE
	help
	  Utility to trace the route of IPv6 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 && 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 && LONG_OPTS
	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
