#
# 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, showmac and showstp"
	default y
	depends on BRCTL && FEATURE_BRCTL_FANCY
	help
	  Add support for option which prints the current config:
	    showmacs, showstp, 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 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.

config FEATURE_HTTPD_AUTH_MD5
	bool "Support MD5 crypted passwords for http Authentication"
	default y
	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 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
	  config 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 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,
	  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 y
	depends on WGET && LONG_OPTS
	help
	  Support long options for the wget applet.

config FEATURE_WGET_TIMEOUT
	bool "Enable read timeout option -T SEC"
	default y
	depends on WGET
	help
	  Supports network read timeout for wget, so that wget will give
	  up and timeout when reading network data, through the -T command
	  line option.  Currently only network data read timeout is
	  supported (i.e., timeout is not applied to the DNS nor TCP
	  connection initialization).  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
