diff options
| author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-01-23 08:28:26 +0000 | 
|---|---|---|
| committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-01-23 08:28:26 +0000 | 
| commit | 1f0cb60a115cf4ed359a58a76ffdd46bcc5bbda1 (patch) | |
| tree | 76570bd515c1b16edfd03ecc34cba3c45baceb55 | |
| parent | 7f1760652d125ff3867abe3c62dcb0f22a0013f1 (diff) | |
hostapd: add a build variant for wpa_supplicant and one for a multicall hostapd+supplicant program (wpad) and remove the old wpa_supplicant package
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19286 3c298f89-4303-0410-b956-a3cf2f4a3e73
21 files changed, 1384 insertions, 725 deletions
diff --git a/package/wpa_supplicant/Config.in b/package/hostapd/Config.in index 10b8a43a8..e185820e5 100644 --- a/package/wpa_supplicant/Config.in +++ b/package/hostapd/Config.in @@ -1,14 +1,15 @@  # wpa_supplicant config  config WPA_SUPPLICANT_NO_TIMESTAMP_CHECK  	bool "Disable timestamp check" -	depends PACKAGE_wpa-supplicant +	depends PACKAGE_wpa-supplicant || PACKAGE_wpa-supplicant-mini || PACKAGE_wpad || PACKAGE_wpad-mini  	default n  	help  	  This disables the timestamp check for certificates in wpa_supplicant  	  Useful for devices without RTC that cannot reliably get the real date/time +  choice -        prompt "Choose TLS provider" -        default WPA_SUPPLICANT_INTERNAL +	prompt "Choose TLS provider" +	default WPA_SUPPLICANT_INTERNAL  	depends PACKAGE_wpa-supplicant  config WPA_SUPPLICANT_INTERNAL diff --git a/package/hostapd/Makefile b/package/hostapd/Makefile index 682d6ab85..cb31b5864 100644 --- a/package/hostapd/Makefile +++ b/package/hostapd/Makefile @@ -23,6 +23,7 @@ PKG_BUILD_DEPENDS:= \  	PACKAGE_kmod-mac80211:mac80211 \  PKG_CONFIG_DEPENDS:= \ +	CONFIG_WPA_SUPPLICANT_NO_TIMESTAMP_CHECK \  	CONFIG_PACKAGE_kmod-ath9k \  	CONFIG_PACKAGE_kmod-mac80211 \  	CONFIG_PACKAGE_kmod-madwifi \ @@ -30,6 +31,21 @@ PKG_CONFIG_DEPENDS:= \  	CONFIG_PACKAGE_hostapd-mini \  	CONFIG_PACKAGE_kmod-hostap +LOCAL_TYPE=$(strip \ +		$(if $(findstring wpad,$(BUILD_VARIANT)),wpad, \ +		$(if $(findstring supplicant,$(BUILD_VARIANT)),supplicant, \ +		hostapd \ +	))) +LOCAL_VARIANT=$(patsubst wpad-%,%,$(patsubst supplicant-%,%,$(BUILD_VARIANT))) + +ifeq ($(LOCAL_TYPE),supplicant) +  ifeq ($(LOCAL_VARIANT),full) +    PKG_CONFIG_DEPENDS += \ +		CONFIG_WPA_SUPPLICANT_INTERNAL \ +		CONFIG_WPA_SUPPLICANT_OPENSSL +  endif +endif +  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)  include $(INCLUDE_DIR)/package.mk @@ -38,8 +54,21 @@ DRIVER_MAKEOPTS= \  	CONFIG_DRIVER_NL80211=$(CONFIG_PACKAGE_kmod-mac80211) \  	CONFIG_DRIVER_MADWIFI=$(CONFIG_PACKAGE_kmod-madwifi) \  	CONFIG_DRIVER_HOSTAP=$(CONFIG_PACKAGE_kmod-hostap) \ +	CONFIG_DRIVER_ROBOSWITCH=$(CONFIG_PACKAGE_kmod-switch) \  	CONFIG_IEEE80211N=$(CONFIG_PACKAGE_kmod-ath9k) +ifeq ($(LOCAL_TYPE),supplicant) +  ifeq ($(LOCAL_VARIANT),full) +    DRIVER_MAKEOPTS += $(if $(CONFIG_WPA_SUPPLICANT_OPENSSL),CONFIG_TLS=openssl) +  endif +endif + +ifneq ($(LOCAL_TYPE),hostapd) +  ifdef CONFIG_WPA_SUPPLICANT_NO_TIMESTAMP_CHECK +    TARGET_CFLAGS += -DNO_TIMESTAMP_CHECK +  endif +endif +  define Package/hostapd/Default    SECTION:=net    CATEGORY:=Network @@ -80,11 +109,79 @@ define Package/hostapd-utils/description   IEEE 802.1x/WPA/EAP/RADIUS Authenticator.  endef +define Package/wpad/Default +  SECTION:=net +  CATEGORY:=Network +  TITLE:=IEEE 802.1x Authenticator/Supplicant +  URL:=http://hostap.epitest.fi/ +  DEPENDS:=@!TARGET_avr32 @!TARGET_etrax +PACKAGE_kmod-mac80211:libnl-tiny +endef + +define Package/wpad +$(call Package/wpad/Default) +  TITLE+= (full) +  VARIANT:=wpad-full +endef + +define Package/wpad/description + This package contains a full featured IEEE 802.1x/WPA/EAP/RADIUS + Authenticator and Supplicant +endef + +define Package/wpad-mini +$(call Package/wpad/Default) +  TITLE+= (WPA-PSK only) +  VARIANT:=wpad-mini +endef + +define Package/wpad-mini/description + This package contains a minimal IEEE 802.1x/WPA Authenticator and Supplicant (WPA-PSK only). +endef + +define Package/wpa-supplicant +  SECTION:=net +  CATEGORY:=Network +  TITLE:=WPA Supplicant +  URL:=http://hostap.epitest.fi/wpa_supplicant/ +  VARIANT:=supplicant-full +endef + +define Package/wpa-supplicant/Description +  WPA Supplicant +endef + +define Package/wpa-supplicant/config +	source "$(SOURCE)/Config.in" +endef + +define Package/wpa-supplicant-mini +  $(Package/wpa-supplicant) +  TITLE:=WPA Supplicant (minimal version) +  DEPENDS:=$(if $(CONFIG_WPA_SUPPLICANT_OPENSSL),+libopenssl) +  VARIANT:=supplicant-mini +endef + +define Package/wpa-supplicant-mini/Description +  WPA Supplicant (minimal version) +endef + +define Package/wpa-cli +  SECTION:=net +  CATEGORY:=Network +  DEPENDS:=wpa-supplicant +  TITLE:=WPA Supplicant command line interface +endef + +define Package/wpa-cli/Description +  WPA Supplicant control utility +endef + +  ifneq ($(wildcard $(PKG_BUILD_DIR)/.config_*),$(subst .configured_,.config_,$(STAMP_CONFIGURED))) -  $(warning $(wildcard $(PKG_BUILD_DIR)/.config_*) != $(subst .configured_,.config_,$(STAMP_CONFIGURED)))    define Build/Configure/rebuild -	$(FIND) $(PKG_BUILD_DIR) -name \*.o | $(XARGS) rm -f +	$(FIND) $(PKG_BUILD_DIR) -name \*.o -or -name \*.a | $(XARGS) rm -f  	rm -f $(PKG_BUILD_DIR)/hostapd/hostapd +	rm -f $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant  	rm -f $(PKG_BUILD_DIR)/.config_*  	touch $(subst .configured_,.config_,$(STAMP_CONFIGURED))    endef @@ -92,7 +189,8 @@ endif  define Build/Configure  	$(Build/Configure/rebuild) -	$(CP) ./files/$(BUILD_VARIANT).config $(PKG_BUILD_DIR)/hostapd/.config +	$(CP) ./files/hostapd-$(LOCAL_VARIANT).config $(PKG_BUILD_DIR)/hostapd/.config +	$(CP) ./files/wpa_supplicant-$(LOCAL_VARIANT).config $(PKG_BUILD_DIR)/wpa_supplicant/.config  endef  TARGET_CPPFLAGS := \ @@ -108,30 +206,108 @@ ifdef CONFIG_PACKAGE_kmod-mac80211    TARGET_LDFLAGS += -lm -lnl-tiny  endif -define Build/Compile +define Build/RunMake  	CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" \ -	$(MAKE) -C $(PKG_BUILD_DIR)/hostapd \ +	$(MAKE) -C $(PKG_BUILD_DIR)/$(1) \  		$(TARGET_CONFIGURE_OPTS) \  		$(DRIVER_MAKEOPTS) \  		LIBS="$(TARGET_LDFLAGS)" \ -		hostapd hostapd_cli +		$(2)  endef -define Package/hostapd/install +define Build/Compile/wpad +	echo ` \ +		$(call Build/RunMake,hostapd,MULTICALL=1 dump_cflags); \ +		$(call Build/RunMake,wpa_supplicant,dump_cflags) | sed -e 's,$(TARGET_CFLAGS),,' \ +	` > $(PKG_BUILD_DIR)/.cflags +	$(call Build/RunMake,hostapd, \ +		CFLAGS="$$$$(cat $(PKG_BUILD_DIR)/.cflags)" \ +		MULTICALL=1 \ +		hostapd_cli hostapd_multi.a \ +	) +	$(call Build/RunMake,wpa_supplicant, \ +		CFLAGS="$$$$(cat $(PKG_BUILD_DIR)/.cflags)" \ +		MULTICALL=1 \ +		wpa_cli wpa_supplicant_multi.a \ +	) +	$(TARGET_CC) -o $(PKG_BUILD_DIR)/wpad \ +		$(TARGET_CFLAGS) \ +		./files/multicall.c \ +		$(PKG_BUILD_DIR)/hostapd/hostapd_multi.a \ +		$(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant_multi.a \ +		$(TARGET_LDFLAGS) +endef + +define Build/Compile/hostapd +	$(call Build/RunMake,hostapd, \ +		hostapd hostapd_cli \ +	) +endef + +define Build/Compile/supplicant +	$(call Build/RunMake,wpa_supplicant, \ +		wpa_cli wpa_supplicant \ +	) +endef + +define Build/Compile +	$(Build/Compile/$(LOCAL_TYPE)) +endef + +define Install/hostapd  	$(INSTALL_DIR) $(1)/etc/hotplug.d/net  	$(INSTALL_DATA) ./files/hostapd.hotplug $(1)/etc/hotplug.d/net/  	$(INSTALL_DIR) $(1)/lib/wifi  	$(INSTALL_DATA) ./files/hostapd.sh $(1)/lib/wifi/hostapd.sh  	$(INSTALL_DIR) $(1)/usr/sbin +endef + +define Install/supplicant +	$(INSTALL_DIR) $(1)/lib/wifi +	$(INSTALL_DATA) ./files/wpa_supplicant.sh $(1)/lib/wifi/wpa_supplicant.sh +	$(INSTALL_DIR) $(1)/usr/sbin +endef + +define Package/hostapd/install +	$(call Install/hostapd,$(1))  	$(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd $(1)/usr/sbin/  endef  Package/hostapd-mini/install = $(Package/hostapd/install) -define Package/hostapd-utils/install +ifneq ($(LOCAL_TYPE),supplicant) +  define Package/hostapd-utils/install  	$(INSTALL_DIR) $(1)/usr/sbin  	$(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd_cli $(1)/usr/sbin/ +  endef +endif + +define Package/wpad/install +	$(call Install/hostapd,$(1)) +	$(call Install/supplicant,$(1)) +	$(INSTALL_BIN) $(PKG_BUILD_DIR)/wpad $(1)/usr/sbin/ +	ln -sf wpad $(1)/usr/sbin/hostapd +	ln -sf wpad $(1)/usr/sbin/wpa_supplicant +endef +Package/wpad-mini/install = $(Package/wpad/install) + +define Package/wpa-supplicant/install +	$(call Install/supplicant,$(1)) +	$(INSTALL_BIN) $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant $(1)/usr/sbin/  endef +Package/wpa-supplicant-mini/install = $(Package/wpa-supplicant/install) + +ifneq ($(LOCAL_VARIANT),hostapd) +  define Package/wpa-cli/install +	$(INSTALL_DIR) $(1)/usr/sbin +	$(CP) $(PKG_BUILD_DIR)/wpa_supplicant/wpa_cli $(1)/usr/sbin/ +  endef +endif  $(eval $(call BuildPackage,hostapd))  $(eval $(call BuildPackage,hostapd-mini)) +$(eval $(call BuildPackage,wpad)) +$(eval $(call BuildPackage,wpad-mini)) +$(eval $(call BuildPackage,wpa-supplicant)) +$(eval $(call BuildPackage,wpa-supplicant-mini)) +$(eval $(call BuildPackage,wpa-cli))  $(eval $(call BuildPackage,hostapd-utils)) diff --git a/package/hostapd/files/full.config b/package/hostapd/files/hostapd-full.config index 07c924fe9..07c924fe9 100644 --- a/package/hostapd/files/full.config +++ b/package/hostapd/files/hostapd-full.config diff --git a/package/hostapd/files/mini.config b/package/hostapd/files/hostapd-mini.config index 1720dddbf..1720dddbf 100644 --- a/package/hostapd/files/mini.config +++ b/package/hostapd/files/hostapd-mini.config diff --git a/package/hostapd/files/multicall.c b/package/hostapd/files/multicall.c new file mode 100644 index 000000000..c8e814bb5 --- /dev/null +++ b/package/hostapd/files/multicall.c @@ -0,0 +1,28 @@ +#include <stdio.h> +#include <string.h> +#include <stdbool.h> + +extern int hostapd_main(int argc, char **argv); +extern int wpa_supplicant_main(int argc, char **argv); + +int main(int argc, char **argv) +{ +	bool restart = false; +	const char *prog = argv[0]; + +restart: +	if (strstr(argv[0], "hostapd")) +		return hostapd_main(argc, argv); +	else if (strstr(argv[0], "wpa_supplicant")) +		return wpa_supplicant_main(argc, argv); + +	if (!restart && argc > 1) { +		argv++; +		argc--; +		restart = true; +		goto restart; +	} + +	fprintf(stderr, "Invalid command.\nUsage: %s wpa_supplicant|hostapd [<arguments>]\n", prog); +	return 255; +} diff --git a/package/wpa_supplicant/config b/package/hostapd/files/wpa_supplicant-full.config index 3ca1cfa65..5e7fd27d1 100644 --- a/package/wpa_supplicant/config +++ b/package/hostapd/files/wpa_supplicant-full.config @@ -50,20 +50,17 @@ CONFIG_DRIVER_HOSTAP=y  #CFLAGS += -I../../include/wireless  # Driver interface for madwifi driver -CONFIG_DRIVER_MADWIFI=y +# Deprecated; use CONFIG_DRIVER_WEXT=y instead. +#CONFIG_DRIVER_MADWIFI=y  # Set include directory to the madwifi source tree  #CFLAGS += -I../../madwifi -# Driver interface for Prism54 driver -# (Note: Prism54 is not yet supported, i.e., this will not work as-is and is -# for developers only) -#CONFIG_DRIVER_PRISM54=y -  # Driver interface for ndiswrapper +# Deprecated; use CONFIG_DRIVER_WEXT=y instead.  #CONFIG_DRIVER_NDISWRAPPER=y  # Driver interface for Atmel driver -#CONFIG_DRIVER_ATMEL=y +# CONFIG_DRIVER_ATMEL=y  # Driver interface for old Broadcom driver  # Please note that the newer Broadcom driver ("hybrid Linux driver") supports @@ -74,6 +71,7 @@ CONFIG_DRIVER_MADWIFI=y  #CFLAGS += -I/opt/WRT54GS/release/src/include  # Driver interface for Intel ipw2100/2200 driver +# Deprecated; use CONFIG_DRIVER_WEXT=y instead.  #CONFIG_DRIVER_IPW=y  # Driver interface for Ralink driver @@ -83,12 +81,14 @@ CONFIG_DRIVER_MADWIFI=y  CONFIG_DRIVER_WEXT=y  # Driver interface for Linux drivers using the nl80211 kernel interface -#CONFIG_DRIVER_NL80211=y +CONFIG_DRIVER_NL80211=y  # Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)  #CONFIG_DRIVER_BSD=y  #CFLAGS += -I/usr/local/include  #LIBS += -L/usr/local/lib +#LIBS_p += -L/usr/local/lib +#LIBS_c += -L/usr/local/lib  # Driver interface for Windows NDIS  #CONFIG_DRIVER_NDIS=y @@ -109,12 +109,20 @@ CONFIG_DRIVER_WEXT=y  # Driver interface for development testing  #CONFIG_DRIVER_TEST=y +# Include client MLME (management frame processing) for test driver +# This can be used to test MLME operations in hostapd with the test interface. +# space. +#CONFIG_CLIENT_MLME=y +  # Driver interface for wired Ethernet drivers  CONFIG_DRIVER_WIRED=y  # Driver interface for the Broadcom RoboSwitch family  #CONFIG_DRIVER_ROBOSWITCH=y +# Driver interface for no driver (e.g., WPS ER only) +#CONFIG_DRIVER_NONE=y +  # Enable IEEE 802.1X Supplicant (automatically included if any EAP method is  # included)  CONFIG_IEEE8021X_EAPOL=y @@ -145,7 +153,7 @@ CONFIG_EAP_TTLS=y  CONFIG_EAP_GTC=y  # EAP-OTP -#CONFIG_EAP_OTP=y +CONFIG_EAP_OTP=y  # EAP-SIM (enable CONFIG_PCSC, if EAP-SIM is used)  #CONFIG_EAP_SIM=y @@ -192,7 +200,7 @@ CONFIG_PKCS12=y  # Smartcard support (i.e., private key on a smartcard), e.g., with openssl  # engine. -#CONFIG_SMARTCARD=y +CONFIG_SMARTCARD=y  # PC/SC interface for smartcards (USIM, GSM SIM)  # Enable this if EAP-SIM or EAP-AKA is included @@ -238,11 +246,6 @@ CONFIG_CTRL_IFACE=y  # wpa_passphrase). This saves about 0.5 kB in code size.  #CONFIG_NO_WPA_PASSPHRASE=y -# Remove AES extra functions. This can be used to reduce code size by about -# 1.5 kB by removing extra AES modes that are not needed for commonly used -# client configurations (they are needed for some EAP types). -#CONFIG_NO_AES_EXTRAS=y -  # Disable scan result processing (ap_mode=1) to save code size by about 1 kB.  # This can be used if ap_scan=1 mode is never enabled.  #CONFIG_NO_SCAN_PROCESSING=y @@ -259,7 +262,7 @@ CONFIG_BACKEND=file  # configuration can still be changed, the changes are just not going to be  # persistent over restarts. This option can be used to reduce code size by  # about 3.5 kB. -CONFIG_NO_CONFIG_WRITE=y +#CONFIG_NO_CONFIG_WRITE=y  # Remove support for configuration blobs to reduce code size by about 1.5 kB.  #CONFIG_NO_CONFIG_BLOBS=y @@ -268,19 +271,19 @@ CONFIG_NO_CONFIG_WRITE=y  # main = UNIX/POSIX like main() function (default)  # main_winsvc = Windows service (read parameters from registry)  # main_none = Very basic example (development use only) -CONFIG_MAIN=main +#CONFIG_MAIN=main  # Select wrapper for operatins system and C library specific functions  # unix = UNIX/POSIX like systems (default)  # win32 = Windows systems  # none = Empty template -CONFIG_OS=unix +#CONFIG_OS=unix  # Select event loop implementation  # eloop = select() loop (default)  # eloop_win = Windows events and WaitForMultipleObject() loop  # eloop_none = Empty template -CONFIG_ELOOP=eloop +#CONFIG_ELOOP=eloop  # Select layer 2 packet implementation  # linux = Linux packet socket (default) @@ -289,7 +292,7 @@ CONFIG_ELOOP=eloop  # winpcap = WinPcap with receive thread  # ndis = Windows NDISUIO (note: requires CONFIG_USE_NDISUIO=y)  # none = Empty template -CONFIG_L2_PACKET=linux +#CONFIG_L2_PACKET=linux  # PeerKey handshake for Station to Station Link (IEEE 802.11e DLS)  CONFIG_PEERKEY=y @@ -329,7 +332,7 @@ CONFIG_INTERNAL_LIBTOMMATH=y  # At the cost of about 4 kB of additional binary size, the internal LibTomMath  # can be configured to include faster routines for exptmod, sqr, and div to  # speed up DH and RSA calculation considerably -#CONFIG_INTERNAL_LIBTOMMATH_FAST=y +CONFIG_INTERNAL_LIBTOMMATH_FAST=y  # Include NDIS event processing through WMI into wpa_supplicant/wpasvc.  # This is only for Windows builds and requires WMI-related header files and @@ -337,9 +340,17 @@ CONFIG_INTERNAL_LIBTOMMATH=y  #CONFIG_NDIS_EVENTS_INTEGRATED=y  #PLATFORMSDKLIB="/opt/Program Files/Microsoft Platform SDK/Lib" -# Add support for DBus control interface +# Add support for old DBus control interface +# (fi.epitest.hostap.WPASupplicant)  #CONFIG_CTRL_IFACE_DBUS=y +# Add support for new DBus control interface +# (fi.w1.hostap.wpa_supplicant1) +#CONFIG_CTRL_IFACE_DBUS_NEW=y + +# Add introspection support for new DBus control interface +#CONFIG_CTRL_IFACE_DBUS_INTRO=y +  # Add support for loading EAP methods dynamically as shared libraries.  # When this option is enabled, each EAP method can be either included  # statically (CONFIG_EAP_<method>=y) or dynamically (CONFIG_EAP_<method>=dyn). @@ -361,18 +372,11 @@ CONFIG_INTERNAL_LIBTOMMATH=y  # amount of memory/flash.  #CONFIG_DYNAMIC_EAP_METHODS=y -# Include client MLME (management frame processing). -# This can be used to move MLME processing of Linux mac80211 stack into user -# space. Please note that this is currently only available with -# driver_nl80211.c and only with a modified version of Linux kernel and -# wpa_supplicant. -#CONFIG_CLIENT_MLME=y -  # IEEE Std 802.11r-2008 (Fast BSS Transition)  #CONFIG_IEEE80211R=y  # Add support for writing debug log to a file (/tmp/wpa_supplicant-log-#.txt) -CONFIG_DEBUG_FILE=y +#CONFIG_DEBUG_FILE=y  # Enable privilege separation (see README 'Privilege separation' for details)  #CONFIG_PRIVSEP=y @@ -380,3 +384,21 @@ CONFIG_DEBUG_FILE=y  # Enable mitigation against certain attacks against TKIP by delaying Michael  # MIC error reports by a random amount of time between 0 and 60 seconds  #CONFIG_DELAYED_MIC_ERROR_REPORT=y + +# Enable tracing code for developer debugging +# This tracks use of memory allocations and other registrations and reports +# incorrect use with a backtrace of call (or allocation) location. +#CONFIG_WPA_TRACE=y +# For BSD, comment out these. +#LIBS += -lexecinfo +#LIBS_p += -lexecinfo +#LIBS_c += -lexecinfo + +# Use libbfd to get more details for developer debugging +# This enables use of libbfd to get more detailed symbols for the backtraces +# generated by CONFIG_WPA_TRACE=y. +#CONFIG_WPA_TRACE_BFD=y +# For BSD, comment out these. +#LIBS += -lbfd -liberty -lz +#LIBS_p += -lbfd -liberty -lz +#LIBS_c += -lbfd -liberty -lz diff --git a/package/wpa_supplicant/files/config.brcm-2.4 b/package/hostapd/files/wpa_supplicant-mini.config index 0e58fa08c..843b64a7d 100644 --- a/package/wpa_supplicant/files/config.brcm-2.4 +++ b/package/hostapd/files/wpa_supplicant-mini.config @@ -50,20 +50,17 @@ CONFIG_DRIVER_HOSTAP=y  #CFLAGS += -I../../include/wireless  # Driver interface for madwifi driver -CONFIG_DRIVER_MADWIFI=y +# Deprecated; use CONFIG_DRIVER_WEXT=y instead. +#CONFIG_DRIVER_MADWIFI=y  # Set include directory to the madwifi source tree  #CFLAGS += -I../../madwifi -# Driver interface for Prism54 driver -# (Note: Prism54 is not yet supported, i.e., this will not work as-is and is -# for developers only) -#CONFIG_DRIVER_PRISM54=y -  # Driver interface for ndiswrapper +# Deprecated; use CONFIG_DRIVER_WEXT=y instead.  #CONFIG_DRIVER_NDISWRAPPER=y  # Driver interface for Atmel driver -#CONFIG_DRIVER_ATMEL=y +# CONFIG_DRIVER_ATMEL=y  # Driver interface for old Broadcom driver  # Please note that the newer Broadcom driver ("hybrid Linux driver") supports @@ -74,6 +71,7 @@ CONFIG_DRIVER_MADWIFI=y  #CFLAGS += -I/opt/WRT54GS/release/src/include  # Driver interface for Intel ipw2100/2200 driver +# Deprecated; use CONFIG_DRIVER_WEXT=y instead.  #CONFIG_DRIVER_IPW=y  # Driver interface for Ralink driver @@ -83,12 +81,14 @@ CONFIG_DRIVER_MADWIFI=y  CONFIG_DRIVER_WEXT=y  # Driver interface for Linux drivers using the nl80211 kernel interface -#CONFIG_DRIVER_NL80211=y +CONFIG_DRIVER_NL80211=y  # Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)  #CONFIG_DRIVER_BSD=y  #CFLAGS += -I/usr/local/include  #LIBS += -L/usr/local/lib +#LIBS_p += -L/usr/local/lib +#LIBS_c += -L/usr/local/lib  # Driver interface for Windows NDIS  #CONFIG_DRIVER_NDIS=y @@ -109,30 +109,38 @@ CONFIG_DRIVER_WEXT=y  # Driver interface for development testing  #CONFIG_DRIVER_TEST=y +# Include client MLME (management frame processing) for test driver +# This can be used to test MLME operations in hostapd with the test interface. +# space. +#CONFIG_CLIENT_MLME=y +  # Driver interface for wired Ethernet drivers  CONFIG_DRIVER_WIRED=y  # Driver interface for the Broadcom RoboSwitch family -CONFIG_DRIVER_ROBOSWITCH=y +#CONFIG_DRIVER_ROBOSWITCH=y + +# Driver interface for no driver (e.g., WPS ER only) +#CONFIG_DRIVER_NONE=y  # Enable IEEE 802.1X Supplicant (automatically included if any EAP method is  # included) -CONFIG_IEEE8021X_EAPOL=y +# CONFIG_IEEE8021X_EAPOL=y  # EAP-MD5 -CONFIG_EAP_MD5=y +# CONFIG_EAP_MD5=y  # EAP-MSCHAPv2 -CONFIG_EAP_MSCHAPV2=y +# CONFIG_EAP_MSCHAPV2=y  # EAP-TLS -CONFIG_EAP_TLS=y +# CONFIG_EAP_TLS=y  # EAL-PEAP -CONFIG_EAP_PEAP=y +# CONFIG_EAP_PEAP=y  # EAP-TTLS -CONFIG_EAP_TTLS=y +# CONFIG_EAP_TTLS=y  # EAP-FAST  # Note: Default OpenSSL package does not include support for all the @@ -142,10 +150,10 @@ CONFIG_EAP_TTLS=y  #CONFIG_EAP_FAST=y  # EAP-GTC -CONFIG_EAP_GTC=y +# CONFIG_EAP_GTC=y  # EAP-OTP -#CONFIG_EAP_OTP=y +# CONFIG_EAP_OTP=y  # EAP-SIM (enable CONFIG_PCSC, if EAP-SIM is used)  #CONFIG_EAP_SIM=y @@ -157,7 +165,7 @@ CONFIG_EAP_GTC=y  #CONFIG_EAP_PAX=y  # LEAP -CONFIG_EAP_LEAP=y +# CONFIG_EAP_LEAP=y  # EAP-AKA (enable CONFIG_PCSC, if EAP-AKA is used)  #CONFIG_EAP_AKA=y @@ -188,11 +196,11 @@ CONFIG_EAP_LEAP=y  # PKCS#12 (PFX) support (used to read private key and certificate file from  # a file that usually has extension .p12 or .pfx) -CONFIG_PKCS12=y +# CONFIG_PKCS12=y  # Smartcard support (i.e., private key on a smartcard), e.g., with openssl  # engine. -#CONFIG_SMARTCARD=y +# CONFIG_SMARTCARD=y  # PC/SC interface for smartcards (USIM, GSM SIM)  # Enable this if EAP-SIM or EAP-AKA is included @@ -238,11 +246,6 @@ CONFIG_CTRL_IFACE=y  # wpa_passphrase). This saves about 0.5 kB in code size.  #CONFIG_NO_WPA_PASSPHRASE=y -# Remove AES extra functions. This can be used to reduce code size by about -# 1.5 kB by removing extra AES modes that are not needed for commonly used -# client configurations (they are needed for some EAP types). -#CONFIG_NO_AES_EXTRAS=y -  # Disable scan result processing (ap_mode=1) to save code size by about 1 kB.  # This can be used if ap_scan=1 mode is never enabled.  #CONFIG_NO_SCAN_PROCESSING=y @@ -259,7 +262,7 @@ CONFIG_BACKEND=file  # configuration can still be changed, the changes are just not going to be  # persistent over restarts. This option can be used to reduce code size by  # about 3.5 kB. -CONFIG_NO_CONFIG_WRITE=y +#CONFIG_NO_CONFIG_WRITE=y  # Remove support for configuration blobs to reduce code size by about 1.5 kB.  #CONFIG_NO_CONFIG_BLOBS=y @@ -268,19 +271,19 @@ CONFIG_NO_CONFIG_WRITE=y  # main = UNIX/POSIX like main() function (default)  # main_winsvc = Windows service (read parameters from registry)  # main_none = Very basic example (development use only) -CONFIG_MAIN=main +#CONFIG_MAIN=main  # Select wrapper for operatins system and C library specific functions  # unix = UNIX/POSIX like systems (default)  # win32 = Windows systems  # none = Empty template -CONFIG_OS=unix +#CONFIG_OS=unix  # Select event loop implementation  # eloop = select() loop (default)  # eloop_win = Windows events and WaitForMultipleObject() loop  # eloop_none = Empty template -CONFIG_ELOOP=eloop +#CONFIG_ELOOP=eloop  # Select layer 2 packet implementation  # linux = Linux packet socket (default) @@ -289,10 +292,10 @@ CONFIG_ELOOP=eloop  # winpcap = WinPcap with receive thread  # ndis = Windows NDISUIO (note: requires CONFIG_USE_NDISUIO=y)  # none = Empty template -CONFIG_L2_PACKET=linux +#CONFIG_L2_PACKET=linux  # PeerKey handshake for Station to Station Link (IEEE 802.11e DLS) -CONFIG_PEERKEY=y +# CONFIG_PEERKEY=y  # IEEE 802.11w (management frame protection)  # This version is an experimental implementation based on IEEE 802.11w/D1.0 @@ -319,7 +322,7 @@ CONFIG_TLS=internal  # needed for LibTomMath. Alternatively, an integrated, minimal version of  # LibTomMath can be used. See beginning of libtommath.c for details on benefits  # and drawbacks of this option. -CONFIG_INTERNAL_LIBTOMMATH=y +#CONFIG_INTERNAL_LIBTOMMATH=y  #ifndef CONFIG_INTERNAL_LIBTOMMATH  #LTM_PATH=/usr/src/libtommath-0.39  #CFLAGS += -I$(LTM_PATH) @@ -337,9 +340,17 @@ CONFIG_INTERNAL_LIBTOMMATH=y  #CONFIG_NDIS_EVENTS_INTEGRATED=y  #PLATFORMSDKLIB="/opt/Program Files/Microsoft Platform SDK/Lib" -# Add support for DBus control interface +# Add support for old DBus control interface +# (fi.epitest.hostap.WPASupplicant)  #CONFIG_CTRL_IFACE_DBUS=y +# Add support for new DBus control interface +# (fi.w1.hostap.wpa_supplicant1) +#CONFIG_CTRL_IFACE_DBUS_NEW=y + +# Add introspection support for new DBus control interface +#CONFIG_CTRL_IFACE_DBUS_INTRO=y +  # Add support for loading EAP methods dynamically as shared libraries.  # When this option is enabled, each EAP method can be either included  # statically (CONFIG_EAP_<method>=y) or dynamically (CONFIG_EAP_<method>=dyn). @@ -361,18 +372,11 @@ CONFIG_INTERNAL_LIBTOMMATH=y  # amount of memory/flash.  #CONFIG_DYNAMIC_EAP_METHODS=y -# Include client MLME (management frame processing). -# This can be used to move MLME processing of Linux mac80211 stack into user -# space. Please note that this is currently only available with -# driver_nl80211.c and only with a modified version of Linux kernel and -# wpa_supplicant. -#CONFIG_CLIENT_MLME=y -  # IEEE Std 802.11r-2008 (Fast BSS Transition)  #CONFIG_IEEE80211R=y  # Add support for writing debug log to a file (/tmp/wpa_supplicant-log-#.txt) -CONFIG_DEBUG_FILE=y +#CONFIG_DEBUG_FILE=y  # Enable privilege separation (see README 'Privilege separation' for details)  #CONFIG_PRIVSEP=y @@ -380,3 +384,21 @@ CONFIG_DEBUG_FILE=y  # Enable mitigation against certain attacks against TKIP by delaying Michael  # MIC error reports by a random amount of time between 0 and 60 seconds  #CONFIG_DELAYED_MIC_ERROR_REPORT=y + +# Enable tracing code for developer debugging +# This tracks use of memory allocations and other registrations and reports +# incorrect use with a backtrace of call (or allocation) location. +#CONFIG_WPA_TRACE=y +# For BSD, comment out these. +#LIBS += -lexecinfo +#LIBS_p += -lexecinfo +#LIBS_c += -lexecinfo + +# Use libbfd to get more details for developer debugging +# This enables use of libbfd to get more detailed symbols for the backtraces +# generated by CONFIG_WPA_TRACE=y. +#CONFIG_WPA_TRACE_BFD=y +# For BSD, comment out these. +#LIBS += -lbfd -liberty -lz +#LIBS_p += -lbfd -liberty -lz +#LIBS_c += -lbfd -liberty -lz diff --git a/package/wpa_supplicant/files/wpa_supplicant.sh b/package/hostapd/files/wpa_supplicant.sh index ea10b386e..8f7f503c1 100644 --- a/package/wpa_supplicant/files/wpa_supplicant.sh +++ b/package/hostapd/files/wpa_supplicant.sh @@ -86,6 +86,7 @@ wpa_supplicant_setup_vif() {  	config_get ssid "$vif" ssid  	config_get bssid "$vif" bssid  	bssid=${bssid:+"bssid=$bssid"} +	rm -rf /var/run/wpa_supplicant-$ifname  	cat > /var/run/wpa_supplicant-$ifname.conf <<EOF  ctrl_interface=/var/run/wpa_supplicant-$ifname  network={ diff --git a/package/hostapd/patches/200-multicall.patch b/package/hostapd/patches/200-multicall.patch new file mode 100644 index 000000000..fbbba20e4 --- /dev/null +++ b/package/hostapd/patches/200-multicall.patch @@ -0,0 +1,236 @@ +--- a/hostapd/Makefile ++++ b/hostapd/Makefile +@@ -14,6 +14,7 @@ CFLAGS += -I../src/utils + # CFLAGS += -DUSE_KERNEL_HEADERS -I/usr/src/linux/include +  + -include .config ++-include $(if $(MULTICALL), ../wpa_supplicant/.config) +  + ifndef CONFIG_OS + ifdef CONFIG_NATIVE_WINDOWS +@@ -157,10 +158,14 @@ ifdef CONFIG_IEEE80211N + CFLAGS += -DCONFIG_IEEE80211N + endif +  ++ifndef MULTICALL ++CFLAGS += -DNO_SUPPLICANT ++endif ++ + include ../src/drivers/drivers.mak +-OBJS += $(DRV_AP_OBJS) +-CFLAGS += $(DRV_AP_CFLAGS) +-LDFLAGS += $(DRV_AP_LDFLAGS) ++OBJS += $(sort $(DRV_AP_OBJS) $(if $(MULTICALL),$(DRV_WPA_OBJS))) ++CFLAGS += $(DRV_AP_CFLAGS) $(if $(MULTICALL),$(DRV_WPA_CFLAGS)) ++LDFLAGS += $(DRV_AP_LDFLAGS) $(if $(MULTICALL),$(DRV_WPA_LDFLAGS)) + LIBS += $(DRV_AP_LIBS) +  + ifdef CONFIG_L2_PACKET +@@ -738,6 +743,12 @@ install: all +  + BCHECK=../src/drivers/build.hostapd +  ++hostapd_multi.a: $(BCHECK) $(OBJS) ++	$(Q)$(CC) -c -o hostapd_multi.o -Dmain=hostapd_main $(CFLAGS) main.c ++	@$(E) "  CC " $< ++	@rm -f $@ ++	@$(AR) cr $@ hostapd_multi.o $(OBJS) ++ + hostapd: $(BCHECK) $(OBJS) + 	$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS) +  +@@ -776,6 +787,12 @@ HOBJS += ../src/crypto/aes-internal.o + HOBJS += ../src/crypto/aes-internal-enc.o + endif +  ++dump_cflags: ++	@echo -n $(CFLAGS) " " ++ ++dump_ldflags: ++	@echo -n $(LDFLAGS) $(LIBS) $(EXTRALIBS) " " ++ + nt_password_hash: $(NOBJS) + 	$(CC) $(LDFLAGS) -o nt_password_hash $(NOBJS) $(LIBS_n) +  +--- a/wpa_supplicant/Makefile ++++ b/wpa_supplicant/Makefile +@@ -52,6 +52,7 @@ OBJS_p += ../src/utils/wpabuf.o + OBJS_c = wpa_cli.o ../src/common/wpa_ctrl.o +  + -include .config ++-include $(if $(MULTICALL),../hostapd/.config) +  + ifndef CONFIG_OS + ifdef CONFIG_NATIVE_WINDOWS +@@ -579,6 +580,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS + CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS + LIBS += -ldl -rdynamic + endif ++else ++  ifdef MULTICALL ++    OBJS += ../src/eap_common/eap_common.o ++  endif + endif +  + ifdef CONFIG_AP +@@ -631,6 +636,12 @@ CFLAGS += -DEAP_SERVER_WSC + OBJS += ../src/ap/wps_hostapd.o + OBJS += ../src/eap_server/eap_wsc.o + endif ++else ++  ifdef MULTICALL ++    OBJS += ../src/eap_server/eap.o ++    OBJS += ../src/eap_server/eap_identity.o ++    OBJS += ../src/eap_server/eap_methods.o ++  endif + endif +  + ifdef NEED_RSN_AUTHENTICATOR +@@ -1260,6 +1271,12 @@ BCHECK=../src/drivers/build.wpa_supplica + wpa_priv: $(BCHECK) $(OBJS_priv) + 	$(LDO) $(LDFLAGS) -o wpa_priv $(OBJS_priv) $(LIBS) +  ++wpa_supplicant_multi.a: .config $(BCHECK) $(OBJS) $(EXTRA_progs) ++	$(Q)$(CC) -c -o wpa_supplicant_multi.o -Dmain=wpa_supplicant_main $(CFLAGS) main.c ++	@$(E) "  CC " $< ++	@rm -f $@ ++	@$(AR) cr $@ wpa_supplicant_multi.o $(OBJS) ++ + wpa_supplicant: .config $(BCHECK) $(OBJS) $(EXTRA_progs) + 	$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS) +  +@@ -1319,6 +1336,12 @@ endif + 	$(Q)$(CC) -c -o $@ $(CFLAGS) $< + 	@$(E) "  CC " $< +  ++dump_cflags: ++	@echo -n $(CFLAGS) " " ++ ++dump_ldflags: ++	@echo -n $(LDFLAGS) $(LIBS) $(EXTRALIBS) " " ++ + wpa_supplicant.exe: wpa_supplicant + 	mv -f $< $@ + wpa_cli.exe: wpa_cli +--- a/src/drivers/driver.h ++++ b/src/drivers/driver.h +@@ -2384,8 +2384,8 @@ union wpa_event_data { +  * Driver wrapper code should call this function whenever an event is received +  * from the driver. +  */ +-void wpa_supplicant_event(void *ctx, enum wpa_event_type event, +-			  union wpa_event_data *data); ++extern void (*wpa_supplicant_event)(void *ctx, enum wpa_event_type event, ++				    union wpa_event_data *data); +  +  + /* +--- a/src/ap/drv_callbacks.c ++++ b/src/ap/drv_callbacks.c +@@ -337,8 +337,8 @@ static void hostapd_event_eapol_rx(struc + } +  +  +-void wpa_supplicant_event(void *ctx, enum wpa_event_type event, +-			  union wpa_event_data *data) ++void hostapd_wpa_event(void *ctx, enum wpa_event_type event, ++		       union wpa_event_data *data) + { + 	struct hostapd_data *hapd = ctx; +  +@@ -415,5 +415,6 @@ void wpa_supplicant_event(void *ctx, enu + 		break; + 	} + } +- + #endif /* HOSTAPD */ ++ ++ +--- a/wpa_supplicant/wpa_priv.c ++++ b/wpa_supplicant/wpa_priv.c +@@ -825,8 +825,8 @@ static void wpa_priv_send_ft_response(st + } +  +  +-void wpa_supplicant_event(void *ctx, wpa_event_type event, +-			  union wpa_event_data *data) ++static void supplicant_event(void *ctx, wpa_event_type event, ++			     union wpa_event_data *data) + { + 	struct wpa_priv_interface *iface = ctx; +  +@@ -968,6 +968,7 @@ int main(int argc, char *argv[]) + 	if (os_program_init()) + 		return -1; +  ++	wpa_supplicant_event = supplicant_event; + 	wpa_priv_fd_workaround(); +  + 	for (;;) { +--- a/wpa_supplicant/events.c ++++ b/wpa_supplicant/events.c +@@ -1425,8 +1425,8 @@ static void wpa_supplicant_event_ibss_rs + #endif /* CONFIG_IBSS_RSN */ +  +  +-void wpa_supplicant_event(void *ctx, enum wpa_event_type event, +-			  union wpa_event_data *data) ++void supplicant_event(void *ctx, enum wpa_event_type event, ++		      union wpa_event_data *data) + { + 	struct wpa_supplicant *wpa_s = ctx; +  +--- a/wpa_supplicant/wpa_supplicant.c ++++ b/wpa_supplicant/wpa_supplicant.c +@@ -2215,6 +2215,9 @@ struct wpa_supplicant * wpa_supplicant_g + 	return NULL; + } +  ++extern void supplicant_event(void *ctx, enum wpa_event_type event, ++			     union wpa_event_data *data); ++ +  + /** +  * wpa_supplicant_init - Initialize %wpa_supplicant +@@ -2233,6 +2236,7 @@ struct wpa_global * wpa_supplicant_init( + 	if (params == NULL) + 		return NULL; +  ++	wpa_supplicant_event = supplicant_event; + 	wpa_debug_open_file(params->wpa_debug_file_path); + 	if (params->wpa_debug_syslog) + 		wpa_debug_open_syslog(); +--- a/hostapd/main.c ++++ b/hostapd/main.c +@@ -478,6 +478,9 @@ static void usage(void) + 	exit(1); + } +  ++void hostapd_wpa_event(void *ctx, enum wpa_event_type event, ++                       union wpa_event_data *data); ++ +  + int main(int argc, char *argv[]) + { +@@ -489,6 +492,7 @@ int main(int argc, char *argv[]) + 	if (os_program_init()) + 		return -1; +  ++	wpa_supplicant_event = hostapd_wpa_event; + 	for (;;) { + 		c = getopt(argc, argv, "BdhKP:tv"); + 		if (c < 0) +--- a/src/drivers/drivers.c ++++ b/src/drivers/drivers.c +@@ -13,7 +13,11 @@ +  */ +  + #include "includes.h" ++#include "common.h" ++#include "driver.h" +  ++void (*wpa_supplicant_event)(void *ctx, enum wpa_event_type event, ++			     union wpa_event_data *data); +  + #ifdef CONFIG_DRIVER_WEXT + extern struct wpa_driver_ops wpa_driver_wext_ops; /* driver_wext.c */ diff --git a/package/wpa_supplicant/patches/100-timestamp_check.patch b/package/hostapd/patches/300-timestamp_check.patch index 98fdbbc1b..fef63e30a 100644 --- a/package/wpa_supplicant/patches/100-timestamp_check.patch +++ b/package/hostapd/patches/300-timestamp_check.patch @@ -1,6 +1,6 @@  --- a/src/tls/x509v3.c  +++ b/src/tls/x509v3.c -@@ -1591,8 +1591,11 @@ int x509_certificate_chain_validate(stru +@@ -1832,8 +1832,11 @@ int x509_certificate_chain_validate(stru   		if (chain_trusted)   			continue; diff --git a/package/hostapd/patches/310-scan_ssid.patch b/package/hostapd/patches/310-scan_ssid.patch new file mode 100644 index 000000000..5a7e10f6b --- /dev/null +++ b/package/hostapd/patches/310-scan_ssid.patch @@ -0,0 +1,37 @@ +--- a/wpa_supplicant/scan.c ++++ b/wpa_supplicant/scan.c +@@ -215,6 +215,7 @@ static void wpa_supplicant_scan(void *el + 	enum wps_request_type req_type = WPS_REQ_ENROLLEE_INFO; + #endif /* CONFIG_WPS */ + 	struct wpa_driver_scan_params params; ++	int scan_ssid_all = 1; + 	size_t max_ssids; +  + 	if (wpa_s->disconnected && !wpa_s->scan_req) { +@@ -275,6 +276,16 @@ static void wpa_supplicant_scan(void *el + 	    wpa_s->wpa_state == WPA_INACTIVE) + 		wpa_supplicant_set_state(wpa_s, WPA_SCANNING); +  ++	/* check if all configured ssids should be scanned directly */ ++	ssid = wpa_s->conf->ssid; ++	while (ssid) { ++		if (!ssid->scan_ssid) { ++			scan_ssid_all = 0; ++			break; ++		} ++		ssid = ssid->next; ++	} ++ + 	/* Find the starting point from which to continue scanning */ + 	ssid = wpa_s->conf->ssid; + 	if (wpa_s->prev_scan_ssid != WILDCARD_SSID_SCAN) { +@@ -336,6 +347,9 @@ static void wpa_supplicant_scan(void *el + 		int_array_sort_unique(params.freqs); + 	} +  ++	if (scan_ssid_all && !ssid) ++		ssid = wpa_s->conf->ssid; ++ + 	if (ssid) { + 		wpa_s->prev_scan_ssid = ssid; + 		if (max_ssids > 1) { diff --git a/package/hostapd/patches/320-rescan_immediately.patch b/package/hostapd/patches/320-rescan_immediately.patch new file mode 100644 index 000000000..a4020bc1d --- /dev/null +++ b/package/hostapd/patches/320-rescan_immediately.patch @@ -0,0 +1,11 @@ +--- a/wpa_supplicant/events.c ++++ b/wpa_supplicant/events.c +@@ -843,7 +843,7 @@ static void wpa_supplicant_event_scan_re + 			wpa_printf(MSG_DEBUG, "Setup a new network"); + 			wpa_supplicant_associate(wpa_s, NULL, ssid); + 		} else +-			wpa_supplicant_req_new_scan(wpa_s, 5); ++			wpa_supplicant_req_new_scan(wpa_s, 0); + 	} + } + #endif /* CONFIG_NO_SCAN_PROCESSING */ diff --git a/package/hostapd/patches/330-madwifi_merge.patch b/package/hostapd/patches/330-madwifi_merge.patch new file mode 100644 index 000000000..e3a89d1be --- /dev/null +++ b/package/hostapd/patches/330-madwifi_merge.patch @@ -0,0 +1,767 @@ +--- a/src/drivers/driver_madwifi.c ++++ b/src/drivers/driver_madwifi.c +@@ -71,7 +71,6 @@ +  + #define WPA_KEY_RSC_LEN 8 +  +-#ifdef HOSTAPD +  + #include "priv_netlink.h" + #include "netlink.h" +@@ -82,17 +81,22 @@ + struct madwifi_driver_data { + 	struct hostapd_data *hapd;		/* back pointer */ +  +-	char	iface[IFNAMSIZ + 1]; ++	void *wext; /* private data for driver_wext */ ++	void *ctx; ++	char ifname[IFNAMSIZ + 1]; ++	int	ioctl_sock;			/* socket for ioctl() use */ ++ ++#ifdef HOSTAPD + 	int     ifindex; + 	struct l2_packet_data *sock_xmit;	/* raw packet xmit socket */ + 	struct l2_packet_data *sock_recv;	/* raw packet recv socket */ +-	int	ioctl_sock;			/* socket for ioctl() use */ + 	struct netlink_data *netlink; + 	int	we_version; + 	u8	acct_mac[ETH_ALEN]; + 	struct hostap_sta_driver_data acct_data; +  + 	struct l2_packet_data *sock_raw; /* raw 802.11 management frames */ ++#endif + }; +  + static int madwifi_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr, +@@ -105,7 +109,7 @@ set80211priv(struct madwifi_driver_data  + 	int do_inline = len < IFNAMSIZ; +  + 	memset(&iwr, 0, sizeof(iwr)); +-	os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); ++	os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); + #ifdef IEEE80211_IOCTL_FILTERFRAME + 	/* FILTERFRAME must be NOT inline, regardless of size. */ + 	if (op == IEEE80211_IOCTL_FILTERFRAME) +@@ -206,7 +210,7 @@ set80211param(struct madwifi_driver_data + 	struct iwreq iwr; +  + 	memset(&iwr, 0, sizeof(iwr)); +-	os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); ++	os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); + 	iwr.u.mode = op; + 	memcpy(iwr.u.name+sizeof(__u32), &arg, sizeof(arg)); +  +@@ -233,6 +237,7 @@ ether_sprintf(const u8 *addr) + } + #endif /* CONFIG_NO_STDOUT_DEBUG */ +  ++#ifdef HOSTAPD + /* +  * Configure WPA parameters. +  */ +@@ -395,7 +400,7 @@ madwifi_sta_set_flags(void *priv, const  + 		return madwifi_set_sta_authorized(priv, addr, 0); + 	return 0; + } +- ++#endif /* HOSTAPD */ + static int + madwifi_del_key(void *priv, const u8 *addr, int key_idx) + { +@@ -407,28 +412,20 @@ madwifi_del_key(void *priv, const u8 *ad + 		   __func__, ether_sprintf(addr), key_idx); +  + 	memset(&wk, 0, sizeof(wk)); ++	wk.idk_keyix = key_idx; + 	if (addr != NULL) { + 		memcpy(wk.idk_macaddr, addr, IEEE80211_ADDR_LEN); +-		wk.idk_keyix = (u8) IEEE80211_KEYIX_NONE; +-	} else { +-		wk.idk_keyix = key_idx; +-	} +- +-	ret = set80211priv(drv, IEEE80211_IOCTL_DELKEY, &wk, sizeof(wk)); +-	if (ret < 0) { +-		wpa_printf(MSG_DEBUG, "%s: Failed to delete key (addr %s" +-			   " key_idx %d)", __func__, ether_sprintf(addr), +-			   key_idx); + 	} +  +-	return ret; ++	set80211priv(drv, IEEE80211_IOCTL_DELKEY, &wk, sizeof(wk)); ++	return 0; + } +  + static int +-wpa_driver_madwifi_set_key(const char *ifname, void *priv, enum wpa_alg alg, +-			   const u8 *addr, int key_idx, int set_tx, +-			   const u8 *seq, size_t seq_len, +-			   const u8 *key, size_t key_len) ++madwifi_set_key(const char *ifname, void *priv, enum wpa_alg alg, ++		const u8 *addr, int key_idx, int set_tx, ++		const u8 *seq, size_t seq_len, ++		const u8 *key, size_t key_len) + { + 	struct madwifi_driver_data *drv = priv; + 	struct ieee80211req_key wk; +@@ -462,10 +459,14 @@ wpa_driver_madwifi_set_key(const char *i + 	memset(&wk, 0, sizeof(wk)); + 	wk.ik_type = cipher; + 	wk.ik_flags = IEEE80211_KEY_RECV | IEEE80211_KEY_XMIT; ++ + 	if (addr == NULL) { + 		memset(wk.ik_macaddr, 0xff, IEEE80211_ADDR_LEN); + 		wk.ik_keyix = key_idx; + 		wk.ik_flags |= IEEE80211_KEY_DEFAULT; ++	} else if (!memcmp(addr, "\xff\xff\xff\xff\xff\xff", ETH_ALEN)) { ++		wk.ik_flags |= IEEE80211_KEY_GROUP; ++		memcpy(wk.ik_macaddr, addr, IEEE80211_ADDR_LEN); + 	} else { + 		memcpy(wk.ik_macaddr, addr, IEEE80211_ADDR_LEN); + 		wk.ik_keyix = IEEE80211_KEYIX_NONE; +@@ -485,6 +486,7 @@ wpa_driver_madwifi_set_key(const char *i + } +  +  ++#ifdef HOSTAPD + static int + madwifi_get_seqnum(const char *ifname, void *priv, const u8 *addr, int idx, + 		   u8 *seq) +@@ -591,7 +593,7 @@ madwifi_read_sta_driver_data(void *priv, +  + 	memset(data, 0, sizeof(*data)); + 	snprintf(buf, sizeof(buf), "/proc/net/madwifi/%s/" MACSTR, +-		 drv->iface, MAC2STR(addr)); ++		 drv->ifname, MAC2STR(addr)); +  + 	f = fopen(buf, "r"); + 	if (!f) { +@@ -757,7 +759,7 @@ static int madwifi_receive_probe_req(str + 	if (ret) + 		return ret; +  +-	drv->sock_raw = l2_packet_init(drv->iface, NULL, ETH_P_80211_RAW, ++	drv->sock_raw = l2_packet_init(drv->ifname, NULL, ETH_P_80211_RAW, + 				       madwifi_raw_receive, drv, 1); + 	if (drv->sock_raw == NULL) + 		return -1; +@@ -1017,7 +1019,7 @@ madwifi_get_we_version(struct madwifi_dr + 		return -1; +  + 	memset(&iwr, 0, sizeof(iwr)); +-	os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); ++	os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); + 	iwr.u.data.pointer = (caddr_t) range; + 	iwr.u.data.length = buflen; +  +@@ -1134,17 +1136,17 @@ madwifi_init(struct hostapd_data *hapd,  + 		perror("socket[PF_INET,SOCK_DGRAM]"); + 		goto bad; + 	} +-	memcpy(drv->iface, params->ifname, sizeof(drv->iface)); ++	memcpy(drv->ifname, params->ifname, sizeof(drv->ifname)); +  + 	memset(&ifr, 0, sizeof(ifr)); +-	os_strlcpy(ifr.ifr_name, drv->iface, sizeof(ifr.ifr_name)); ++	os_strlcpy(ifr.ifr_name, drv->ifname, sizeof(ifr.ifr_name)); + 	if (ioctl(drv->ioctl_sock, SIOCGIFINDEX, &ifr) != 0) { + 		perror("ioctl(SIOCGIFINDEX)"); + 		goto bad; + 	} + 	drv->ifindex = ifr.ifr_ifindex; +  +-	drv->sock_xmit = l2_packet_init(drv->iface, NULL, ETH_P_EAPOL, ++	drv->sock_xmit = l2_packet_init(drv->ifname, NULL, ETH_P_EAPOL, + 					handle_read, drv, 1); + 	if (drv->sock_xmit == NULL) + 		goto bad; +@@ -1158,7 +1160,7 @@ madwifi_init(struct hostapd_data *hapd,  + 						1); + 		if (drv->sock_recv == NULL) + 			goto bad; +-	} else if (linux_br_get(brname, drv->iface) == 0) { ++	} else if (linux_br_get(brname, drv->ifname) == 0) { + 		wpa_printf(MSG_DEBUG, "Interface in bridge %s; configure for " + 			   "EAPOL receive", brname); + 		drv->sock_recv = l2_packet_init(brname, NULL, ETH_P_EAPOL, +@@ -1169,7 +1171,7 @@ madwifi_init(struct hostapd_data *hapd,  + 		drv->sock_recv = drv->sock_xmit; +  + 	memset(&iwr, 0, sizeof(iwr)); +-	os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); ++	os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); +  + 	iwr.u.mode = IW_MODE_MASTER; +  +@@ -1179,7 +1181,7 @@ madwifi_init(struct hostapd_data *hapd,  + 		goto bad; + 	} +  +-	madwifi_set_privacy(drv->iface, drv, 0); /* default to no privacy */ ++	madwifi_set_privacy(drv->ifname, drv, 0); /* default to no privacy */ +  + 	madwifi_receive_probe_req(drv); +  +@@ -1204,7 +1206,7 @@ madwifi_deinit(void *priv) + 	struct madwifi_driver_data *drv = priv; +  + 	netlink_deinit(drv->netlink); +-	(void) linux_set_iface_flags(drv->ioctl_sock, drv->iface, 0); ++	(void) linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 0); + 	if (drv->ioctl_sock >= 0) + 		close(drv->ioctl_sock); + 	if (drv->sock_recv != NULL && drv->sock_recv != drv->sock_xmit) +@@ -1223,7 +1225,7 @@ madwifi_set_ssid(const char *ifname, voi + 	struct iwreq iwr; +  + 	memset(&iwr, 0, sizeof(iwr)); +-	os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); ++	os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); + 	iwr.u.essid.flags = 1; /* SSID active */ + 	iwr.u.essid.pointer = (caddr_t) buf; + 	iwr.u.essid.length = len + 1; +@@ -1244,7 +1246,7 @@ madwifi_get_ssid(const char *ifname, voi + 	int ret = 0; +  + 	memset(&iwr, 0, sizeof(iwr)); +-	os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); ++	os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); + 	iwr.u.essid.pointer = (caddr_t) buf; + 	iwr.u.essid.length = len; +  +@@ -1271,137 +1273,16 @@ madwifi_commit(void *priv) + 	return 0; + } +  +-#else /* HOSTAPD */ ++#endif /* HOSTAPD */ +  +-struct wpa_driver_madwifi_data { +-	void *wext; /* private data for driver_wext */ +-	void *ctx; +-	char ifname[IFNAMSIZ + 1]; +-	int sock; +-}; ++#if !defined(NO_SUPPLICANT) +  + static int wpa_driver_madwifi_set_auth_alg(void *priv, int auth_alg); + static int wpa_driver_madwifi_set_probe_req_ie(void *priv, const u8 *ies, + 					       size_t ies_len); +  +- +-static int +-set80211priv(struct wpa_driver_madwifi_data *drv, int op, void *data, int len, +-	     int show_err) +-{ +-	struct iwreq iwr; +- +-	os_memset(&iwr, 0, sizeof(iwr)); +-	os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); +-	if (len < IFNAMSIZ && +-	    op != IEEE80211_IOCTL_SET_APPIEBUF) { +-		/* +-		 * Argument data fits inline; put it there. +-		 */ +-		os_memcpy(iwr.u.name, data, len); +-	} else { +-		/* +-		 * Argument data too big for inline transfer; setup a +-		 * parameter block instead; the kernel will transfer +-		 * the data for the driver. +-		 */ +-		iwr.u.data.pointer = data; +-		iwr.u.data.length = len; +-	} +- +-	if (ioctl(drv->sock, op, &iwr) < 0) { +-		if (show_err) { +-#ifdef MADWIFI_NG +-			int first = IEEE80211_IOCTL_SETPARAM; +-			int last = IEEE80211_IOCTL_KICKMAC; +-			static const char *opnames[] = { +-				"ioctl[IEEE80211_IOCTL_SETPARAM]", +-				"ioctl[IEEE80211_IOCTL_GETPARAM]", +-				"ioctl[IEEE80211_IOCTL_SETMODE]", +-				"ioctl[IEEE80211_IOCTL_GETMODE]", +-				"ioctl[IEEE80211_IOCTL_SETWMMPARAMS]", +-				"ioctl[IEEE80211_IOCTL_GETWMMPARAMS]", +-				"ioctl[IEEE80211_IOCTL_SETCHANLIST]", +-				"ioctl[IEEE80211_IOCTL_GETCHANLIST]", +-				"ioctl[IEEE80211_IOCTL_CHANSWITCH]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_SET_APPIEBUF]", +-				"ioctl[IEEE80211_IOCTL_GETSCANRESULTS]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_GETCHANINFO]", +-				"ioctl[IEEE80211_IOCTL_SETOPTIE]", +-				"ioctl[IEEE80211_IOCTL_GETOPTIE]", +-				"ioctl[IEEE80211_IOCTL_SETMLME]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_SETKEY]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_DELKEY]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_ADDMAC]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_DELMAC]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_WDSMAC]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_WDSDELMAC]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_KICKMAC]", +-			}; +-#else /* MADWIFI_NG */ +-			int first = IEEE80211_IOCTL_SETPARAM; +-			int last = IEEE80211_IOCTL_CHANLIST; +-			static const char *opnames[] = { +-				"ioctl[IEEE80211_IOCTL_SETPARAM]", +-				"ioctl[IEEE80211_IOCTL_GETPARAM]", +-				"ioctl[IEEE80211_IOCTL_SETKEY]", +-				"ioctl[IEEE80211_IOCTL_GETKEY]", +-				"ioctl[IEEE80211_IOCTL_DELKEY]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_SETMLME]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_SETOPTIE]", +-				"ioctl[IEEE80211_IOCTL_GETOPTIE]", +-				"ioctl[IEEE80211_IOCTL_ADDMAC]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_DELMAC]", +-				NULL, +-				"ioctl[IEEE80211_IOCTL_CHANLIST]", +-			}; +-#endif /* MADWIFI_NG */ +-			int idx = op - first; +-			if (first <= op && op <= last && +-			    idx < (int) (sizeof(opnames) / sizeof(opnames[0])) +-			    && opnames[idx]) +-				perror(opnames[idx]); +-			else +-				perror("ioctl[unknown???]"); +-		} +-		return -1; +-	} +-	return 0; +-} +- + static int +-set80211param(struct wpa_driver_madwifi_data *drv, int op, int arg, +-	      int show_err) +-{ +-	struct iwreq iwr; +- +-	os_memset(&iwr, 0, sizeof(iwr)); +-	os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); +-	iwr.u.mode = op; +-	os_memcpy(iwr.u.name+sizeof(u32), &arg, sizeof(arg)); +- +-	if (ioctl(drv->sock, IEEE80211_IOCTL_SETPARAM, &iwr) < 0) { +-		if (show_err)  +-			perror("ioctl[IEEE80211_IOCTL_SETPARAM]"); +-		return -1; +-	} +-	return 0; +-} +- +-static int +-wpa_driver_madwifi_set_wpa_ie(struct wpa_driver_madwifi_data *drv, ++wpa_driver_madwifi_set_wpa_ie(struct madwifi_driver_data *drv, + 			      const u8 *wpa_ie, size_t wpa_ie_len) + { + 	struct iwreq iwr; +@@ -1412,7 +1293,7 @@ wpa_driver_madwifi_set_wpa_ie(struct wpa + 	iwr.u.data.pointer = (void *) wpa_ie; + 	iwr.u.data.length = wpa_ie_len; +  +-	if (ioctl(drv->sock, IEEE80211_IOCTL_SETOPTIE, &iwr) < 0) { ++	if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_SETOPTIE, &iwr) < 0) { + 		perror("ioctl[IEEE80211_IOCTL_SETOPTIE]"); + 		return -1; + 	} +@@ -1420,156 +1301,51 @@ wpa_driver_madwifi_set_wpa_ie(struct wpa + } +  + static int +-wpa_driver_madwifi_del_key(struct wpa_driver_madwifi_data *drv, int key_idx, +-			   const u8 *addr) +-{ +-	struct ieee80211req_del_key wk; +- +-	wpa_printf(MSG_DEBUG, "%s: keyidx=%d", __FUNCTION__, key_idx); +-	os_memset(&wk, 0, sizeof(wk)); +-	wk.idk_keyix = key_idx; +-	if (addr != NULL) +-		os_memcpy(wk.idk_macaddr, addr, IEEE80211_ADDR_LEN); +- +-	return set80211priv(drv, IEEE80211_IOCTL_DELKEY, &wk, sizeof(wk), 1); +-} +- +-static int +-wpa_driver_madwifi_set_key(const char *ifname, void *priv, enum wpa_alg alg, +-			   const u8 *addr, int key_idx, int set_tx, +-			   const u8 *seq, size_t seq_len, +-			   const u8 *key, size_t key_len) +-{ +-	struct wpa_driver_madwifi_data *drv = priv; +-	struct ieee80211req_key wk; +-	char *alg_name; +-	u_int8_t cipher; +- +-	if (alg == WPA_ALG_NONE) +-		return wpa_driver_madwifi_del_key(drv, key_idx, addr); +- +-	switch (alg) { +-	case WPA_ALG_WEP: +-		if (addr == NULL || os_memcmp(addr, "\xff\xff\xff\xff\xff\xff", +-					      ETH_ALEN) == 0) { +-			/* +-			 * madwifi did not seem to like static WEP key +-			 * configuration with IEEE80211_IOCTL_SETKEY, so use +-			 * Linux wireless extensions ioctl for this. +-			 */ +-			return wpa_driver_wext_set_key(ifname, drv->wext, alg, +-						       addr, key_idx, set_tx, +-						       seq, seq_len, +-						       key, key_len); +-		} +-		alg_name = "WEP"; +-		cipher = IEEE80211_CIPHER_WEP; +-		break; +-	case WPA_ALG_TKIP: +-		alg_name = "TKIP"; +-		cipher = IEEE80211_CIPHER_TKIP; +-		break; +-	case WPA_ALG_CCMP: +-		alg_name = "CCMP"; +-		cipher = IEEE80211_CIPHER_AES_CCM; +-		break; +-	default: +-		wpa_printf(MSG_DEBUG, "%s: unknown/unsupported algorithm %d", +-			__FUNCTION__, alg); +-		return -1; +-	} +- +-	wpa_printf(MSG_DEBUG, "%s: alg=%s key_idx=%d set_tx=%d seq_len=%lu " +-		   "key_len=%lu", __FUNCTION__, alg_name, key_idx, set_tx, +-		   (unsigned long) seq_len, (unsigned long) key_len); +- +-	if (seq_len > sizeof(u_int64_t)) { +-		wpa_printf(MSG_DEBUG, "%s: seq_len %lu too big", +-			   __FUNCTION__, (unsigned long) seq_len); +-		return -2; +-	} +-	if (key_len > sizeof(wk.ik_keydata)) { +-		wpa_printf(MSG_DEBUG, "%s: key length %lu too big", +-			   __FUNCTION__, (unsigned long) key_len); +-		return -3; +-	} +- +-	os_memset(&wk, 0, sizeof(wk)); +-	wk.ik_type = cipher; +-	wk.ik_flags = IEEE80211_KEY_RECV; +-	if (addr == NULL || +-	    os_memcmp(addr, "\xff\xff\xff\xff\xff\xff", ETH_ALEN) == 0) +-		wk.ik_flags |= IEEE80211_KEY_GROUP; +-	if (set_tx) { +-		wk.ik_flags |= IEEE80211_KEY_XMIT | IEEE80211_KEY_DEFAULT; +-		os_memcpy(wk.ik_macaddr, addr, IEEE80211_ADDR_LEN); +-	} else +-		os_memset(wk.ik_macaddr, 0, IEEE80211_ADDR_LEN); +-	wk.ik_keyix = key_idx; +-	wk.ik_keylen = key_len; +-#ifdef WORDS_BIGENDIAN +-	{ +-		size_t i; +-		u8 tmp[WPA_KEY_RSC_LEN]; +-		os_memset(tmp, 0, sizeof(tmp)); +-		for (i = 0; i < seq_len; i++) +-			tmp[WPA_KEY_RSC_LEN - i - 1] = seq[i]; +-		os_memcpy(&wk.ik_keyrsc, tmp, WPA_KEY_RSC_LEN); +-	} +-#else /* WORDS_BIGENDIAN */ +-	os_memcpy(&wk.ik_keyrsc, seq, seq_len); +-#endif /* WORDS_BIGENDIAN */ +-	os_memcpy(wk.ik_keydata, key, key_len); +- +-	return set80211priv(drv, IEEE80211_IOCTL_SETKEY, &wk, sizeof(wk), 1); +-} +- +-static int + wpa_driver_madwifi_set_countermeasures(void *priv, int enabled) + { +-	struct wpa_driver_madwifi_data *drv = priv; ++	struct madwifi_driver_data *drv = priv; + 	wpa_printf(MSG_DEBUG, "%s: enabled=%d", __FUNCTION__, enabled); +-	return set80211param(drv, IEEE80211_PARAM_COUNTERMEASURES, enabled, 1); ++	return set80211param(drv, IEEE80211_PARAM_COUNTERMEASURES, enabled); + } +  + static int + wpa_driver_madwifi_deauthenticate(void *priv, const u8 *addr, int reason_code) + { +-	struct wpa_driver_madwifi_data *drv = priv; ++	struct madwifi_driver_data *drv = priv; + 	struct ieee80211req_mlme mlme; +  + 	wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); + 	mlme.im_op = IEEE80211_MLME_DEAUTH; + 	mlme.im_reason = reason_code; + 	os_memcpy(mlme.im_macaddr, addr, IEEE80211_ADDR_LEN); +-	return set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme), 1); ++	return set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme)); + } +  + static int + wpa_driver_madwifi_disassociate(void *priv, const u8 *addr, int reason_code) + { +-	struct wpa_driver_madwifi_data *drv = priv; ++	struct madwifi_driver_data *drv = priv; + 	struct ieee80211req_mlme mlme; +  + 	wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); + 	mlme.im_op = IEEE80211_MLME_DISASSOC; + 	mlme.im_reason = reason_code; + 	os_memcpy(mlme.im_macaddr, addr, IEEE80211_ADDR_LEN); +-	return set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme), 1); ++	return set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme)); + } +  + static int + wpa_driver_madwifi_associate(void *priv, + 			     struct wpa_driver_associate_params *params) + { +-	struct wpa_driver_madwifi_data *drv = priv; ++	struct madwifi_driver_data *drv = priv; + 	struct ieee80211req_mlme mlme; + 	int ret = 0, privacy = 1; +  + 	wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); +  + 	if (set80211param(drv, IEEE80211_PARAM_DROPUNENCRYPTED, +-			  params->drop_unencrypted, 1) < 0) ++			  params->drop_unencrypted) < 0) + 		ret = -1; + 	if (wpa_driver_madwifi_set_auth_alg(drv, params->auth_alg) < 0) + 		ret = -1; +@@ -1592,12 +1368,12 @@ wpa_driver_madwifi_associate(void *priv, + 	    params->wpa_ie_len == 0) + 		privacy = 0; +  +-	if (set80211param(drv, IEEE80211_PARAM_PRIVACY, privacy, 1) < 0) ++	if (set80211param(drv, IEEE80211_PARAM_PRIVACY, privacy) < 0) + 		ret = -1; +  + 	if (params->wpa_ie_len && + 	    set80211param(drv, IEEE80211_PARAM_WPA, +-			  params->wpa_ie[0] == WLAN_EID_RSN ? 2 : 1, 1) < 0) ++			  params->wpa_ie[0] == WLAN_EID_RSN ? 2 : 1) < 0) + 		ret = -1; +  + 	if (params->bssid == NULL) { +@@ -1605,14 +1381,14 @@ wpa_driver_madwifi_associate(void *priv, + 		 * roaming */ + 		/* FIX: this does not seem to work; would probably need to + 		 * change something in the driver */ +-		if (set80211param(drv, IEEE80211_PARAM_ROAMING, 0, 1) < 0) ++		if (set80211param(drv, IEEE80211_PARAM_ROAMING, 0) < 0) + 			ret = -1; +  + 		if (wpa_driver_wext_set_ssid(drv->wext, params->ssid, + 					     params->ssid_len) < 0) + 			ret = -1; + 	} else { +-		if (set80211param(drv, IEEE80211_PARAM_ROAMING, 2, 1) < 0) ++		if (set80211param(drv, IEEE80211_PARAM_ROAMING, 2) < 0) + 			ret = -1; + 		if (wpa_driver_wext_set_ssid(drv->wext, params->ssid, + 					     params->ssid_len) < 0) +@@ -1621,7 +1397,7 @@ wpa_driver_madwifi_associate(void *priv, + 		mlme.im_op = IEEE80211_MLME_ASSOC; + 		os_memcpy(mlme.im_macaddr, params->bssid, IEEE80211_ADDR_LEN); + 		if (set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, +-				 sizeof(mlme), 1) < 0) { ++				 sizeof(mlme)) < 0) { + 			wpa_printf(MSG_DEBUG, "%s: SETMLME[ASSOC] failed", + 				   __func__); + 			ret = -1; +@@ -1634,7 +1410,7 @@ wpa_driver_madwifi_associate(void *priv, + static int + wpa_driver_madwifi_set_auth_alg(void *priv, int auth_alg) + { +-	struct wpa_driver_madwifi_data *drv = priv; ++	struct madwifi_driver_data *drv = priv; + 	int authmode; +  + 	if ((auth_alg & WPA_AUTH_ALG_OPEN) && +@@ -1645,13 +1421,13 @@ wpa_driver_madwifi_set_auth_alg(void *pr + 	else + 		authmode = IEEE80211_AUTH_OPEN; +  +-	return set80211param(drv, IEEE80211_PARAM_AUTHMODE, authmode, 1); ++	return set80211param(drv, IEEE80211_PARAM_AUTHMODE, authmode); + } +  + static int + wpa_driver_madwifi_scan(void *priv, struct wpa_driver_scan_params *params) + { +-	struct wpa_driver_madwifi_data *drv = priv; ++	struct madwifi_driver_data *drv = priv; + 	struct iwreq iwr; + 	int ret = 0; + 	const u8 *ssid = params->ssids[0].ssid; +@@ -1669,7 +1445,7 @@ wpa_driver_madwifi_scan(void *priv, stru + 	if (wpa_driver_wext_set_ssid(drv->wext, ssid, ssid_len) < 0) + 		ret = -1; +  +-	if (ioctl(drv->sock, SIOCSIWSCAN, &iwr) < 0) { ++	if (ioctl(drv->ioctl_sock, SIOCSIWSCAN, &iwr) < 0) { + 		perror("ioctl[SIOCSIWSCAN]"); + 		ret = -1; + 	} +@@ -1691,14 +1467,14 @@ wpa_driver_madwifi_scan(void *priv, stru +  + static int wpa_driver_madwifi_get_bssid(void *priv, u8 *bssid) + { +-	struct wpa_driver_madwifi_data *drv = priv; ++	struct madwifi_driver_data *drv = priv; + 	return wpa_driver_wext_get_bssid(drv->wext, bssid); + } +  +  + static int wpa_driver_madwifi_get_ssid(void *priv, u8 *ssid) + { +-	struct wpa_driver_madwifi_data *drv = priv; ++	struct madwifi_driver_data *drv = priv; + 	return wpa_driver_wext_get_ssid(drv->wext, ssid); + } +  +@@ -1706,14 +1482,14 @@ static int wpa_driver_madwifi_get_ssid(v + static struct wpa_scan_results * + wpa_driver_madwifi_get_scan_results(void *priv) + { +-	struct wpa_driver_madwifi_data *drv = priv; ++	struct madwifi_driver_data *drv = priv; + 	return wpa_driver_wext_get_scan_results(drv->wext); + } +  +  + static int wpa_driver_madwifi_set_operstate(void *priv, int state) + { +-	struct wpa_driver_madwifi_data *drv = priv; ++	struct madwifi_driver_data *drv = priv; + 	return wpa_driver_wext_set_operstate(drv->wext, state); + } +  +@@ -1734,7 +1510,7 @@ static int wpa_driver_madwifi_set_probe_ +  + 	ret = set80211priv(priv, IEEE80211_IOCTL_SET_APPIEBUF, probe_req_ie, + 			   sizeof(struct ieee80211req_getset_appiebuf) + +-			   ies_len, 1); ++			   ies_len); +  + 	os_free(probe_req_ie); +  +@@ -1744,7 +1520,7 @@ static int wpa_driver_madwifi_set_probe_ +  + static void * wpa_driver_madwifi_init(void *ctx, const char *ifname) + { +-	struct wpa_driver_madwifi_data *drv; ++	struct madwifi_driver_data *drv; +  + 	drv = os_zalloc(sizeof(*drv)); + 	if (drv == NULL) +@@ -1755,17 +1531,17 @@ static void * wpa_driver_madwifi_init(vo +  + 	drv->ctx = ctx; + 	os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname)); +-	drv->sock = socket(PF_INET, SOCK_DGRAM, 0); +-	if (drv->sock < 0) ++	drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0); ++	if (drv->ioctl_sock < 0) + 		goto fail2; +  +-	if (set80211param(drv, IEEE80211_PARAM_ROAMING, 2, 1) < 0) { ++	if (set80211param(drv, IEEE80211_PARAM_ROAMING, 2) < 0) { + 		wpa_printf(MSG_DEBUG, "%s: failed to set wpa_supplicant-based " + 			   "roaming", __FUNCTION__); + 		goto fail3; + 	} +  +-	if (set80211param(drv, IEEE80211_PARAM_WPA, 3, 1) < 0) { ++	if (set80211param(drv, IEEE80211_PARAM_WPA, 3) < 0) { + 		wpa_printf(MSG_DEBUG, "%s: failed to enable WPA support", + 			   __FUNCTION__); + 		goto fail3; +@@ -1774,7 +1550,7 @@ static void * wpa_driver_madwifi_init(vo + 	return drv; +  + fail3: +-	close(drv->sock); ++	close(drv->ioctl_sock); + fail2: + 	wpa_driver_wext_deinit(drv->wext); + fail: +@@ -1785,38 +1561,37 @@ fail: +  + static void wpa_driver_madwifi_deinit(void *priv) + { +-	struct wpa_driver_madwifi_data *drv = priv; ++	struct madwifi_driver_data *drv = priv; +  + 	if (wpa_driver_madwifi_set_wpa_ie(drv, NULL, 0) < 0) { + 		wpa_printf(MSG_DEBUG, "%s: failed to clear WPA IE", + 			   __FUNCTION__); + 	} +-	if (set80211param(drv, IEEE80211_PARAM_ROAMING, 0, 1) < 0) { ++	if (set80211param(drv, IEEE80211_PARAM_ROAMING, 0) < 0) { + 		wpa_printf(MSG_DEBUG, "%s: failed to enable driver-based " + 			   "roaming", __FUNCTION__); + 	} +-	if (set80211param(drv, IEEE80211_PARAM_PRIVACY, 0, 1) < 0) { ++	if (set80211param(drv, IEEE80211_PARAM_PRIVACY, 0) < 0) { + 		wpa_printf(MSG_DEBUG, "%s: failed to disable forced Privacy " + 			   "flag", __FUNCTION__); + 	} +-	if (set80211param(drv, IEEE80211_PARAM_WPA, 0, 1) < 0) { ++	if (set80211param(drv, IEEE80211_PARAM_WPA, 0) < 0) { + 		wpa_printf(MSG_DEBUG, "%s: failed to disable WPA", + 			   __FUNCTION__); + 	} +  + 	wpa_driver_wext_deinit(drv->wext); +  +-	close(drv->sock); ++	close(drv->ioctl_sock); + 	os_free(drv); + } +  +-#endif /* HOSTAPD */ +- ++#endif +  + const struct wpa_driver_ops wpa_driver_madwifi_ops = { + 	.name			= "madwifi", + 	.desc			= "MADWIFI 802.11 support (Atheros, etc.)", +-	.set_key		= wpa_driver_madwifi_set_key, ++	.set_key		= madwifi_set_key, + #ifdef HOSTAPD + 	.hapd_init		= madwifi_init, + 	.hapd_deinit		= madwifi_deinit, +@@ -1836,7 +1611,8 @@ const struct wpa_driver_ops wpa_driver_m + 	.sta_clear_stats        = madwifi_sta_clear_stats, + 	.commit			= madwifi_commit, + 	.set_ap_wps_ie		= madwifi_set_ap_wps_ie, +-#else /* HOSTAPD */ ++#endif /* HOSTAPD */ ++#if !defined(NO_SUPPLICANT) + 	.get_bssid		= wpa_driver_madwifi_get_bssid, + 	.get_ssid		= wpa_driver_madwifi_get_ssid, + 	.init			= wpa_driver_madwifi_init, +@@ -1848,5 +1624,5 @@ const struct wpa_driver_ops wpa_driver_m + 	.disassociate		= wpa_driver_madwifi_disassociate, + 	.associate		= wpa_driver_madwifi_associate, + 	.set_operstate		= wpa_driver_madwifi_set_operstate, +-#endif /* HOSTAPD */ ++#endif + }; diff --git a/package/wpa_supplicant/Makefile b/package/wpa_supplicant/Makefile deleted file mode 100644 index 39c66e72b..000000000 --- a/package/wpa_supplicant/Makefile +++ /dev/null @@ -1,94 +0,0 @@ -# -# Copyright (C) 2008-2009 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=wpa_supplicant -PKG_VERSION:=0.6.9 -PKG_RELEASE:=2 -PKG_MD5SUM:=0efb8fcedf0a8acf6f423dfdb0658fdd - -PKG_SOURCE_URL:=http://hostap.epitest.fi/releases -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz - -PKG_BUILD_DEPENDS:= \ -	PACKAGE_kmod-madwifi:madwifi \ - -PKG_CONFIG_DEPENDS:= \ -	CONFIG_PACKAGE_kmod-madwifi \ -	CONFIG_WPA_SUPPLICANT_NO_TIMESTAMP_CHECK \ - -include $(INCLUDE_DIR)/package.mk - -define Package/wpa-supplicant -  SECTION:=net -  CATEGORY:=Network -  TITLE:=WPA Supplicant -  DEPENDS:=$(if $(CONFIG_WPA_SUPPLICANT_OPENSSL),+libopenssl) -  URL:=http://hostap.epitest.fi/wpa_supplicant/ -endef - -define Package/wpa-supplicant/Description - WPA Supplicant -endef - -define Package/wpa-supplicant/config -	source "$(SOURCE)/Config.in" -endef - -define Package/wpa-cli -  SECTION:=net -  CATEGORY:=Network -  DEPENDS:=wpa-supplicant -  TITLE:=WPA Supplicant command line interface -endef - -define Package/wpa-cli/Description - WPA Supplicant control utility -endef - -CONFIG=$(firstword $(wildcard ./files/config.$(BOARD) ./files/config.$(ARCH) ./config)) -TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include/madwifi $(if $(CONFIG_WPA_SUPPLICANT_NO_TIMESTAMP_CHECK),-DNO_TIMESTAMP_CHECK) - -define Build/Configure -	cp $(CONFIG) $(PKG_BUILD_DIR)/wpa_supplicant/.config -	[ -f $(STAMP_CONFIGURED) ] || $(MAKE) -C $(PKG_BUILD_DIR)/wpa_supplicant clean -	rm -f $(PKG_BUILD_DIR)/.configured* -	$(if $(CONFIG_PACKAGE_kmod-madwifi),,$(SED) 's,^CONFIG_DRIVER_MADWIFI,#CONFIG_DRIVER_MADWIFI,g' $(PKG_BUILD_DIR)/wpa_supplicant/.config) -	$(if $(CONFIG_PACKAGE_kmod-hostap),,$(SED) 's,^CONFIG_DRIVER_HOSTAP,#CONFIG_DRIVER_HOSTAP,g' $(PKG_BUILD_DIR)/wpa_supplicant/.config) -	$(if $(CONFIG_WPA_SUPPLICANT_OPENSSL),$(SED) 's|^CONFIG_TLS.*|CONFIG_TLS=openssl|g' $(PKG_BUILD_DIR)/wpa_supplicant/.config) -endef - -define Build/Compile -	rm -rf $(PKG_INSTALL_DIR) -	mkdir -p $(PKG_INSTALL_DIR) -	CFLAGS="$(TARGET_CFLAGS)" \ -	$(MAKE) -C $(PKG_BUILD_DIR)/wpa_supplicant \ -		CC="$(TARGET_CC)" \ -		KERNEL=$(LINUX_DIR) \ -		CPPFLAGS="$(TARGET_CPPFLAGS)" \ -		LDFLAGS="$(TARGET_LDFLAGS)" \ -		all -endef - -define Package/wpa-supplicant/install -	$(INSTALL_DIR) $(1)/usr/sbin -	$(CP) \ -		$(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant \ -		$(PKG_BUILD_DIR)/wpa_supplicant/wpa_passphrase \ -		$(1)/usr/sbin/ -	$(INSTALL_DIR) $(1)/lib/wifi -	$(INSTALL_DATA) ./files/wpa_supplicant.sh $(1)/lib/wifi/wpa_supplicant.sh -endef - -define Package/wpa-cli/install -	$(INSTALL_DIR) $(1)/usr/sbin -	$(CP) $(PKG_BUILD_DIR)/wpa_supplicant/wpa_cli $(1)/usr/sbin/ -endef - -$(eval $(call BuildPackage,wpa-supplicant)) -$(eval $(call BuildPackage,wpa-cli)) diff --git a/package/wpa_supplicant/files/config.brcm47xx b/package/wpa_supplicant/files/config.brcm47xx deleted file mode 120000 index c3fbf345c..000000000 --- a/package/wpa_supplicant/files/config.brcm47xx +++ /dev/null @@ -1 +0,0 @@ -config.brcm-2.4
\ No newline at end of file diff --git a/package/wpa_supplicant/files/config.brcm63xx b/package/wpa_supplicant/files/config.brcm63xx deleted file mode 120000 index c3fbf345c..000000000 --- a/package/wpa_supplicant/files/config.brcm63xx +++ /dev/null @@ -1 +0,0 @@ -config.brcm-2.4
\ No newline at end of file diff --git a/package/wpa_supplicant/patches/110-roaming.patch b/package/wpa_supplicant/patches/110-roaming.patch deleted file mode 100644 index 077c2e56b..000000000 --- a/package/wpa_supplicant/patches/110-roaming.patch +++ /dev/null @@ -1,46 +0,0 @@ -This patch decreases the timeouts for assoc/auth to more realistic values. Improves roaming speed ---- a/wpa_supplicant/events.c -+++ b/wpa_supplicant/events.c -@@ -854,7 +854,7 @@ static void wpa_supplicant_event_assoc(s - 		wpa_supplicant_set_state(wpa_s, WPA_COMPLETED); - 	} else if (!ft_completed) { - 		/* Timeout for receiving the first EAPOL packet */ --		wpa_supplicant_req_auth_timeout(wpa_s, 10, 0); -+		wpa_supplicant_req_auth_timeout(wpa_s, 3, 0); - 	} - 	wpa_supplicant_cancel_scan(wpa_s); -  ---- a/wpa_supplicant/scan.c -+++ b/wpa_supplicant/scan.c -@@ -189,6 +189,7 @@ static void wpa_supplicant_scan(void *el - 	} - #endif /* CONFIG_WPS */ -  -+	wpa_drv_flush_pmkid(wpa_s); - 	if (wpa_s->use_client_mlme) { - 		ieee80211_sta_set_probe_req_ie(wpa_s, extra_ie, extra_ie_len); - 		ret = ieee80211_sta_req_scan(wpa_s, ssid ? ssid->ssid : NULL, -@@ -203,7 +204,7 @@ static void wpa_supplicant_scan(void *el -  - 	if (ret) { - 		wpa_printf(MSG_WARNING, "Failed to initiate AP scan."); --		wpa_supplicant_req_scan(wpa_s, 10, 0); -+		wpa_supplicant_req_scan(wpa_s, 3, 0); - 	} else - 		wpa_s->scan_runs++; - } ---- a/wpa_supplicant/wpa_supplicant.c -+++ b/wpa_supplicant/wpa_supplicant.c -@@ -1160,10 +1160,10 @@ void wpa_supplicant_associate(struct wpa -  - 		if (assoc_failed) { - 			/* give IBSS a bit more time */ -- 			timeout = ssid->mode ? 10 : 5; -+ 			timeout = ssid->mode ? 5 : 2; - 		} else if (wpa_s->conf->ap_scan == 1) { - 			/* give IBSS a bit more time */ -- 			timeout = ssid->mode ? 20 : 10; -+ 			timeout = ssid->mode ? 7 : 3; - 		} - 		wpa_supplicant_req_auth_timeout(wpa_s, timeout, 0); - 	} diff --git a/package/wpa_supplicant/patches/120-ssid_scan.patch b/package/wpa_supplicant/patches/120-ssid_scan.patch deleted file mode 100644 index 6beaed449..000000000 --- a/package/wpa_supplicant/patches/120-ssid_scan.patch +++ /dev/null @@ -1,41 +0,0 @@ -Don't do broadcast SSID scans, if all configured SSIDs use scan_ssid=1. Improves background scanning in supplicant-managed roaming. - ---- a/wpa_supplicant/scan.c -+++ b/wpa_supplicant/scan.c -@@ -73,6 +73,7 @@ static void wpa_supplicant_scan(void *el - 	struct wpabuf *wps_ie = NULL; - 	const u8 *extra_ie = NULL; - 	size_t extra_ie_len = 0; -+	int scan_ssid_all = 1; - 	int wps = 0; - #ifdef CONFIG_WPS - 	enum wps_request_type req_type = WPS_REQ_ENROLLEE_INFO; -@@ -82,6 +83,17 @@ static void wpa_supplicant_scan(void *el - 		return; -  - 	enabled = 0; -+ -+	/* check if all configured ssids should be scanned directly */ -+	ssid = wpa_s->conf->ssid; -+	while (ssid) { -+		if (!ssid->scan_ssid) { -+			scan_ssid_all = 0; -+			break; -+		} -+		ssid = ssid->next; -+	} -+ - 	ssid = wpa_s->conf->ssid; - 	while (ssid) { - 		if (!ssid->disabled) { -@@ -154,6 +166,10 @@ static void wpa_supplicant_scan(void *el - 		return; - 	} -  -+	if (scan_ssid_all && !ssid) { -+		ssid = wpa_s->conf->ssid; -+	} -+ - 	wpa_printf(MSG_DEBUG, "Starting AP scan (%s SSID)", - 		   ssid ? "specific": "broadcast"); - 	if (ssid) { diff --git a/package/wpa_supplicant/patches/130-scanning.patch b/package/wpa_supplicant/patches/130-scanning.patch deleted file mode 100644 index aad4450f7..000000000 --- a/package/wpa_supplicant/patches/130-scanning.patch +++ /dev/null @@ -1,175 +0,0 @@ -Add a scan result cache to improve roaming speed if the driver gave us a background scan before losing the connection. - ---- a/wpa_supplicant/config.h -+++ b/wpa_supplicant/config.h -@@ -97,6 +97,12 @@ struct wpa_config { - 	int ap_scan; -  - 	/** -+	 * scan_cache - controls the time in seconds after the last scan results -+	 * before a new scan may be initiated -+	 */ -+	int scan_cache; -+ -+	/** - 	 * ctrl_interface - Parameters for the control interface - 	 * - 	 * If this is specified, %wpa_supplicant will open a control interface ---- a/wpa_supplicant/config_file.c -+++ b/wpa_supplicant/config_file.c -@@ -306,6 +306,13 @@ static int wpa_config_parse_int(const st - 	return 0; - } -  -+static int wpa_config_process_scan_cache(struct wpa_config *config, char *pos) -+{ -+	config->scan_cache = atoi(pos); -+	wpa_printf(MSG_DEBUG, "scan_cache=%d", config->scan_cache); -+	return 0; -+} -+ -  - static int wpa_config_parse_str(const struct global_parse_data *data, - 				struct wpa_config *config, int line, -@@ -433,6 +440,7 @@ static const struct global_parse_data gl - #endif /* CONFIG_CTRL_IFACE */ - 	{ INT_RANGE(eapol_version, 1, 2) }, - 	{ INT(ap_scan) }, -+	{ INT(scan_cache) }, - 	{ INT(fast_reauth) }, - #ifdef EAP_TLS_OPENSSL - 	{ STR(opensc_engine_path) }, -@@ -835,6 +843,8 @@ static void wpa_config_write_global(FILE - 		fprintf(f, "eapol_version=%d\n", config->eapol_version); - 	if (config->ap_scan != DEFAULT_AP_SCAN) - 		fprintf(f, "ap_scan=%d\n", config->ap_scan); -+	if (config->scan_cache != 0) -+		fprintf(f, "scan_cache=%d\n", config->scan_cache); - 	if (config->fast_reauth != DEFAULT_FAST_REAUTH) - 		fprintf(f, "fast_reauth=%d\n", config->fast_reauth); - #ifdef EAP_TLS_OPENSSL ---- a/wpa_supplicant/events.c -+++ b/wpa_supplicant/events.c -@@ -541,7 +541,7 @@ wpa_supplicant_select_bss_non_wpa(struct - 					   "BSSID mismatch"); - 				continue; - 			} --			 -+ - 			if (!(ssid->key_mgmt & WPA_KEY_MGMT_NONE) && - 			    !(ssid->key_mgmt & WPA_KEY_MGMT_WPS) && - 			    !(ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA)) -@@ -551,7 +551,7 @@ wpa_supplicant_select_bss_non_wpa(struct - 				continue; - 			} -  --			if ((ssid->key_mgmt &  -+			if ((ssid->key_mgmt & - 			     (WPA_KEY_MGMT_IEEE8021X | WPA_KEY_MGMT_PSK | - 			      WPA_KEY_MGMT_FT_IEEE8021X | WPA_KEY_MGMT_FT_PSK | - 			      WPA_KEY_MGMT_IEEE8021X_SHA256 | -@@ -640,6 +640,9 @@ static void wpa_supplicant_event_scan_re - 	    wpa_s->disconnected) - 		return; -  -+	if (wpa_s->wpa_state > WPA_ASSOCIATED) -+		goto done; -+ - 	while (selected == NULL) { - 		for (prio = 0; prio < wpa_s->conf->num_prio; prio++) { - 			selected = wpa_supplicant_select_bss( -@@ -652,6 +655,7 @@ static void wpa_supplicant_event_scan_re - 			wpa_printf(MSG_DEBUG, "No APs found - clear blacklist " - 				   "and try again"); - 			wpa_blacklist_clear(wpa_s); -+ 			memset(&wpa_s->last_scan_results, 0, sizeof(wpa_s->last_scan_results)); - 			wpa_s->blacklist_cleared++; - 		} else if (selected == NULL) { - 			break; -@@ -687,10 +691,12 @@ static void wpa_supplicant_event_scan_re - 		rsn_preauth_scan_results(wpa_s->wpa, wpa_s->scan_res); - 	} else { - 		wpa_printf(MSG_DEBUG, "No suitable AP found."); --		timeout = 5; -+		timeout = 0; - 		goto req_scan; - 	} -  -+done: -+	os_get_time(&wpa_s->last_scan_results); - 	return; -  - req_scan: -@@ -894,6 +900,9 @@ static void wpa_supplicant_event_disasso - 	} - 	if (wpa_s->wpa_state >= WPA_ASSOCIATED) - 		wpa_supplicant_req_scan(wpa_s, 0, 100000); -+	else if (wpa_s->wpa_state == WPA_ASSOCIATING) -+		wpa_supplicant_req_auth_timeout(wpa_s, 0, 100000); -+ - 	bssid = wpa_s->bssid; - 	if (is_zero_ether_addr(bssid)) - 		bssid = wpa_s->pending_bssid; ---- a/wpa_supplicant/wpa_supplicant_i.h -+++ b/wpa_supplicant/wpa_supplicant_i.h -@@ -350,6 +350,7 @@ struct wpa_supplicant { - 	struct wpa_client_mlme mlme; - 	int use_client_mlme; - 	int driver_4way_handshake; -+	struct os_time last_scan_results; -  - 	int pending_mic_error_report; - 	int pending_mic_error_pairwise; -@@ -405,6 +406,7 @@ int wpa_supplicant_scard_init(struct wpa -  - /* scan.c */ - void wpa_supplicant_req_scan(struct wpa_supplicant *wpa_s, int sec, int usec); -+int wpa_supplicant_may_scan(struct wpa_supplicant *wpa_s); - void wpa_supplicant_cancel_scan(struct wpa_supplicant *wpa_s); -  - /* events.c */ ---- a/wpa_supplicant/scan.c -+++ b/wpa_supplicant/scan.c -@@ -40,6 +40,18 @@ static void wpa_supplicant_gen_assoc_eve - 	wpa_supplicant_event(wpa_s, EVENT_ASSOC, &data); - } -  -+int wpa_supplicant_may_scan(struct wpa_supplicant *wpa_s) -+{ -+	struct os_time time; -+ -+	if (wpa_s->conf->scan_cache > 0) { -+		os_get_time(&time); -+		time.sec -= wpa_s->conf->scan_cache; -+		if (os_time_before(&time, &wpa_s->last_scan_results)) -+			return 0; -+	} -+	return 1; -+} -  - #ifdef CONFIG_WPS - static int wpas_wps_in_use(struct wpa_config *conf, -@@ -183,8 +195,9 @@ static void wpa_supplicant_scan(void *el - 	wps = wpas_wps_in_use(wpa_s->conf, &req_type); - #endif /* CONFIG_WPS */ -  --	if (wpa_s->scan_res_tried == 0 && wpa_s->conf->ap_scan == 1 && --	    !wpa_s->use_client_mlme && wps != 2) { -+	if (!wpa_supplicant_may_scan(wpa_s) || -+	    (wpa_s->scan_res_tried == 0 && wpa_s->conf->ap_scan == 1 && -+	    !wpa_s->use_client_mlme && wps != 2)) { - 		wpa_s->scan_res_tried++; - 		wpa_s->scan_req = scan_req; - 		wpa_printf(MSG_DEBUG, "Trying to get current scan results " ---- a/wpa_supplicant/wpa_supplicant.c -+++ b/wpa_supplicant/wpa_supplicant.c -@@ -1491,6 +1491,9 @@ void wpa_supplicant_rx_eapol(void *ctx,  - { - 	struct wpa_supplicant *wpa_s = ctx; -  -+	if (wpa_s->wpa_state < WPA_ASSOCIATING) -+		return; -+ - 	wpa_printf(MSG_DEBUG, "RX EAPOL from " MACSTR, MAC2STR(src_addr)); - 	wpa_hexdump(MSG_MSGDUMP, "RX EAPOL", buf, len); -  diff --git a/package/wpa_supplicant/patches/140-quality.patch b/package/wpa_supplicant/patches/140-quality.patch deleted file mode 100644 index edb0b2693..000000000 --- a/package/wpa_supplicant/patches/140-quality.patch +++ /dev/null @@ -1,33 +0,0 @@ ---- a/wpa_supplicant/wpa_supplicant.c -+++ b/wpa_supplicant/wpa_supplicant.c -@@ -1248,7 +1248,7 @@ static int wpa_supplicant_get_scan_resul - { - #define SCAN_AP_LIMIT 128 - 	struct wpa_scan_result *results; --	int num, i; -+	int num, i, j; - 	struct wpa_scan_results *res; -  - 	results = os_malloc(SCAN_AP_LIMIT * sizeof(struct wpa_scan_result)); -@@ -1345,6 +1345,21 @@ static int wpa_supplicant_get_scan_resul - 		res->res[res->num++] = r; - 	} -  -+	/* sort scan results by quality */ -+	for(i = 0; i < num - 1; i++) { -+		for(j = i + 1; j < num; j++) { -+			struct wpa_scan_result tmp; -+ -+			if (results[i].qual > results[j].qual) -+				continue; -+ -+			os_memcpy(&tmp, &results[i], sizeof(tmp)); -+			os_memcpy(&results[i], &results[j], sizeof(tmp)); -+			os_memcpy(&results[j], &tmp, sizeof(tmp)); -+		} -+	} -+ -+ - 	os_free(results); - 	wpa_s->scan_res = res; -  diff --git a/package/wpa_supplicant/patches/150-Remove-PS3-gelic-legacy-wpa-support.patch b/package/wpa_supplicant/patches/150-Remove-PS3-gelic-legacy-wpa-support.patch deleted file mode 100644 index 94559f1b3..000000000 --- a/package/wpa_supplicant/patches/150-Remove-PS3-gelic-legacy-wpa-support.patch +++ /dev/null @@ -1,251 +0,0 @@ -From 67441c596f016f69c230eaa31ecb2272c6cbf4bf Mon Sep 17 00:00:00 2001 -From: Hamish Guthrie <hamish.guthrie@sonycom.com> -Date: Wed, 6 Jan 2010 10:00:22 +0100 -Subject: [PATCH] Remove PS3 gelic legacy wpa support - -The ps3 wireless driver now supports wireless extensions. There is dedicated support code in wpa_supplicant for the old gelic wireless driver. The current gelic driver retains the old API with CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE, which is being removed from the driver. - -Signed-off-by: Hamish Guthrie <hamish.guthrie@sonycom.com> ---- - src/drivers/driver_ps3.c |  186 ---------------------------------------------- - src/drivers/drivers.c    |    6 -- - wpa_supplicant/Makefile  |    6 -- - 3 files changed, 0 insertions(+), 198 deletions(-) - delete mode 100644 src/drivers/driver_ps3.c - -diff --git a/src/drivers/driver_ps3.c b/src/drivers/driver_ps3.c -deleted file mode 100644 -index fde3425..0000000 ---- a/src/drivers/driver_ps3.c -+++ /dev/null -@@ -1,186 +0,0 @@ --/* -- * WPA Supplicant - PS3 Linux wireless extension driver interface -- * Copyright 2007, 2008 Sony Corporation -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * Alternatively, this software may be distributed under the terms of BSD -- * license. -- * -- * See README and COPYING for more details. -- */ -- --#include "includes.h" --#include <sys/ioctl.h> --#include "wireless_copy.h" --#include "common.h" --#include "wpa_common.h" --#include "driver.h" --#include "eloop.h" --#include "driver_wext.h" --#include "ieee802_11_defs.h" -- --static int wpa_driver_ps3_set_wpa_key(struct wpa_driver_wext_data *drv, --				struct wpa_driver_associate_params *params) --{ --	int ret, i; --	struct iwreq iwr; --	char *buf, *str; -- --	if (!params->psk && !params->passphrase) { --		wpa_printf(MSG_INFO, "%s:no PSK error", __func__); --		return -EINVAL; --	} -- --	os_memset(&iwr, 0, sizeof(iwr)); --	if (params->psk) { --		/* includes null */ --		iwr.u.data.length = PMK_LEN * 2 + 1; --		buf = os_malloc(iwr.u.data.length); --		if (!buf) --			return -ENOMEM; --		str = buf; --		for (i = 0; i < PMK_LEN; i++) { --			str += snprintf(str, iwr.u.data.length - (str - buf), --					"%02x", params->psk[i]); --		} --	} else if (params->passphrase) { --		/* including quotations and null */ --		iwr.u.data.length = strlen(params->passphrase) + 3; --		buf = os_malloc(iwr.u.data.length); --		if (!buf) --			return -ENOMEM; --		buf[0] = '"'; --		os_memcpy(buf + 1, params->passphrase, iwr.u.data.length - 3); --		buf[iwr.u.data.length - 2] = '"'; --		buf[iwr.u.data.length - 1] = '\0'; --	} else --		return -EINVAL; --	iwr.u.data.pointer = (caddr_t) buf; --	os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); --	ret = ioctl(drv->ioctl_sock, SIOCIWFIRSTPRIV, &iwr); --	os_free(buf); -- --	return ret; --} -- --static int wpa_driver_ps3_set_wep_keys(struct wpa_driver_wext_data *drv, --				struct wpa_driver_associate_params *params) --{ --	int ret, i; --	struct iwreq iwr; -- --	for (i = 0; i < 4; i++) { --		os_memset(&iwr, 0, sizeof(iwr)); --		os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); --		iwr.u.encoding.flags = i + 1; --		if (params->wep_key_len[i]) { --			iwr.u.encoding.pointer = (caddr_t) params->wep_key[i]; --			iwr.u.encoding.length = params->wep_key_len[i]; --		} else --			iwr.u.encoding.flags = IW_ENCODE_NOKEY | --				IW_ENCODE_DISABLED; -- --		if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) { --			perror("ioctl[SIOCSIWENCODE]"); --			ret = -1; --		} --	} --	return ret; --} -- --static int wpa_driver_ps3_associate(void *priv, --				    struct wpa_driver_associate_params *params) --{ --	struct wpa_driver_wext_data *drv = priv; --	int ret, value; -- --	wpa_printf(MSG_DEBUG, "%s: <-", __func__); -- --	/* clear BSSID */ --	if (!params->bssid && --	    wpa_driver_wext_set_bssid(drv, NULL) < 0) --		ret = -1; -- --	if (wpa_driver_wext_set_mode(drv, params->mode) < 0) --		ret = -1; -- --	if (params->wpa_ie == NULL || params->wpa_ie_len == 0) --		value = IW_AUTH_WPA_VERSION_DISABLED; --	else if (params->wpa_ie[0] == WLAN_EID_RSN) --		value = IW_AUTH_WPA_VERSION_WPA2; --	else --		value = IW_AUTH_WPA_VERSION_WPA; --	if (wpa_driver_wext_set_auth_param(drv, --					   IW_AUTH_WPA_VERSION, value) < 0) --		ret = -1; --	value = wpa_driver_wext_cipher2wext(params->pairwise_suite); --	if (wpa_driver_wext_set_auth_param(drv, --					   IW_AUTH_CIPHER_PAIRWISE, value) < 0) --		ret = -1; --	value = wpa_driver_wext_cipher2wext(params->group_suite); --	if (wpa_driver_wext_set_auth_param(drv, --					   IW_AUTH_CIPHER_GROUP, value) < 0) --		ret = -1; --	value = wpa_driver_wext_keymgmt2wext(params->key_mgmt_suite); --	if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_KEY_MGMT, value) < 0) --		ret = -1; -- --	/* set selected BSSID */ --	if (params->bssid && --	    wpa_driver_wext_set_bssid(drv, params->bssid) < 0) --		ret = -1; -- --	switch (params->group_suite) { --	case CIPHER_NONE: --		ret = 0; --		break; --	case CIPHER_WEP40: --	case CIPHER_WEP104: --		ret = wpa_driver_ps3_set_wep_keys(drv, params); --		break; --	case CIPHER_TKIP: --	case CIPHER_CCMP: --		ret = wpa_driver_ps3_set_wpa_key(drv, params); --		break; --	} -- --	/* start to associate */ --	ret = wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len); -- --	wpa_printf(MSG_DEBUG, "%s: ->", __func__); -- --	return ret; --} -- --static int wpa_driver_ps3_get_capa(void *priv, struct wpa_driver_capa *capa) --{ --	int ret; --	wpa_printf(MSG_DEBUG, "%s:<-", __func__); -- --	ret = wpa_driver_wext_get_capa(priv, capa); --	if (ret) { --		wpa_printf(MSG_INFO, "%s: base wext returns error %d", --			   __func__, ret); --		return ret; --	} --	/* PS3 hypervisor does association and 4way handshake by itself */ --	capa->flags |= WPA_DRIVER_FLAGS_4WAY_HANDSHAKE; --	wpa_printf(MSG_DEBUG, "%s:->", __func__); --	return 0; --} -- --const struct wpa_driver_ops wpa_driver_ps3_ops = { --	.name = "ps3", --	.desc = "PLAYSTATION3 Linux wireless extension driver", --	.get_bssid = wpa_driver_wext_get_bssid, --	.get_ssid = wpa_driver_wext_get_ssid, --	.scan = wpa_driver_wext_scan, --	.get_scan_results2 = wpa_driver_wext_get_scan_results, --	.associate = wpa_driver_ps3_associate, /* PS3 */ --	.init = wpa_driver_wext_init, --	.deinit = wpa_driver_wext_deinit, --	.get_capa = wpa_driver_ps3_get_capa, /* PS3 */ --}; -diff --git a/src/drivers/drivers.c b/src/drivers/drivers.c -index d278797..7e7d720 100644 ---- a/src/drivers/drivers.c -+++ b/src/drivers/drivers.c -@@ -64,9 +64,6 @@ extern struct wpa_driver_ops wpa_driver_ralink_ops; /* driver_ralink.c */ - #ifdef CONFIG_DRIVER_OSX - extern struct wpa_driver_ops wpa_driver_osx_ops; /* driver_osx.m */ - #endif /* CONFIG_DRIVER_OSX */ --#ifdef CONFIG_DRIVER_PS3 --extern struct wpa_driver_ops wpa_driver_ps3_ops; /* driver_ps3.c */ --#endif /* CONFIG_DRIVER_PS3 */ - #ifdef CONFIG_DRIVER_IPHONE - extern struct wpa_driver_ops wpa_driver_iphone_ops; /* driver_iphone.m */ - #endif /* CONFIG_DRIVER_IPHONE */ -@@ -126,9 +123,6 @@ struct wpa_driver_ops *wpa_supplicant_drivers[] = - #ifdef CONFIG_DRIVER_OSX - 	&wpa_driver_osx_ops, - #endif /* CONFIG_DRIVER_OSX */ --#ifdef CONFIG_DRIVER_PS3 --	&wpa_driver_ps3_ops, --#endif /* CONFIG_DRIVER_PS3 */ - #ifdef CONFIG_DRIVER_IPHONE - 	&wpa_driver_iphone_ops, - #endif /* CONFIG_DRIVER_IPHONE */ -diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile -index 45d6ada..f131e92 100644 ---- a/wpa_supplicant/Makefile -+++ b/wpa_supplicant/Makefile -@@ -226,12 +226,6 @@ LDFLAGS += -framework CoreFoundation - LDFLAGS += -F/System/Library/PrivateFrameworks -framework Apple80211 - endif -  --ifdef CONFIG_DRIVER_PS3 --CFLAGS += -DCONFIG_DRIVER_PS3 -m64 --OBJS_d += ../src/drivers/driver_ps3.o --LDFLAGS += -m64 --endif -- - ifdef CONFIG_DRIVER_IPHONE - CFLAGS += -DCONFIG_DRIVER_IPHONE - OBJS_d += ../src/drivers/driver_iphone.o ---  -1.6.2.4 -  | 
