#
# For a description of the syntax of this configuration file,
# see docs/Kconfig-language.txt.
#

menu "Networking Utilities"

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 FEATURE_ETC_NETWORKS
	bool "Support /etc/networks"
	default n
	help
	Enable support for network names in /etc/networks. This is
	a rarely used feature which allows you to use names
	instead of IP/mask pairs in route command.

config FEATURE_ETC_SERVICES
	bool "Consult /etc/services even for well-known ports"
	default n
	help
	Look up e.g. "telnet" and "http" in /etc/services file
	instead of assuming ports 23 and 80.
	This is almost never necessary (everybody uses standard ports),
	and it makes sense to avoid reading this file.
	If you disable this option, in the cases where port is explicitly
	specified as a service name (e.g. "telnet HOST PORTNAME"),
	it will still be looked up in /etc/services.

config FEATURE_HWIB
	bool "Support infiniband HW"
	default y
	help
	Support for printing infiniband addresses in network applets.

config FEATURE_TLS_SHA1
	bool "In TLS code, support ciphers which use deprecated SHA1"
	depends on TLS
	default n
	help
	Selecting this option increases interoperability with very old
	servers, but slightly increases code size.

	Most TLS servers support SHA256 today (2018), since SHA1 is
	considered possibly insecure (although not yet definitely broken).

INSERT

source networking/udhcp/Config.in

config IFUPDOWN_UDHCPC_CMD_OPTIONS
	string "ifup udhcpc command line options"
	default "-R -n"
	depends on IFUP || IFDOWN
	help
	Command line options to pass to udhcpc from ifup.
	Intended to alter options not available in /etc/network/interfaces.
	(IE: --syslog --background etc...)

endmenu
