menuconfig BR2_PACKAGE_WPA_SUPPLICANT
	bool "wpa_supplicant"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_LIBOPENSSL_ENABLE_DES if BR2_PACKAGE_LIBOPENSSL
	select BR2_PACKAGE_LIBOPENSSL_ENABLE_MD4 if BR2_PACKAGE_LIBOPENSSL
	help
	  WPA supplicant for secure wireless networks

	  http://w1.fi/wpa_supplicant/

if BR2_PACKAGE_WPA_SUPPLICANT

config BR2_PACKAGE_WPA_SUPPLICANT_NL80211
	bool "Enable nl80211 support"
	default y
	depends on BR2_TOOLCHAIN_HAS_THREADS # libnl
	select BR2_PACKAGE_LIBNL
	help
	  Enable support for nl80211.  This is the current wireless
	  API for Linux, supported by all wireless drivers in vanilla
	  Linux, but may not be supported by some out-of-tree Linux
	  wireless drivers.  wpa_supplicant will still fall back to
	  using the Wireless Extensions (wext) API with these drivers.

	  If this option is disabled, then only the deprecated wext
	  API will be supported, with far less features.  Linux may
	  supports using wext with modern drivers using a
	  compatibility layer, but it must be enabled in the kernel
	  configuration.

comment "nl80211 support needs a toolchain w/ threads"
	depends on !BR2_TOOLCHAIN_HAS_THREADS

config BR2_PACKAGE_WPA_SUPPLICANT_WEXT
	bool "Enable wext (deprecated)"
	default y if !BR2_TOOLCHAIN_HAS_THREADS
	help
	  Enable support for wext.  This is the historic wireless API
	  for Linux, which is now deprecated and in maintenance-only in
	  the kernel.  It may still be required by out-of-tree drivers.

config BR2_PACKAGE_WPA_SUPPLICANT_WIRED
	bool "Enable wired support"
	depends on BR2_TOOLCHAIN_HAS_THREADS # libnl
	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
	select BR2_PACKAGE_LIBNL
	select BR2_PACKAGE_WPA_SUPPLICANT_EAP
	help
	  Include the "wired" driver, so the internal IEEE 802.1x
	  supplicant can be used with Ethernet.  This also enables
	  support for MACSEC.

comment "wired macsec support needs a toolchain w/ headers >= 4.6"
	depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6

comment "wired support needs a toolchain w/ threads"
	depends on !BR2_TOOLCHAIN_HAS_THREADS

comment "wpa_supplicant will be useless without at least one driver"
	depends on !BR2_PACKAGE_WPA_SUPPLICANT_NL80211 && \
		!BR2_PACKAGE_WPA_SUPPLICANT_WEXT && \
		!BR2_PACKAGE_WPA_SUPPLICANT_WIRED

config BR2_PACKAGE_WPA_SUPPLICANT_IBSS_RSN
	bool "Enable IBSS RSN"
	depends on BR2_PACKAGE_WPA_SUPPLICANT_NL80211
	help
	  Enable support for RSN/WPA2 in Ad-Hoc mode.

config BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT
	bool "Enable AP mode"
	depends on BR2_PACKAGE_WPA_SUPPLICANT_NL80211
	help
	  With this option enabled, wpa_supplicant can act as an
	  access point much like hostapd does with a limited feature
	  set.  This links in parts of hostapd functionality into
	  wpa_supplicant, making it bigger but dispensing the need for
	  a separate hostapd binary in some applications hence being
	  smaller overall.  It also enables support for Wi-Fi Direct.

config BR2_PACKAGE_WPA_SUPPLICANT_WIFI_DISPLAY
	bool "Enable Wi-Fi Display"
	depends on BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT
	help
	  Enable support for Wi-Fi Display

config BR2_PACKAGE_WPA_SUPPLICANT_MESH_NETWORKING
	bool "Enable mesh networking"
	depends on BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT
	select BR2_PACKAGE_OPENSSL
	select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
	help
	  Enable support for open and secured mesh networking
	  (IEEE 802.11s)

config BR2_PACKAGE_WPA_SUPPLICANT_OVERRIDES
	bool "Enable HT/VHT/HE overrides"
	help
	  Enable wpa_supplicant overrides for HT, VHT and HE (disable
	  HT/HT40, mask MCS rates, etc.) in wpa_supplicant
	  configuration file.

config BR2_PACKAGE_WPA_SUPPLICANT_AUTOSCAN
	bool "Enable autoscan"
	help
	  Enable support for the autoscan feature (allow periodic scan)

config BR2_PACKAGE_WPA_SUPPLICANT_EAP
	bool "Enable EAP"
	help
	  Enable support for EAP, 802.1x/WPA-Enterprise and FILS.

config BR2_PACKAGE_WPA_SUPPLICANT_HOTSPOT
	bool "Enable HS20"
	select BR2_PACKAGE_WPA_SUPPLICANT_EAP
	help
	  Enable Hotspot 2.0 and IEEE 802.11u interworking
	  functionality.

config BR2_PACKAGE_WPA_SUPPLICANT_DEBUG_SYSLOG
	bool "Enable syslog support"
	help
	  Enable support for sending debug messages to syslog.

config BR2_PACKAGE_WPA_SUPPLICANT_WPS
	bool "Enable WPS"
	help
	  Enable support for Wi-Fi Protected Setup (WPS).

config BR2_PACKAGE_WPA_SUPPLICANT_WPA3
	bool "Enable WPA3 support"
	select BR2_PACKAGE_OPENSSL
	select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
	help
	  Enable WPA3 support including OWE, SAE, DPP

config BR2_PACKAGE_WPA_SUPPLICANT_CLI
	bool "Install wpa_cli binary"
	select BR2_PACKAGE_WPA_SUPPLICANT_CTRL_IFACE
	help
	  Install wpa_cli command line utility

config BR2_PACKAGE_WPA_SUPPLICANT_WPA_CLIENT_SO
	bool "Install wpa_client shared library"
	depends on !BR2_STATIC_LIBS
	help
	  Install libwpa_client.so.

comment "wpa_client library needs a toolchain w/ dynamic library"
	depends on BR2_STATIC_LIBS

config BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE
	bool "Install wpa_passphrase binary"
	help
	  Install wpa_passphrase command line utility.

config BR2_PACKAGE_WPA_SUPPLICANT_CTRL_IFACE
	bool "Enable the Unix-socket control interface"
	help
	  Enable support for the Unix-socket-based API.

config BR2_PACKAGE_WPA_SUPPLICANT_DBUS
	bool "Enable support for the DBus control interface"
	depends on BR2_TOOLCHAIN_HAS_THREADS # dbus
	select BR2_PACKAGE_DBUS
	help
	  Enable support for the DBus control interface.

comment "dbus support needs a toolchain w/ threads"
	depends on !BR2_TOOLCHAIN_HAS_THREADS

config BR2_PACKAGE_WPA_SUPPLICANT_DBUS_INTROSPECTION
	bool "Introspection support"
	depends on BR2_PACKAGE_WPA_SUPPLICANT_DBUS
	help
	  Add introspection support for the DBus control interface.

endif
