#
# 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 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 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 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_RELOAD_CONFIG_SIGHUP
	bool "Support reloading the global config file using hup signal"
	default n
	depends on HTTPD
	help
	  This option enables processing of SIGHUP to reload cached
	  configuration settings.

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_CONFIG_WITH_MIME_TYPES
	bool "Support loading additional MIME types at run-time"
	default n
	depends on HTTPD
	help
	  This option enables support for additional MIME types at
	  run-time to be specified in the configuration file.

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 "Enable 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 "Support the 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 the -e option for shell script CGI simplification."
	default y
	depends on HTTPD
	help
	  This option allows html encoding arbitrary
	  strings for display of the browser.  Output goes to stdout.
	  For example, httpd -e "<Hello World>" as
	  "&#60Hello&#32World&#62".

config FEATURE_HTTPD_ERROR_PAGES
	bool "Enable 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 "Enable 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 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 "Enable 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 "Enable 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 "Enable 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 "Enable 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: IF_NAMESIZE = 16
	  File fields are separated by space or tab.
	  File format:
	  # Comment
	  new_interface_name    XX:XX:XX:XX:XX:XX

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 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 PSCAN
	bool "pscan"
	default n
	help
	  Simple network port scanner.

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 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 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 FEATURE_TFTP_GET
	bool "Enable \"get\" command"
	default y
	depends on TFTP
	help
	  Add support for the GET command within the TFTP client.  This allows
	  a client to retrieve a file from a TFTP server.

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

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

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

config 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 amongst 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 feature to allow for ICMP ECHO instead of UDP datagrams.

source networking/udhcp/Config.in

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.

endmenu
