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

menu "Networking Utilities"

INSERT

config FEATURE_IPV6
	bool "Enable IPv6 support"
	default y
	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 y
	select PLATFORM_LINUX
	help
	  Manipulate the system ARP cache.

config ARPING
	bool "arping"
	default y
	select PLATFORM_LINUX
	help
	  Ping hosts by ARP packets.

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

config FEATURE_BRCTL_FANCY
	bool "Fancy options"
	default y
	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"
	default y
	depends on BRCTL && FEATURE_BRCTL_FANCY
	help
	  Add support for option which prints the current config:
	    show

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

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

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

config FTPD
	bool "ftpd"
	default y
	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 -l" requests. This option works around such 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 FEATURE_FTP_AUTHENTICATION
	bool "Enable authentication"
	default y
	depends on FTPD
	help
	  Enable basic system login as seen in telnet etc.

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

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

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

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

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

config FEATURE_HTTPD_RANGES
	bool "Support 'Ranges:' header"
	default y
	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 y
	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 y
	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.
	  Example for httpd.conf file:
	  /adm:toor:PaSsWd

config FEATURE_HTTPD_AUTH_MD5
	bool "Support MD5 crypted passwords for http Authentication"
	default y
	depends on FEATURE_HTTPD_BASIC_AUTH
	help
	  Enables encrypted passwords, and wildcard user/passwords
	  in httpd.conf file.
	  User '*' means 'any system user name is ok',
	  password of '*' means 'use system password for this user'
	  Examples:
	  /adm:toor:$1$P/eKnWXS$aI1aPGxT.dJD5SzqAKWrF0
	  /adm:root:*
	  /wiki:*:*

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 y
	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.conf file:
	  *.php:/path/to/your/php

config FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
	bool "Set REMOTE_PORT environment variable for CGI"
	default y
	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 y
	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 y
	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 FEATURE_HTTPD_GZIP
	bool "Support for GZIP content encoding"
	default y
	depends on HTTPD
	help
	  Makes httpd send files using GZIP content encoding if the
	  client supports it and a pre-compressed <file>.gz exists.

config IFCONFIG
	bool "ifconfig"
	default y
	select PLATFORM_LINUX
	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 y
	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 y
	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 y
	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 y
	select PLATFORM_LINUX
	help
	  Userspace application to bind several interfaces
	  to a logical interface (use with kernel bonding driver).

config IFPLUGD
	bool "ifplugd"
	default y
	select PLATFORM_LINUX
	help
	  Network interface plug detection daemon.

config IFUPDOWN
	bool "ifupdown"
	default y
	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 y
	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 PLATFORM_LINUX
	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 n
	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 y
	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 y
###	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 y
	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 y
	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 y
	depends on INETD
	select FEATURE_HAVE_RPC
	help
	  Support Sun-RPC based services

config IP
	bool "ip"
	default y
	select PLATFORM_LINUX
	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 y
	depends on IP
	help
	  Add support for tunneling commands to "ip".

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

config FEATURE_IP_SHORT_FORMS
	bool "Support short forms of ip commands"
	default y
	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 y
	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 y
	depends on IPCALC && LONG_OPTS
	help
	  Support long options for the ipcalc applet.

config NETSTAT
	bool "netstat"
	default y
	select PLATFORM_LINUX
	help
	  netstat prints information about the Linux networking subsystem.

config FEATURE_NETSTAT_WIDE
	bool "Enable wide netstat output"
	default y
	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 y
	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 y
	help
	  nslookup is a tool to query Internet name servers.

config NTPD
	bool "ntpd"
	default y
	select PLATFORM_LINUX
	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 FEATURE_NTPD_CONF
	bool "Make ntpd understand /etc/ntp.conf"
	default y
	depends on NTPD
	help
	  Make ntpd look in /etc/ntp.conf for peers. Only "server address"
	  is supported.

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

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

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

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

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

config TELNET
	bool "telnet"
	default y
	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 y
	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 y
	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 y
	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 y
	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 y
	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"

comment "Common options for tftp/tftpd"
	depends on TFTP || TFTPD

config FEATURE_TFTP_GET
	bool "Enable 'tftp get' and/or tftpd upload code"
	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.

	  Note: this option does _not_ make tftpd capable of download
	  (the usual operation people need from it)!

config FEATURE_TFTP_PUT
	bool "Enable 'tftp put' and/or tftpd download code"
	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 y
	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 y
	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 y
	select PLATFORM_LINUX
	help
	  Utility to trace the route of IP packets.

config TRACEROUTE6
	bool "traceroute6"
	default y
	depends on FEATURE_IPV6 && TRACEROUTE
	help
	  Utility to trace the route of IPv6 packets.

config FEATURE_TRACEROUTE_VERBOSE
	bool "Enable verbose output"
	default y
	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.

config TUNCTL
	bool "tunctl"
	default y
	select PLATFORM_LINUX
	help
	  tunctl creates or deletes tun devices.

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

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 UDPSVD
	bool "udpsvd"
	default y
	help
	  udpsvd listens on an UDP port and runs a program for each new
	  connection.

config VCONFIG
	bool "vconfig"
	default y
	select PLATFORM_LINUX
	help
	  Creates, removes, and configures VLAN interfaces

config WGET
	bool "wget"
	default y
	help
	  wget is a utility for non-interactive download of files from HTTP
	  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 y
	depends on WGET && LONG_OPTS
	help
	  Support long options for the wget applet.

config FEATURE_WGET_TIMEOUT
	bool "Enable timeout option -T SEC"
	default y
	depends on WGET
	help
	  Supports network read and connect timeouts for wget,
	  so that wget will give up and timeout, through the -T
	  command line option.

	  Currently only connect and network data read timeout are
	  supported (i.e., timeout is not applied to the DNS query). When
	  FEATURE_WGET_LONG_OPTIONS is also enabled, the --timeout option
	  will work in addition to -T.

config ZCIP
	bool "zcip"
	default y
	select PLATFORM_LINUX
	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.

endmenu
