#
# 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_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 n  # very rarely used, and needs Sun RPC support in libc
	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_ROUTE_DIR
	string "ip route configuration directory"
	default "/etc/iproute2"
	depends on FEATURE_IP_ROUTE
	help
	  Location of the "ip" applet routing configuration.

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_NEIGH
	bool "ip neighbor"
	default y
	depends on IP
	help
	  Add support for neighbor 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
	  ip neigh  -> ipneigh

	  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 IPNEIGH
	bool
	default y
	depends on FEATURE_IP_SHORT_FORMS && FEATURE_IP_NEIGH

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:
		  CONFIG_UNIX98_PTYS=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 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
