Revert "[wpa_supplicant] Cumulative patch from c4e90da6d"

This reverts commit 39bc25d3a79c1375de430a7918d949c1a86f70c6.

Test: Compilation
Change-Id: Iae7670429466958911b5296cb1359bceecc0b03e
Exempt-From-Owner-Approval: Revert since it's breaking the build
diff --git a/wpa_supplicant/Android.mk b/wpa_supplicant/Android.mk
index 1834fc5..39f8b50 100644
--- a/wpa_supplicant/Android.mk
+++ b/wpa_supplicant/Android.mk
@@ -238,12 +238,6 @@
 NEED_SHA384=y
 endif
 
-ifdef CONFIG_OCV
-L_CFLAGS += -DCONFIG_OCV
-OBJS += src/common/ocv.c
-CONFIG_IEEE80211W=y
-endif
-
 ifdef CONFIG_IEEE80211W
 L_CFLAGS += -DCONFIG_IEEE80211W
 NEED_SHA256=y
diff --git a/wpa_supplicant/ChangeLog b/wpa_supplicant/ChangeLog
index bf4daaa..f28055f 100644
--- a/wpa_supplicant/ChangeLog
+++ b/wpa_supplicant/ChangeLog
@@ -1,75 +1,5 @@
 ChangeLog for wpa_supplicant
 
-2018-12-02 - v2.7
-	* fixed WPA packet number reuse with replayed messages and key
-	  reinstallation
-	  [https://w1.fi/security/2017-1/] (CVE-2017-13077, CVE-2017-13078,
-	  CVE-2017-13079, CVE-2017-13080, CVE-2017-13081, CVE-2017-13082,
-	  CVE-2017-13086, CVE-2017-13087, CVE-2017-13088)
-	* fixed unauthenticated EAPOL-Key decryption in wpa_supplicant
-	  [https://w1.fi/security/2018-1/] (CVE-2018-14526)
-	* added support for FILS (IEEE 802.11ai) shared key authentication
-	* added support for OWE (Opportunistic Wireless Encryption, RFC 8110;
-	  and transition mode defined by WFA)
-	* added support for DPP (Wi-Fi Device Provisioning Protocol)
-	* added support for RSA 3k key case with Suite B 192-bit level
-	* fixed Suite B PMKSA caching not to update PMKID during each 4-way
-	  handshake
-	* fixed EAP-pwd pre-processing with PasswordHashHash
-	* added EAP-pwd client support for salted passwords
-	* fixed a regression in TDLS prohibited bit validation
-	* started to use estimated throughput to avoid undesired signal
-	  strength based roaming decision
-	* MACsec/MKA:
-	  - new macsec_linux driver interface support for the Linux
-	    kernel macsec module
-	  - number of fixes and extensions
-	* added support for external persistent storage of PMKSA cache
-	  (PMKSA_GET/PMKSA_ADD control interface commands; and
-	   MESH_PMKSA_GET/MESH_PMKSA_SET for the mesh case)
-	* fixed mesh channel configuration pri/sec switch case
-	* added support for beacon report
-	* large number of other fixes, cleanup, and extensions
-	* added support for randomizing local address for GAS queries
-	  (gas_rand_mac_addr parameter)
-	* fixed EAP-SIM/AKA/AKA' ext auth cases within TLS tunnel
-	* added option for using random WPS UUID (auto_uuid=1)
-	* added SHA256-hash support for OCSP certificate matching
-	* fixed EAP-AKA' to add AT_KDF into Synchronization-Failure
-	* fixed a regression in RSN pre-authentication candidate selection
-	* added option to configure allowed group management cipher suites
-	  (group_mgmt network profile parameter)
-	* removed all PeerKey functionality
-	* fixed nl80211 AP and mesh mode configuration regression with
-	  Linux 4.15 and newer
-	* added ap_isolate configuration option for AP mode
-	* added support for nl80211 to offload 4-way handshake into the driver
-	* added support for using wolfSSL cryptographic library
-	* SAE
-	  - added support for configuring SAE password separately of the
-	    WPA2 PSK/passphrase
-	  - fixed PTK and EAPOL-Key integrity and key-wrap algorithm selection
-	    for SAE;
-	    note: this is not backwards compatible, i.e., both the AP and
-	    station side implementations will need to be update at the same
-	    time to maintain interoperability
-	  - added support for Password Identifier
-	  - fixed FT-SAE PMKID matching
-	* Hotspot 2.0
-	  - added support for fetching of Operator Icon Metadata ANQP-element
-	  - added support for Roaming Consortium Selection element
-	  - added support for Terms and Conditions
-	  - added support for OSEN connection in a shared RSN BSS
-	  - added support for fetching Venue URL information
-	* added support for using OpenSSL 1.1.1
-	* FT
-	  - disabled PMKSA caching with FT since it is not fully functional
-	  - added support for SHA384 based AKM
-	  - added support for BIP ciphers BIP-CMAC-256, BIP-GMAC-128,
-	    BIP-GMAC-256 in addition to previously supported BIP-CMAC-128
-	  - fixed additional IE inclusion in Reassociation Request frame when
-	    using FT protocol
-
 2016-10-02 - v2.6
 	* fixed WNM Sleep Mode processing when PMF is not enabled
 	  [http://w1.fi/security/2015-6/] (CVE-2015-5310)
diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
index e55e062..c2e93e2 100644
--- a/wpa_supplicant/Makefile
+++ b/wpa_supplicant/Makefile
@@ -240,12 +240,6 @@
 NEED_SHA384=y
 endif
 
-ifdef CONFIG_OCV
-CFLAGS += -DCONFIG_OCV
-OBJS += ../src/common/ocv.o
-CONFIG_IEEE80211W=y
-endif
-
 ifdef CONFIG_IEEE80211W
 CFLAGS += -DCONFIG_IEEE80211W
 NEED_SHA256=y
@@ -1532,9 +1526,6 @@
 ifdef CONFIG_NO_RANDOM_POOL
 CFLAGS += -DCONFIG_NO_RANDOM_POOL
 else
-ifdef CONFIG_GETRANDOM
-CFLAGS += -DCONFIG_GETRANDOM
-endif
 OBJS += ../src/crypto/random.o
 endif
 
diff --git a/wpa_supplicant/README b/wpa_supplicant/README
index bbc86b1..730714b 100644
--- a/wpa_supplicant/README
+++ b/wpa_supplicant/README
@@ -1,7 +1,7 @@
-wpa_supplicant
+WPA Supplicant
 ==============
 
-Copyright (c) 2003-2019, Jouni Malinen <j@w1.fi> and contributors
+Copyright (c) 2003-2017, Jouni Malinen <j@w1.fi> and contributors
 All Rights Reserved.
 
 This program is licensed under the BSD license (the one with
diff --git a/wpa_supplicant/README-DPP b/wpa_supplicant/README-DPP
deleted file mode 100644
index 6496733..0000000
--- a/wpa_supplicant/README-DPP
+++ /dev/null
@@ -1,195 +0,0 @@
-Device Provisioning Protocol (DPP)
-==================================
-
-This document describes how the Device Provisioning Protocol (DPP)
-implementation in wpa_supplicant and hostapd can be configured and how
-the STA device and AP can be configured to connect each other using DPP
-Connector mechanism.
-
-Introduction to DPP
--------------------
-
-Device provisioning Protocol allows enrolling of interface-less devices
-in a secure Wi-Fi network using many methods like QR code based
-authentication( detailed below ), PKEX based authentication etc. In DPP
-a Configurator is used to provide network credentials to the devices.
-The three phases of DPP connection are authentication, configuration and
-network introduction.
-
-Build config setup
-------------------
-
-The following changes must go in the config file used to compile hostapd
-and wpa_supplicant.
-
-wpa_supplicant build config
----------------------------
-
-Enable DPP and protected management frame in wpa_supplicant build config
-file
-
-CONFIG_IEEE80211W=y
-CONFIG_DPP=y
-
-hostapd build config
---------------------
-
-Enable DPP and protected management frame in hostapd build config file
-
-CONFIG_IEEE80211W=y
-CONFIG_DPP=y
-
-Configurator build config
--------------------------
-
-Any STA or AP device can act as a Configurator. Enable DPP and protected
-managment frames in build config. For an AP to act as Configurator,
-Interworking needs to be enabled. For wpa_supplicant it is not required.
-
-CONFIG_INTERWORKING=y
-
-
-Sample supplicant config file before provisioning
--------------------------------------------------
-
-ctrl_interface=DIR=/var/run/wpa_supplicant
-ctrl_interface_group=0
-update_config=1
-pmf=2
-dpp_config_processing=2
-
-Sample hostapd config file before provisioning
-----------------------------------------------
-
-interface=wlan0
-driver=nl80211
-ctrl_interface=/var/run/hostapd
-ssid=test
-channel=1
-wpa=2
-wpa_key_mgmt=DPP
-ieee80211w=1
-wpa_pairwise=CCMP
-rsn_pairwise=CCMP
-
-
-Pre-requisites
---------------
-
-It is assumed that an AP and client station are up by running hostapd
-and wpa_supplicant using respective config files.
-
-
-Creating Configurator
----------------------
-
-Add a Configurator over the control interface (wpa_cli/hostapd_cli)
-
-> dpp_configurator_add
-(returns id)
-
-To get key of Configurator
-> dpp_configurator_get_key <id>
-
-
-How to configure an enrollee using Configurator
------------------------------------------------
-
-On enrollee side:
-
-Generate QR code for the device. Store the qr code id returned by the
-command.
-
-> dpp_bootstrap_gen type=qrcode mac=<mac-address-of-device> chan=<operating-channel> key=<key of the device>
-(returns bootstrapping info id)
-
-Get QR Code of device using the bootstrap info id.
-> dpp_bootstrap_get_uri <bootstrap-id>
-
-Make device listen to DPP request (The central frequency of channel 1 is
-2412) in case if enrollee is a client device.
-
-> dpp_listen <frequency>
-
-On Configurator side:
-
-Enter the QR Code in the Configurator.
-> dpp_qr_code "<QR-Code-read-from-enrollee>"
-
-On successfully adding QR Code, a bootstrapping info id is returned.
-
-Send provisioning request to enrollee. (conf is ap-dpp if enrollee is an
-AP. conf is sta-dpp if enrollee is a client)
-> dpp_auth_init peer=<qr-code-id> conf=<ap-dpp|sta-dpp> configurator=<configurator-id>
-
-The DPP values will be printed in the console. Save this values into the
-config file. If the enrollee is an AP, we need to manually write these
-values to the hostapd config file. If the enrollee is a client device,
-these details can be automatically saved to config file using the
-following command.
-
-> save_config
-
-To set values in runtime for AP enrollees
-
-> set dpp_connector <Connector-value-printed-on-console>
-> set dpp_csign <csign-value-on-console>
-> set dpp_netaccesskey <netaccess-value-on-console>
-
-To set values in runtime for client enrollees, set dpp_config_processing
-to 2 in wpa_supplicant conf file.
-
-Once the values are set in run-time (if not set in run-time, but saved
-in config files, they are taken up in next restart), the client device
-will automatically connect to the already provisioned AP and connection
-will be established.
-
-
-Self-configuring a device
--------------------------
-
-It is possible for a device to configure itself if it is the
-Configurator for the network.
-
-Create a Configurator in the device and use the dpp_configurator_sign
-command to get DPP credentials.
-
-> dpp_configurator_add
-(returns configurator id)
-> dpp_configurator_sign conf=<ap-dpp|sta-dpp> configurator=<configurator-id>
-
-
-Sample AP configuration files after provisioning
-------------------------------------------------
-
-interface=wlan0
-driver=nl80211
-ctrl_interface=/var/run/hostapd
-ssid=test
-channel=1
-wpa=2
-wpa_key_mgmt=DPP
-ieee80211w=1
-wpa_pairwise=CCMP
-rsn_pairwise=CCMP
-dpp_connector=<Connector value provided by Configurator>
-dpp_csign=<C-Sign-Key value provided by Configurator>
-dpp_netaccesskey=<Net access key provided by Configurator>
-
-
-Sample station configuration file after provisioning
-----------------------------------------------------
-
-ctrl_interface=DIR=/var/run/wpa_supplicant
-ctrl_interface_group=0
-update_config=1
-pmf=2
-dpp_config_processing=2
-network={
-	ssid="test"
-	key_mgmt=DPP
-	ieee80211w=2
-	dpp_connector="<Connector value provided by Configurator>"
-	dpp_netaccesskey=<Net access key provided by Configurator>
-	dpp_csign=<C-sign-key value provided by Configurator>
-}
diff --git a/wpa_supplicant/README-P2P b/wpa_supplicant/README-P2P
index 55a60a2..23ac7fa 100644
--- a/wpa_supplicant/README-P2P
+++ b/wpa_supplicant/README-P2P
@@ -150,7 +150,7 @@
 
 p2p_connect <peer device address> <pbc|pin|PIN#|p2ps> [display|keypad|p2ps]
 	[persistent|persistent=<network id>] [join|auth]
-	[go_intent=<0..15>] [freq=<in MHz>] [ht40] [vht] [he] [provdisc] [auto]
+	[go_intent=<0..15>] [freq=<in MHz>] [ht40] [vht] [provdisc] [auto]
 	[ssid=<hexdump>]
 
 Start P2P group formation with a discovered P2P peer. This includes
@@ -262,7 +262,7 @@
     session_mac - Mandatory MAC address that owns/initiated the session
 
 p2p_group_add [persistent|persistent=<network id>] [freq=<freq in MHz>]
-	[ht40] [vht] [he]
+	[ht40] [vht]
 
 Set up a P2P group owner manually (i.e., without group owner
 negotiation with a specific peer). This is also known as autonomous
@@ -558,7 +558,7 @@
 Invitation
 
 p2p_invite [persistent=<network id>|group=<group ifname>] [peer=address]
-	[go_dev_addr=address] [freq=<freq in MHz>] [ht40] [vht] [he]
+	[go_dev_addr=address] [freq=<freq in MHz>] [ht40] [vht]
 	[pref=<MHz>]
 
 Invite a peer to join a group (e.g., group=wlan1) or to reinvoke a
diff --git a/wpa_supplicant/android.config b/wpa_supplicant/android.config
index feff916..d4146db 100644
--- a/wpa_supplicant/android.config
+++ b/wpa_supplicant/android.config
@@ -277,9 +277,6 @@
 # Driver support is also needed for IEEE 802.11w.
 CONFIG_IEEE80211W=y
 
-# Support Operating Channel Validation
-#CONFIG_OCV=y
-
 # Select TLS implementation
 # openssl = OpenSSL (default)
 # gnutls = GnuTLS
@@ -517,6 +514,8 @@
 #CONFIG_MBO=y
 
 # Fast Initial Link Setup (FILS) (IEEE 802.11ai)
+# Note: This is an experimental and not yet complete implementation. This
+# should not be enabled for production use.
 #CONFIG_FILS=y
 
 # Support RSN on IBSS networks
diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c
index 453c99d..ea846a0 100644
--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
@@ -334,9 +334,6 @@
 			list[8] = -1;
 		}
 		conf->supported_rates = list;
-#ifdef CONFIG_IEEE80211AX
-		conf->ieee80211ax = ssid->he;
-#endif /* CONFIG_IEEE80211AX */
 	}
 
 	bss->isolate = !wpa_s->conf->p2p_intra_bss;
@@ -497,10 +494,6 @@
 		bss->ieee80211w = ssid->ieee80211w;
 #endif /* CONFIG_IEEE80211W */
 
-#ifdef CONFIG_OCV
-	bss->ocv = ssid->ocv;
-#endif /* CONFIG_OCV */
-
 #ifdef CONFIG_WPS
 	/*
 	 * Enable WPS by default for open and WPA/WPA2-Personal network, but
@@ -1386,16 +1379,13 @@
 void wpas_ap_ch_switch(struct wpa_supplicant *wpa_s, int freq, int ht,
 		       int offset, int width, int cf1, int cf2)
 {
-	struct hostapd_iface *iface = wpa_s->ap_iface;
-
-	if (!iface)
-		iface = wpa_s->ifmsh;
-	if (!iface)
+	if (!wpa_s->ap_iface)
 		return;
+
 	wpa_s->assoc_freq = freq;
 	if (wpa_s->current_ssid)
 		wpa_s->current_ssid->frequency = freq;
-	hostapd_event_ch_switch(iface->bss[0], freq, ht,
+	hostapd_event_ch_switch(wpa_s->ap_iface->bss[0], freq, ht,
 				offset, width, cf1, cf2);
 }
 
@@ -1592,14 +1582,10 @@
 void wpas_ap_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
 				      struct dfs_event *radar)
 {
-	struct hostapd_iface *iface = wpa_s->ap_iface;
-
-	if (!iface)
-		iface = wpa_s->ifmsh;
-	if (!iface || !iface->bss[0])
+	if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 		return;
 	wpa_printf(MSG_DEBUG, "DFS radar detected on %d MHz", radar->freq);
-	hostapd_dfs_radar_detected(iface, radar->freq,
+	hostapd_dfs_radar_detected(wpa_s->ap_iface, radar->freq,
 				   radar->ht_enabled, radar->chan_offset,
 				   radar->chan_width,
 				   radar->cf1, radar->cf2);
@@ -1609,14 +1595,10 @@
 void wpas_ap_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
 				   struct dfs_event *radar)
 {
-	struct hostapd_iface *iface = wpa_s->ap_iface;
-
-	if (!iface)
-		iface = wpa_s->ifmsh;
-	if (!iface || !iface->bss[0])
+	if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 		return;
 	wpa_printf(MSG_DEBUG, "DFS CAC started on %d MHz", radar->freq);
-	hostapd_dfs_start_cac(iface, radar->freq,
+	hostapd_dfs_start_cac(wpa_s->ap_iface, radar->freq,
 			      radar->ht_enabled, radar->chan_offset,
 			      radar->chan_width, radar->cf1, radar->cf2);
 }
@@ -1625,14 +1607,10 @@
 void wpas_ap_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
 				    struct dfs_event *radar)
 {
-	struct hostapd_iface *iface = wpa_s->ap_iface;
-
-	if (!iface)
-		iface = wpa_s->ifmsh;
-	if (!iface || !iface->bss[0])
+	if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 		return;
 	wpa_printf(MSG_DEBUG, "DFS CAC finished on %d MHz", radar->freq);
-	hostapd_dfs_complete_cac(iface, 1, radar->freq,
+	hostapd_dfs_complete_cac(wpa_s->ap_iface, 1, radar->freq,
 				 radar->ht_enabled, radar->chan_offset,
 				 radar->chan_width, radar->cf1, radar->cf2);
 }
@@ -1641,14 +1619,10 @@
 void wpas_ap_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
 				   struct dfs_event *radar)
 {
-	struct hostapd_iface *iface = wpa_s->ap_iface;
-
-	if (!iface)
-		iface = wpa_s->ifmsh;
-	if (!iface || !iface->bss[0])
+	if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 		return;
 	wpa_printf(MSG_DEBUG, "DFS CAC aborted on %d MHz", radar->freq);
-	hostapd_dfs_complete_cac(iface, 0, radar->freq,
+	hostapd_dfs_complete_cac(wpa_s->ap_iface, 0, radar->freq,
 				 radar->ht_enabled, radar->chan_offset,
 				 radar->chan_width, radar->cf1, radar->cf2);
 }
@@ -1657,14 +1631,10 @@
 void wpas_ap_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
 					struct dfs_event *radar)
 {
-	struct hostapd_iface *iface = wpa_s->ap_iface;
-
-	if (!iface)
-		iface = wpa_s->ifmsh;
-	if (!iface || !iface->bss[0])
+	if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 		return;
 	wpa_printf(MSG_DEBUG, "DFS NOP finished on %d MHz", radar->freq);
-	hostapd_dfs_nop_finished(iface, radar->freq,
+	hostapd_dfs_nop_finished(wpa_s->ap_iface, radar->freq,
 				 radar->ht_enabled, radar->chan_offset,
 				 radar->chan_width, radar->cf1, radar->cf2);
 }
diff --git a/wpa_supplicant/bss.c b/wpa_supplicant/bss.c
index 9b19f37..3a41db9 100644
--- a/wpa_supplicant/bss.c
+++ b/wpa_supplicant/bss.c
@@ -1,6 +1,6 @@
 /*
  * BSS table
- * Copyright (c) 2009-2019, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2009-2015, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -1337,10 +1337,3 @@
 	return NULL;
 }
 #endif /* CONFIG_FILS */
-
-
-int wpa_bss_ext_capab(const struct wpa_bss *bss, unsigned int capab)
-{
-	return ieee802_11_ext_capab(wpa_bss_get_ie(bss, WLAN_EID_EXT_CAPAB),
-				    capab);
-}
diff --git a/wpa_supplicant/bss.h b/wpa_supplicant/bss.h
index 3ce8cd3..5251b2c 100644
--- a/wpa_supplicant/bss.h
+++ b/wpa_supplicant/bss.h
@@ -1,6 +1,6 @@
 /*
  * BSS table
- * Copyright (c) 2009-2019, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2009-2015, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -148,7 +148,6 @@
 struct wpa_bss_anqp * wpa_bss_anqp_alloc(void);
 int wpa_bss_anqp_unshare_alloc(struct wpa_bss *bss);
 const u8 * wpa_bss_get_fils_cache_id(struct wpa_bss *bss);
-int wpa_bss_ext_capab(const struct wpa_bss *bss, unsigned int capab);
 
 static inline int bss_is_dmg(const struct wpa_bss *bss)
 {
diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index 2902413..5cdc059 100644
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
@@ -1043,30 +1043,6 @@
 #endif /* CONFIG_IEEE80211R */
 #endif /* CONFIG_FILS */
 
-#ifdef CONFIG_DPP
-	if (ssid->key_mgmt & WPA_KEY_MGMT_DPP) {
-		ret = os_snprintf(pos, end - pos, "%sDPP",
-				  pos == buf ? "" : " ");
-		if (os_snprintf_error(end - pos, ret)) {
-			end[-1] = '\0';
-			return buf;
-		}
-		pos += ret;
-	}
-#endif /* CONFIG_DPP */
-
-#ifdef CONFIG_OWE
-	if (ssid->key_mgmt & WPA_KEY_MGMT_OWE) {
-		ret = os_snprintf(pos, end - pos, "%sOWE",
-				  pos == buf ? "" : " ");
-		if (os_snprintf_error(end - pos, ret)) {
-			end[-1] = '\0';
-			return buf;
-		}
-		pos += ret;
-	}
-#endif /* CONFIG_OWE */
-
 	if (pos == buf) {
 		os_free(buf);
 		buf = NULL;
@@ -2002,21 +1978,16 @@
 				    struct wpa_ssid *ssid, int line,
 				    const char *value)
 {
-	size_t len;
-
-	len = os_strlen(value);
-	if (len > 2 * MACSEC_CAK_MAX_LEN ||
-	    (len != 2 * 16 && len != 2 * 32) ||
-	    hexstr2bin(value, ssid->mka_cak, len / 2)) {
+	if (hexstr2bin(value, ssid->mka_cak, MACSEC_CAK_LEN) ||
+	    value[MACSEC_CAK_LEN * 2] != '\0') {
 		wpa_printf(MSG_ERROR, "Line %d: Invalid MKA-CAK '%s'.",
 			   line, value);
 		return -1;
 	}
-	ssid->mka_cak_len = len / 2;
+
 	ssid->mka_psk_set |= MKA_PSK_SET_CAK;
 
-	wpa_hexdump_key(MSG_MSGDUMP, "MKA-CAK", ssid->mka_cak,
-			ssid->mka_cak_len);
+	wpa_hexdump_key(MSG_MSGDUMP, "MKA-CAK", ssid->mka_cak, MACSEC_CAK_LEN);
 	return 0;
 }
 
@@ -2025,18 +1996,8 @@
 				    struct wpa_ssid *ssid, int line,
 				    const char *value)
 {
-	size_t len;
-
-	len = os_strlen(value);
-	if (len > 2 * MACSEC_CKN_MAX_LEN || /* too long */
-	    len < 2 || /* too short */
-	    len % 2 != 0 /* not an integral number of bytes */) {
-		wpa_printf(MSG_ERROR, "Line %d: Invalid MKA-CKN '%s'.",
-			   line, value);
-		return -1;
-	}
-	ssid->mka_ckn_len = len / 2;
-	if (hexstr2bin(value, ssid->mka_ckn, ssid->mka_ckn_len)) {
+	if (hexstr2bin(value, ssid->mka_ckn, MACSEC_CKN_LEN) ||
+	    value[MACSEC_CKN_LEN * 2] != '\0') {
 		wpa_printf(MSG_ERROR, "Line %d: Invalid MKA-CKN '%s'.",
 			   line, value);
 		return -1;
@@ -2044,8 +2005,7 @@
 
 	ssid->mka_psk_set |= MKA_PSK_SET_CKN;
 
-	wpa_hexdump_key(MSG_MSGDUMP, "MKA-CKN", ssid->mka_ckn,
-			ssid->mka_ckn_len);
+	wpa_hexdump_key(MSG_MSGDUMP, "MKA-CKN", ssid->mka_ckn, MACSEC_CKN_LEN);
 	return 0;
 }
 
@@ -2058,7 +2018,7 @@
 	if (!(ssid->mka_psk_set & MKA_PSK_SET_CAK))
 		return NULL;
 
-	return wpa_config_write_string_hex(ssid->mka_cak, ssid->mka_cak_len);
+	return wpa_config_write_string_hex(ssid->mka_cak, MACSEC_CAK_LEN);
 }
 
 
@@ -2067,7 +2027,7 @@
 {
 	if (!(ssid->mka_psk_set & MKA_PSK_SET_CKN))
 		return NULL;
-	return wpa_config_write_string_hex(ssid->mka_ckn, ssid->mka_ckn_len);
+	return wpa_config_write_string_hex(ssid->mka_ckn, MACSEC_CKN_LEN);
 }
 
 #endif /* NO_CONFIG_WRITE */
@@ -2075,43 +2035,6 @@
 #endif /* CONFIG_MACSEC */
 
 
-#ifdef CONFIG_OCV
-
-static int wpa_config_parse_ocv(const struct parse_data *data,
-				struct wpa_ssid *ssid, int line,
-				const char *value)
-{
-	char *end;
-
-	ssid->ocv = strtol(value, &end, 0);
-	if (*end || ssid->ocv < 0 || ssid->ocv > 1) {
-		wpa_printf(MSG_ERROR, "Line %d: Invalid ocv value '%s'.",
-			   line, value);
-		return -1;
-	}
-	if (ssid->ocv && ssid->ieee80211w == NO_MGMT_FRAME_PROTECTION)
-		ssid->ieee80211w = MGMT_FRAME_PROTECTION_OPTIONAL;
-	return 0;
-}
-
-
-#ifndef NO_CONFIG_WRITE
-static char * wpa_config_write_ocv(const struct parse_data *data,
-				   struct wpa_ssid *ssid)
-{
-	char *value = os_malloc(20);
-
-	if (!value)
-		return NULL;
-	os_snprintf(value, 20, "%d", ssid->ocv);
-	value[20 - 1] = '\0';
-	return value;
-}
-#endif /* NO_CONFIG_WRITE */
-
-#endif /* CONFIG_OCV */
-
-
 static int wpa_config_parse_peerkey(const struct parse_data *data,
 				    struct wpa_ssid *ssid, int line,
 				    const char *value)
@@ -2315,9 +2238,6 @@
 #ifdef CONFIG_IEEE80211W
 	{ INT_RANGE(ieee80211w, 0, 2) },
 #endif /* CONFIG_IEEE80211W */
-#ifdef CONFIG_OCV
-	{ FUNC(ocv) },
-#endif /* CONFIG_OCV */
 	{ FUNC(peerkey) /* obsolete - removed */ },
 	{ INT_RANGE(mixed_cell, 0, 1) },
 	{ INT_RANGE(frequency, 0, 65000) },
@@ -2347,8 +2267,6 @@
 	{ INT_RANGE(disable_sgi, 0, 1) },
 	{ INT_RANGE(disable_ldpc, 0, 1) },
 	{ INT_RANGE(ht40_intolerant, 0, 1) },
-	{ INT_RANGE(tx_stbc, -1, 1) },
-	{ INT_RANGE(rx_stbc, -1, 3) },
 	{ INT_RANGE(disable_max_amsdu, -1, 1) },
 	{ INT_RANGE(ampdu_factor, -1, 3) },
 	{ INT_RANGE(ampdu_density, -1, 7) },
@@ -2381,8 +2299,6 @@
 #ifdef CONFIG_MACSEC
 	{ INT_RANGE(macsec_policy, 0, 1) },
 	{ INT_RANGE(macsec_integ_only, 0, 1) },
-	{ INT_RANGE(macsec_replay_protect, 0, 1) },
-	{ INT(macsec_replay_window) },
 	{ INT_RANGE(macsec_port, 1, 65534) },
 	{ INT_RANGE(mka_priority, 0, 255) },
 	{ FUNC_KEY(mka_cak) },
@@ -2404,7 +2320,6 @@
 #endif /* CONFIG_DPP */
 	{ INT_RANGE(owe_group, 0, 65535) },
 	{ INT_RANGE(owe_only, 0, 1) },
-	{ INT_RANGE(multi_ap_backhaul_sta, 0, 1) },
 };
 
 #undef OFFSET
@@ -2871,8 +2786,6 @@
 	ssid->disable_ht40 = DEFAULT_DISABLE_HT40;
 	ssid->disable_sgi = DEFAULT_DISABLE_SGI;
 	ssid->disable_ldpc = DEFAULT_DISABLE_LDPC;
-	ssid->tx_stbc = DEFAULT_TX_STBC;
-	ssid->rx_stbc = DEFAULT_RX_STBC;
 	ssid->disable_max_amsdu = DEFAULT_DISABLE_MAX_AMSDU;
 	ssid->ampdu_factor = DEFAULT_AMPDU_FACTOR;
 	ssid->ampdu_density = DEFAULT_AMPDU_DENSITY;
@@ -2903,7 +2816,6 @@
 	ssid->mka_priority = DEFAULT_PRIO_NOT_KEY_SERVER;
 #endif /* CONFIG_MACSEC */
 	ssid->mac_addr = -1;
-	ssid->max_oper_chwidth = DEFAULT_MAX_OPER_CHWIDTH;
 }
 
 
@@ -4774,7 +4686,6 @@
 	{ INT_RANGE(p2p_optimize_listen_chan, 0, 1), 0 },
 	{ INT(p2p_go_ht40), 0 },
 	{ INT(p2p_go_vht), 0 },
-	{ INT(p2p_go_he), 0 },
 	{ INT(p2p_disabled), 0 },
 	{ INT_RANGE(p2p_go_ctwindow, 0, 127), 0 },
 	{ INT(p2p_no_group_iface), 0 },
@@ -4861,7 +4772,9 @@
 	{ INT(gas_rand_addr_lifetime), 0 },
 	{ INT_RANGE(gas_rand_mac_addr, 0, 2), 0 },
 	{ INT_RANGE(dpp_config_processing, 0, 2), 0 },
+	{ INT_RANGE(bss_no_flush_when_down, 0, 1), 0 },
 	{ INT_RANGE(coloc_intf_reporting, 0, 1), 0 },
+	{ INT_RANGE(bss_no_flush_when_down, 0, 1), 0 },
 };
 
 #undef FUNC
diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h
index 4b84200..6eb0074 100644
--- a/wpa_supplicant/config.h
+++ b/wpa_supplicant/config.h
@@ -1079,16 +1079,6 @@
 	int p2p_go_vht;
 
 	/**
-	 * p2p_go_he - Default mode for 11ax HE enable when operating as GO
-	 *
-	 * This will take effect for p2p_group_add, p2p_connect, and p2p_invite.
-	 * Note that regulatory constraints and driver capabilities are
-	 * consulted anyway, so setting it to 1 can't do real harm.
-	 * By default: 0 (disabled)
-	 */
-	int p2p_go_he;
-
-	/**
 	 * p2p_go_ctwindow - CTWindow to use when operating as GO
 	 *
 	 * By default: 0 (no CTWindow). Values 0-127 can be used to indicate
@@ -1493,8 +1483,7 @@
 	 * p2p_device_random_mac_addr - P2P Device MAC address policy default
 	 *
 	 * 0 = use permanent MAC address
-	 * 1 = use random MAC address on creating the interface if there is no
-	 * persistent groups.
+	 * 1 = use random MAC address on creating the interface if there is no persistent groups.
 	 *
 	 * By default, permanent MAC address is used.
 	 */
@@ -1503,8 +1492,9 @@
 	/**
 	 * p2p_device_persistent_mac_addr - Record last used MAC address
 	 *
-	 * If there are saved persistent groups, P2P cannot generate another
-	 * random MAC address, and need to restore to last used MAC address.
+	 * If there are saved persistent groups, P2P cannot generate another random MAC address,
+	 * and need to restore to last used MAC address.
+	 * format: aa:bb:cc:dd:ee:ff
 	 */
 	u8 p2p_device_persistent_mac_addr[ETH_ALEN];
 
diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c
index f1d865c..becc809 100644
--- a/wpa_supplicant/config_file.c
+++ b/wpa_supplicant/config_file.c
@@ -160,15 +160,6 @@
 		errors++;
 	}
 
-#ifdef CONFIG_OCV
-	if (ssid->ocv && ssid->ieee80211w == NO_MGMT_FRAME_PROTECTION) {
-		wpa_printf(MSG_ERROR,
-			   "Line %d: PMF needs to be enabled whenever using OCV",
-			   line);
-		errors++;
-	}
-#endif /* CONFIG_OCV */
-
 	return errors;
 }
 
@@ -493,7 +484,7 @@
 	if (value == NULL)
 		return;
 	fprintf(f, "\t%s=%s\n", field, value);
-	str_clear_free(value);
+	os_free(value);
 }
 
 
@@ -838,7 +829,7 @@
 	INT(vht);
 	INT_DEF(ht, 1);
 	INT(ht40);
-	INT_DEF(max_oper_chwidth, DEFAULT_MAX_OPER_CHWIDTH);
+	INT(max_oper_chwidth);
 	INT(vht_center_freq1);
 	INT(vht_center_freq2);
 	INT(pbss);
@@ -862,8 +853,6 @@
 	write_mka_cak(f, ssid);
 	write_mka_ckn(f, ssid);
 	INT(macsec_integ_only);
-	INT(macsec_replay_protect);
-	INT(macsec_replay_window);
 	INT(macsec_port);
 	INT_DEF(mka_priority, DEFAULT_PRIO_NOT_KEY_SERVER);
 #endif /* CONFIG_MACSEC */
@@ -891,15 +880,12 @@
 #endif /* CONFIG_DPP */
 	INT(owe_group);
 	INT(owe_only);
-	INT(multi_ap_backhaul_sta);
 #ifdef CONFIG_HT_OVERRIDES
 	INT_DEF(disable_ht, DEFAULT_DISABLE_HT);
 	INT_DEF(disable_ht40, DEFAULT_DISABLE_HT40);
 	INT_DEF(disable_sgi, DEFAULT_DISABLE_SGI);
 	INT_DEF(disable_ldpc, DEFAULT_DISABLE_LDPC);
 	INT(ht40_intolerant);
-	INT_DEF(tx_stbc, DEFAULT_TX_STBC);
-	INT_DEF(rx_stbc, DEFAULT_RX_STBC);
 	INT_DEF(disable_max_amsdu, DEFAULT_DISABLE_MAX_AMSDU);
 	INT_DEF(ampdu_factor, DEFAULT_AMPDU_FACTOR);
 	INT_DEF(ampdu_density, DEFAULT_AMPDU_DENSITY);
@@ -1262,8 +1248,6 @@
 		fprintf(f, "p2p_go_ht40=%d\n", config->p2p_go_ht40);
 	if (config->p2p_go_vht)
 		fprintf(f, "p2p_go_vht=%d\n", config->p2p_go_vht);
-	if (config->p2p_go_he)
-		fprintf(f, "p2p_go_he=%d\n", config->p2p_go_he);
 	if (config->p2p_go_ctwindow != DEFAULT_P2P_GO_CTWINDOW)
 		fprintf(f, "p2p_go_ctwindow=%d\n", config->p2p_go_ctwindow);
 	if (config->p2p_disabled)
@@ -1539,6 +1523,9 @@
 	if (config->p2p_interface_random_mac_addr)
 		fprintf(f, "p2p_interface_random_mac_addr=%d\n",
 			config->p2p_interface_random_mac_addr);
+	if (config->bss_no_flush_when_down)
+		fprintf(f, "bss_no_flush_when_down=%d\n",
+			config->bss_no_flush_when_down);
 }
 
 #endif /* CONFIG_NO_CONFIG_WRITE */
diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h
index 1b2b1f1..d2a52d7 100644
--- a/wpa_supplicant/config_ssid.h
+++ b/wpa_supplicant/config_ssid.h
@@ -33,13 +33,10 @@
 #define DEFAULT_DISABLE_HT40 0
 #define DEFAULT_DISABLE_SGI 0
 #define DEFAULT_DISABLE_LDPC 0
-#define DEFAULT_TX_STBC -1 /* no change */
-#define DEFAULT_RX_STBC -1 /* no change */
 #define DEFAULT_DISABLE_MAX_AMSDU -1 /* no change */
 #define DEFAULT_AMPDU_FACTOR -1 /* no change */
 #define DEFAULT_AMPDU_DENSITY -1 /* no change */
 #define DEFAULT_USER_SELECTED_SIM 1
-#define DEFAULT_MAX_OPER_CHWIDTH -1
 
 struct psk_list_entry {
 	struct dl_list list;
@@ -460,17 +457,6 @@
 	enum mfp_options ieee80211w;
 #endif /* CONFIG_IEEE80211W */
 
-#ifdef CONFIG_OCV
-	/**
-	 * ocv - Enable/disable operating channel validation
-	 *
-	 * If this parameter is set to 1, stations will exchange OCI element
-	 * to cryptographically verify the operating channel. Setting this
-	 * parameter to 0 disables this option. Default value: 0.
-	 */
-	int ocv;
-#endif /* CONFIG_OCV */
-
 	/**
 	 * frequency - Channel frequency in megahertz (MHz) for IBSS
 	 *
@@ -519,8 +505,6 @@
 
 	int vht;
 
-	int he;
-
 	int max_oper_chwidth;
 
 	unsigned int vht_center_freq1;
@@ -698,22 +682,6 @@
 	 * By default (empty string): Use whatever the OS has configured.
 	 */
 	char *ht_mcs;
-
-	/**
-	 * tx_stbc - Indicate STBC support for TX streams
-	 *
-	 * Value: -1..1, by default (-1): use whatever the OS or card has
-	 * configured. See IEEE Std 802.11-2016, 9.4.2.56.2.
-	 */
-	int tx_stbc;
-
-	/**
-	 * rx_stbc - Indicate STBC support for RX streams
-	 *
-	 * Value: -1..3, by default (-1): use whatever the OS or card has
-	 * configured. See IEEE Std 802.11-2016, 9.4.2.56.2.
-	 */
-	int rx_stbc;
 #endif /* CONFIG_HT_OVERRIDES */
 
 #ifdef CONFIG_VHT_OVERRIDES
@@ -806,33 +774,6 @@
 	int macsec_integ_only;
 
 	/**
-	 * macsec_replay_protect - Enable MACsec replay protection
-	 *
-	 * This setting applies only when MACsec is in use, i.e.,
-	 *  - macsec_policy is enabled
-	 *  - the key server has decided to enable MACsec
-	 *
-	 * 0: Replay protection disabled (default)
-	 * 1: Replay protection enabled
-	 */
-	int macsec_replay_protect;
-
-	/**
-	 * macsec_replay_window - MACsec replay protection window
-	 *
-	 * A window in which replay is tolerated, to allow receipt of frames
-	 * that have been misordered by the network.
-	 *
-	 * This setting applies only when MACsec replay protection active, i.e.,
-	 *  - macsec_replay_protect is enabled
-	 *  - the key server has decided to enable MACsec
-	 *
-	 * 0: No replay window, strict check (default)
-	 * 1..2^32-1: number of packets that could be misordered
-	 */
-	u32 macsec_replay_window;
-
-	/**
 	 * macsec_port - MACsec port (in SCI)
 	 *
 	 * Port component of the SCI.
@@ -851,16 +792,14 @@
 	/**
 	 * mka_ckn - MKA pre-shared CKN
 	 */
-#define MACSEC_CKN_MAX_LEN 32
-	size_t mka_ckn_len;
-	u8 mka_ckn[MACSEC_CKN_MAX_LEN];
+#define MACSEC_CKN_LEN 32
+	u8 mka_ckn[MACSEC_CKN_LEN];
 
 	/**
 	 * mka_cak - MKA pre-shared CAK
 	 */
-#define MACSEC_CAK_MAX_LEN 32
-	size_t mka_cak_len;
-	u8 mka_cak[MACSEC_CAK_MAX_LEN];
+#define MACSEC_CAK_LEN 16
+	u8 mka_cak[MACSEC_CAK_LEN];
 
 #define MKA_PSK_SET_CKN BIT(0)
 #define MKA_PSK_SET_CAK BIT(1)
@@ -998,13 +937,6 @@
 	 * the selection attempts for OWE BSS exceed the configured threshold.
 	 */
 	int owe_transition_bss_select_count;
-
-	/**
-	 * multi_ap_backhaul_sta - Multi-AP backhaul STA
-	 * 0 = normal (non-Multi-AP) station
-	 * 1 = Multi-AP backhaul station
-	 */
-	int multi_ap_backhaul_sta;
 };
 
 #endif /* CONFIG_SSID_H */
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index a0db9e4..77a3133 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -1,6 +1,6 @@
 /*
  * WPA Supplicant / Control interface (shared code for all backends)
- * Copyright (c) 2004-2019, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2004-2015, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -56,7 +56,6 @@
 #include "drivers/driver.h"
 #include "mesh.h"
 #include "dpp_supplicant.h"
-#include "sme.h"
 
 static int wpa_supplicant_global_iface_list(struct wpa_global *global,
 					    char *buf, int len);
@@ -2913,12 +2912,6 @@
 		pos += ret;
 	}
 #endif /* CONFIG_FST */
-	if (wpa_bss_ext_capab(bss, WLAN_EXT_CAPAB_UTF_8_SSID)) {
-		ret = os_snprintf(pos, end - pos, "[UTF-8]");
-		if (os_snprintf_error(end - pos, ret))
-			return -1;
-		pos += ret;
-	}
 
 	ret = os_snprintf(pos, end - pos, "\t%s",
 			  wpa_ssid_txt(bss->ssid, bss->ssid_len));
@@ -3994,22 +3987,6 @@
 	}
 #endif /* CONFIG_IEEE80211R */
 #endif /* CONFIG_FILS */
-#ifdef CONFIG_IEEE80211R
-	if (capa->key_mgmt & WPA_DRIVER_CAPA_KEY_MGMT_FT_PSK) {
-		ret = os_snprintf(pos, end - pos, " FT-PSK");
-		if (os_snprintf_error(end - pos, ret))
-			return pos - buf;
-		pos += ret;
-	}
-#endif /* CONFIG_IEEE80211R */
-#ifdef CONFIG_SAE
-	if (capa->key_mgmt & WPA_DRIVER_CAPA_KEY_MGMT_SAE) {
-		ret = os_snprintf(pos, end - pos, " SAE");
-		if (os_snprintf_error(end - pos, ret))
-			return pos - buf;
-		pos += ret;
-	}
-#endif /* CONFIG_SAE */
 
 	return pos - buf;
 }
@@ -4410,13 +4387,6 @@
 	}
 #endif /* CONFIG_FILS */
 
-	if (os_strcmp(field, "multibss") == 0 && wpa_s->multi_bss_support) {
-		res = os_snprintf(buf, buflen, "MULTIBSS-STA");
-		if (os_snprintf_error(buflen, res))
-			return -1;
-		return res;
-	}
-
 	wpa_printf(MSG_DEBUG, "CTRL_IFACE: Unknown GET_CAPABILITY field '%s'",
 		   field);
 
@@ -4747,20 +4717,6 @@
 			pos += ret;
 		}
 #endif /* CONFIG_FILS */
-#ifdef CONFIG_FST
-		if (wpa_bss_get_ie(bss, WLAN_EID_MULTI_BAND)) {
-			ret = os_snprintf(pos, end - pos, "[FST]");
-			if (os_snprintf_error(end - pos, ret))
-				return 0;
-			pos += ret;
-		}
-#endif /* CONFIG_FST */
-		if (wpa_bss_ext_capab(bss, WLAN_EXT_CAPAB_UTF_8_SSID)) {
-			ret = os_snprintf(pos, end - pos, "[UTF-8]");
-			if (os_snprintf_error(end - pos, ret))
-				return 0;
-			pos += ret;
-		}
 
 		ret = os_snprintf(pos, end - pos, "\n");
 		if (os_snprintf_error(end - pos, ret))
@@ -5546,7 +5502,6 @@
 	int ht40, vht, max_oper_chwidth, chwidth = 0, freq2 = 0;
 	u8 _group_ssid[SSID_MAX_LEN], *group_ssid = NULL;
 	size_t group_ssid_len = 0;
-	int he;
 
 	if (!wpa_s->global->p2p_init_wpa_s)
 		return -1;
@@ -5559,7 +5514,7 @@
 	/* <addr> <"pbc" | "pin" | PIN> [label|display|keypad|p2ps]
 	 * [persistent|persistent=<network id>]
 	 * [join] [auth] [go_intent=<0..15>] [freq=<in MHz>] [provdisc]
-	 * [ht40] [vht] [he] [auto] [ssid=<hexdump>] */
+	 * [ht40] [vht] [auto] [ssid=<hexdump>] */
 
 	if (hwaddr_aton(cmd, addr))
 		return -1;
@@ -5590,7 +5545,6 @@
 	vht = (os_strstr(cmd, " vht") != NULL) || wpa_s->conf->p2p_go_vht;
 	ht40 = (os_strstr(cmd, " ht40") != NULL) || wpa_s->conf->p2p_go_ht40 ||
 		vht;
-	he = (os_strstr(cmd, " he") != NULL) || wpa_s->conf->p2p_go_he;
 
 	pos2 = os_strstr(pos, " go_intent=");
 	if (pos2) {
@@ -5661,7 +5615,7 @@
 	new_pin = wpas_p2p_connect(wpa_s, addr, pin, wps_method,
 				   persistent_group, automatic, join,
 				   auth, go_intent, freq, freq2, persistent_id,
-				   pd, ht40, vht, max_oper_chwidth, he,
+				   pd, ht40, vht, max_oper_chwidth,
 				   group_ssid, group_ssid_len);
 	if (new_pin == -2) {
 		os_memcpy(buf, "FAIL-CHANNEL-UNAVAILABLE\n", 25);
@@ -6217,7 +6171,7 @@
 	struct wpa_ssid *ssid;
 	u8 *_peer = NULL, peer[ETH_ALEN];
 	int freq = 0, pref_freq = 0;
-	int ht40, vht, he, max_oper_chwidth, chwidth = 0, freq2 = 0;
+	int ht40, vht, max_oper_chwidth, chwidth = 0, freq2 = 0;
 
 	id = atoi(cmd);
 	pos = os_strstr(cmd, " peer=");
@@ -6254,7 +6208,6 @@
 	vht = (os_strstr(cmd, " vht") != NULL) || wpa_s->conf->p2p_go_vht;
 	ht40 = (os_strstr(cmd, " ht40") != NULL) || wpa_s->conf->p2p_go_ht40 ||
 		vht;
-	he = (os_strstr(cmd, " he") != NULL) || wpa_s->conf->p2p_go_he;
 
 	pos = os_strstr(cmd, "freq2=");
 	if (pos)
@@ -6269,7 +6222,7 @@
 		return -1;
 
 	return wpas_p2p_invite(wpa_s, _peer, ssid, NULL, freq, freq2, ht40, vht,
-			       max_oper_chwidth, pref_freq, he);
+			       max_oper_chwidth, pref_freq);
 }
 
 
@@ -6317,8 +6270,7 @@
 
 static int p2p_ctrl_group_add_persistent(struct wpa_supplicant *wpa_s,
 					 int id, int freq, int vht_center_freq2,
-					 int ht40, int vht, int vht_chwidth,
-					 int he)
+					 int ht40, int vht, int vht_chwidth)
 {
 	struct wpa_ssid *ssid;
 
@@ -6332,7 +6284,7 @@
 
 	return wpas_p2p_group_add_persistent(wpa_s, ssid, 0, freq,
 					     vht_center_freq2, 0, ht40, vht,
-					     vht_chwidth, he, NULL, 0, 0);
+					     vht_chwidth, NULL, 0, 0);
 }
 
 
@@ -6341,7 +6293,6 @@
 	int freq = 0, persistent = 0, group_id = -1;
 	int vht = wpa_s->conf->p2p_go_vht;
 	int ht40 = wpa_s->conf->p2p_go_ht40 || vht;
-	int he = wpa_s->conf->p2p_go_he;
 	int max_oper_chwidth, chwidth = 0, freq2 = 0;
 	char *token, *context = NULL;
 #ifdef CONFIG_ACS
@@ -6364,8 +6315,6 @@
 		} else if (os_strcmp(token, "vht") == 0) {
 			vht = 1;
 			ht40 = 1;
-		} else if (os_strcmp(token, "he") == 0) {
-			he = 1;
 		} else if (os_strcmp(token, "persistent") == 0) {
 			persistent = 1;
 		} else {
@@ -6401,10 +6350,10 @@
 	if (group_id >= 0)
 		return p2p_ctrl_group_add_persistent(wpa_s, group_id,
 						     freq, freq2, ht40, vht,
-						     max_oper_chwidth, he);
+						     max_oper_chwidth);
 
 	return wpas_p2p_group_add(wpa_s, persistent, freq, freq2, ht40, vht,
-				  max_oper_chwidth, he);
+				  max_oper_chwidth);
 }
 
 
@@ -7992,10 +7941,6 @@
 
 	wpabuf_free(wpa_s->ric_ies);
 	wpa_s->ric_ies = NULL;
-
-	wpa_supplicant_update_channel_list(wpa_s, NULL);
-
-	free_bss_tmp_disallowed(wpa_s);
 }
 
 
@@ -8818,39 +8763,26 @@
 	struct iphdr ip;
 	const u8 *pos;
 	unsigned int i;
-	char extra[30];
 
-	if (len < sizeof(*eth) + sizeof(ip) || len > HWSIM_PACKETLEN) {
-		wpa_printf(MSG_DEBUG,
-			   "test data: RX - ignore unexpected length %d",
-			   (int) len);
+	if (len != HWSIM_PACKETLEN)
 		return;
-	}
 
 	eth = (const struct ether_header *) buf;
 	os_memcpy(&ip, eth + 1, sizeof(ip));
 	pos = &buf[sizeof(*eth) + sizeof(ip)];
 
 	if (ip.ihl != 5 || ip.version != 4 ||
-	    ntohs(ip.tot_len) > HWSIM_IP_LEN) {
-		wpa_printf(MSG_DEBUG,
-			   "test data: RX - ignore unexpect IP header");
+	    ntohs(ip.tot_len) != HWSIM_IP_LEN)
 		return;
-	}
 
-	for (i = 0; i < ntohs(ip.tot_len) - sizeof(ip); i++) {
-		if (*pos != (u8) i) {
-			wpa_printf(MSG_DEBUG,
-				   "test data: RX - ignore mismatching payload");
+	for (i = 0; i < HWSIM_IP_LEN - sizeof(ip); i++) {
+		if (*pos != (u8) i)
 			return;
-		}
 		pos++;
 	}
-	extra[0] = '\0';
-	if (ntohs(ip.tot_len) != HWSIM_IP_LEN)
-		os_snprintf(extra, sizeof(extra), " len=%d", ntohs(ip.tot_len));
-	wpa_msg(wpa_s, MSG_INFO, "DATA-TEST-RX " MACSTR " " MACSTR "%s",
-		MAC2STR(eth->ether_dhost), MAC2STR(eth->ether_shost), extra);
+
+	wpa_msg(wpa_s, MSG_INFO, "DATA-TEST-RX " MACSTR " " MACSTR,
+		MAC2STR(eth->ether_dhost), MAC2STR(eth->ether_shost));
 }
 
 
@@ -8894,7 +8826,7 @@
 static int wpas_ctrl_iface_data_test_tx(struct wpa_supplicant *wpa_s, char *cmd)
 {
 	u8 dst[ETH_ALEN], src[ETH_ALEN];
-	char *pos, *pos2;
+	char *pos;
 	int used;
 	long int val;
 	u8 tos;
@@ -8903,12 +8835,11 @@
 	struct iphdr *ip;
 	u8 *dpos;
 	unsigned int i;
-	size_t send_len = HWSIM_IP_LEN;
 
 	if (wpa_s->l2_test == NULL)
 		return -1;
 
-	/* format: <dst> <src> <tos> [len=<length>] */
+	/* format: <dst> <src> <tos> */
 
 	pos = cmd;
 	used = hwaddr_aton2(pos, dst);
@@ -8922,19 +8853,11 @@
 		return -1;
 	pos += used;
 
-	val = strtol(pos, &pos2, 0);
+	val = strtol(pos, NULL, 0);
 	if (val < 0 || val > 0xff)
 		return -1;
 	tos = val;
 
-	pos = os_strstr(pos2, " len=");
-	if (pos) {
-		i = atoi(pos + 5);
-		if (i < sizeof(*ip) || i > HWSIM_IP_LEN)
-			return -1;
-		send_len = i;
-	}
-
 	eth = (struct ether_header *) &buf[2];
 	os_memcpy(eth->ether_dhost, dst, ETH_ALEN);
 	os_memcpy(eth->ether_shost, src, ETH_ALEN);
@@ -8945,17 +8868,17 @@
 	ip->version = 4;
 	ip->ttl = 64;
 	ip->tos = tos;
-	ip->tot_len = htons(send_len);
+	ip->tot_len = htons(HWSIM_IP_LEN);
 	ip->protocol = 1;
 	ip->saddr = htonl(192U << 24 | 168 << 16 | 1 << 8 | 1);
 	ip->daddr = htonl(192U << 24 | 168 << 16 | 1 << 8 | 2);
 	ip->check = ipv4_hdr_checksum(ip, sizeof(*ip));
 	dpos = (u8 *) (ip + 1);
-	for (i = 0; i < send_len - sizeof(*ip); i++)
+	for (i = 0; i < HWSIM_IP_LEN - sizeof(*ip); i++)
 		*dpos++ = i;
 
 	if (l2_packet_send(wpa_s->l2_test, dst, ETHERTYPE_IP, &buf[2],
-			   sizeof(struct ether_header) + send_len) < 0)
+			   HWSIM_PACKETLEN) < 0)
 		return -1;
 
 	wpa_dbg(wpa_s, MSG_DEBUG, "test data: TX dst=" MACSTR " src=" MACSTR
@@ -9535,6 +9458,13 @@
 		return -1;
 	}
 
+	if ((wpa_s->mac_addr_rand_supported & type) != type) {
+		wpa_printf(MSG_INFO,
+			   "CTRL: MAC_RAND_SCAN types=%u != supported=%u",
+			   type, wpa_s->mac_addr_rand_supported);
+		return -1;
+	}
+
 	if (enable > 1) {
 		wpa_printf(MSG_INFO,
 			   "CTRL: MAC_RAND_SCAN enable=<0/1> not specified");
@@ -9568,25 +9498,21 @@
 	}
 
 	if (type & MAC_ADDR_RAND_SCAN) {
-		if (wpas_mac_addr_rand_scan_set(wpa_s, MAC_ADDR_RAND_SCAN,
-					    addr, mask))
-			return -1;
+		wpas_mac_addr_rand_scan_set(wpa_s, MAC_ADDR_RAND_SCAN,
+					    addr, mask);
 	}
 
 	if (type & MAC_ADDR_RAND_SCHED_SCAN) {
-		if (wpas_mac_addr_rand_scan_set(wpa_s, MAC_ADDR_RAND_SCHED_SCAN,
-					    addr, mask))
-			return -1;
+		wpas_mac_addr_rand_scan_set(wpa_s, MAC_ADDR_RAND_SCHED_SCAN,
+					    addr, mask);
 
 		if (wpa_s->sched_scanning && !wpa_s->pno)
 			wpas_scan_restart_sched_scan(wpa_s);
 	}
 
 	if (type & MAC_ADDR_RAND_PNO) {
-		if (wpas_mac_addr_rand_scan_set(wpa_s, MAC_ADDR_RAND_PNO,
-					    addr, mask))
-			return -1;
-
+		wpas_mac_addr_rand_scan_set(wpa_s, MAC_ADDR_RAND_PNO,
+					    addr, mask);
 		if (wpa_s->pno) {
 			wpas_stop_pno(wpa_s);
 			wpas_start_pno(wpa_s);
@@ -9932,11 +9858,6 @@
 			reply_len += eapol_sm_get_mib(wpa_s->eapol,
 						      reply + reply_len,
 						      reply_size - reply_len);
-#ifdef CONFIG_MACSEC
-			reply_len += ieee802_1x_kay_get_mib(
-				wpa_s->kay, reply + reply_len,
-				reply_size - reply_len);
-#endif /* CONFIG_MACSEC */
 		}
 	} else if (os_strncmp(buf, "STATUS", 6) == 0) {
 		reply_len = wpa_supplicant_ctrl_iface_status(
@@ -10585,12 +10506,6 @@
 	} else if (os_strcmp(buf, "RESEND_ASSOC") == 0) {
 		if (wpas_ctrl_resend_assoc(wpa_s) < 0)
 			reply_len = -1;
-#ifdef CONFIG_IEEE80211W
-	} else if (os_strcmp(buf, "UNPROT_DEAUTH") == 0) {
-		sme_event_unprot_disconnect(
-			wpa_s, wpa_s->bssid, NULL,
-			WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA);
-#endif /* CONFIG_IEEE80211W */
 #endif /* CONFIG_TESTING_OPTIONS */
 	} else if (os_strncmp(buf, "VENDOR_ELEM_ADD ", 16) == 0) {
 		if (wpas_ctrl_vendor_elem_add(wpa_s, buf + 16) < 0)
@@ -10683,7 +10598,7 @@
 		if (wpas_dpp_configurator_remove(wpa_s, buf + 24) < 0)
 			reply_len = -1;
 	} else if (os_strncmp(buf, "DPP_CONFIGURATOR_SIGN ", 22) == 0) {
-		if (wpas_dpp_configurator_sign(wpa_s, buf + 21) < 0)
+		if (wpas_dpp_configurator_sign(wpa_s, buf + 22) < 0)
 			reply_len = -1;
 	} else if (os_strncmp(buf, "DPP_CONFIGURATOR_GET_KEY ", 25) == 0) {
 		reply_len = wpas_dpp_configurator_get_key(wpa_s, atoi(buf + 25),
diff --git a/wpa_supplicant/ctrl_iface_unix.c b/wpa_supplicant/ctrl_iface_unix.c
index 71fe7ed..b88c80a 100644
--- a/wpa_supplicant/ctrl_iface_unix.c
+++ b/wpa_supplicant/ctrl_iface_unix.c
@@ -570,8 +570,8 @@
 		}
 	}
 
-	if (gid_set && lchown(dir, -1, gid) < 0) {
-		wpa_printf(MSG_ERROR, "lchown[ctrl_interface=%s,gid=%d]: %s",
+	if (gid_set && chown(dir, -1, gid) < 0) {
+		wpa_printf(MSG_ERROR, "chown[ctrl_interface=%s,gid=%d]: %s",
 			   dir, (int) gid, strerror(errno));
 		goto fail;
 	}
@@ -638,8 +638,8 @@
 		}
 	}
 
-	if (gid_set && lchown(fname, -1, gid) < 0) {
-		wpa_printf(MSG_ERROR, "lchown[ctrl_interface=%s,gid=%d]: %s",
+	if (gid_set && chown(fname, -1, gid) < 0) {
+		wpa_printf(MSG_ERROR, "chown[ctrl_interface=%s,gid=%d]: %s",
 			   fname, (int) gid, strerror(errno));
 		goto fail;
 	}
@@ -1235,9 +1235,9 @@
 			wpa_printf(MSG_DEBUG, "ctrl_interface_group=%d",
 				   (int) gid);
 		}
-		if (lchown(ctrl, -1, gid) < 0) {
+		if (chown(ctrl, -1, gid) < 0) {
 			wpa_printf(MSG_ERROR,
-				   "lchown[global_ctrl_interface=%s,gid=%d]: %s",
+				   "chown[global_ctrl_interface=%s,gid=%d]: %s",
 				   ctrl, (int) gid, strerror(errno));
 			goto fail;
 		}
diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c
index fc2fc2e..e0f16bb 100644
--- a/wpa_supplicant/dbus/dbus_new.c
+++ b/wpa_supplicant/dbus/dbus_new.c
@@ -13,7 +13,6 @@
 #include "common.h"
 #include "common/ieee802_11_defs.h"
 #include "wps/wps.h"
-#include "ap/sta_info.h"
 #include "../config.h"
 #include "../wpa_supplicant_i.h"
 #include "../bss.h"
@@ -129,8 +128,7 @@
  * Notify listeners about event related with interface
  */
 static void wpas_dbus_signal_interface(struct wpa_supplicant *wpa_s,
-				       const char *sig_name,
-				       dbus_bool_t properties)
+				       const char *sig_name, int properties)
 {
 	struct wpas_dbus_priv *iface;
 	DBusMessage *msg;
@@ -232,7 +230,7 @@
  */
 static void wpas_dbus_signal_bss(struct wpa_supplicant *wpa_s,
 				 const char *bss_obj_path,
-				 const char *sig_name, dbus_bool_t properties)
+				 const char *sig_name, int properties)
 {
 	struct wpas_dbus_priv *iface;
 	DBusMessage *msg;
@@ -366,7 +364,7 @@
  */
 static void wpas_dbus_signal_network(struct wpa_supplicant *wpa_s,
 				     int id, const char *sig_name,
-				     dbus_bool_t properties)
+				     int properties)
 {
 	struct wpas_dbus_priv *iface;
 	DBusMessage *msg;
@@ -1079,79 +1077,6 @@
 }
 
 
-/**
- * wpas_dbus_signal_station - Send an event signal related to a station object
- * @wpa_s: %wpa_supplicant network interface data
- * @station_obj_path: Station object path
- * @sig_name: signal name - StationAdded or StationRemoved
- * @properties: Whether to add second argument with object properties
- *
- * Notify listeners about event related with station.
- */
-static void wpas_dbus_signal_station(struct wpa_supplicant *wpa_s,
-				     const char *station_obj_path,
-				     const char *sig_name,
-				     dbus_bool_t properties)
-{
-	struct wpas_dbus_priv *iface;
-	DBusMessage *msg;
-	DBusMessageIter iter;
-
-	iface = wpa_s->global->dbus;
-
-	/* Do nothing if the control interface is not turned on */
-	if (!iface || !wpa_s->dbus_new_path)
-		return;
-
-	wpa_printf(MSG_DEBUG, "dbus: STA signal %s", sig_name);
-	msg = dbus_message_new_signal(wpa_s->dbus_new_path,
-				      WPAS_DBUS_NEW_IFACE_INTERFACE, sig_name);
-	if (!msg)
-		return;
-
-	dbus_message_iter_init_append(msg, &iter);
-	if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH,
-					    &station_obj_path) ||
-	    (properties &&
-	     !wpa_dbus_get_object_properties(iface, station_obj_path,
-					     WPAS_DBUS_NEW_IFACE_STA,
-					     &iter)))
-		wpa_printf(MSG_ERROR, "dbus: Failed to construct signal");
-	else
-		dbus_connection_send(iface->con, msg, NULL);
-	dbus_message_unref(msg);
-}
-
-
-/**
- * wpas_dbus_signal_station_added - Send a Station added signal
- * @wpa_s: %wpa_supplicant network interface data
- * @station_obj_path: new Station object path
- *
- * Notify listeners about adding new Station
- */
-static void wpas_dbus_signal_station_added(struct wpa_supplicant *wpa_s,
-					   const char *station_obj_path)
-{
-	wpas_dbus_signal_station(wpa_s, station_obj_path, "StationAdded", TRUE);
-}
-
-
-/**
- * wpas_dbus_signal_station_removed - Send a Station removed signal
- * @wpa_s: %wpa_supplicant network interface data
- * @station_obj_path: Station object path
- *
- * Notify listeners about removing Station
- */
-static void wpas_dbus_signal_station_removed(struct wpa_supplicant *wpa_s,
-					     const char *station_obj_path)
-{
-	wpas_dbus_signal_station(wpa_s, station_obj_path, "StationRemoved",
-				 FALSE);
-}
-
-
 #ifdef CONFIG_P2P
 
 /**
@@ -1957,7 +1882,7 @@
  */
 static void wpas_dbus_signal_persistent_group(struct wpa_supplicant *wpa_s,
 					      int id, const char *sig_name,
-					      dbus_bool_t properties)
+					      int properties)
 {
 	struct wpas_dbus_priv *iface;
 	DBusMessage *msg;
@@ -2206,6 +2131,11 @@
 	case WPAS_DBUS_PROP_AP_SCAN:
 		prop = "ApScan";
 		break;
+#ifdef CONFIG_IEEE80211W
+	case WPAS_DBUS_PROP_PMF:
+		prop = "Pmf";
+		break;
+#endif /* CONFIG_IEEE80211W */
 	case WPAS_DBUS_PROP_SCANNING:
 		prop = "Scanning";
 		break;
@@ -2221,9 +2151,6 @@
 	case WPAS_DBUS_PROP_BSSS:
 		prop = "BSSs";
 		break;
-	case WPAS_DBUS_PROP_STATIONS:
-		prop = "Stations";
-		break;
 	case WPAS_DBUS_PROP_CURRENT_AUTH_MODE:
 		prop = "CurrentAuthMode";
 		break;
@@ -2231,26 +2158,10 @@
 		prop = "DisconnectReason";
 		flush = TRUE;
 		break;
-	case WPAS_DBUS_PROP_AUTH_STATUS_CODE:
-		prop = "AuthStatusCode";
-		flush = TRUE;
-		break;
 	case WPAS_DBUS_PROP_ASSOC_STATUS_CODE:
 		prop = "AssocStatusCode";
 		flush = TRUE;
 		break;
-	case WPAS_DBUS_PROP_ROAM_TIME:
-		prop = "RoamTime";
-		break;
-	case WPAS_DBUS_PROP_ROAM_COMPLETE:
-		prop = "RoamComplete";
-		break;
-	case WPAS_DBUS_PROP_SESSION_LENGTH:
-		prop = "SessionLength";
-		break;
-	case WPAS_DBUS_PROP_BSS_TM_STATUS:
-		prop = "BSSTMStatus";
-		break;
 	default:
 		wpa_printf(MSG_ERROR, "dbus: %s: Unknown Property value %d",
 			   __func__, property);
@@ -2333,41 +2244,6 @@
 
 
 /**
- * wpas_dbus_sta_signal_prop_changed - Signals change of STA property
- * @wpa_s: %wpa_supplicant network interface data
- * @property: indicates which property has changed
- * @address: unique BSS identifier
- *
- * Sends PropertyChanged signals with path, interface, and arguments depending
- * on which property has changed.
- */
-void wpas_dbus_sta_signal_prop_changed(struct wpa_supplicant *wpa_s,
-				       enum wpas_dbus_bss_prop property,
-				       u8 address[ETH_ALEN])
-{
-	char path[WPAS_DBUS_OBJECT_PATH_MAX];
-	char *prop;
-
-	switch (property) {
-	case WPAS_DBUS_STA_PROP_ADDRESS:
-		prop = "Address";
-		break;
-	default:
-		wpa_printf(MSG_ERROR, "dbus: %s: Unknown Property value %d",
-			   __func__, property);
-		return;
-	}
-
-	os_snprintf(path, WPAS_DBUS_OBJECT_PATH_MAX,
-		    "%s/" WPAS_DBUS_NEW_STAS_PART "/" COMPACT_MACSTR,
-		    wpa_s->dbus_new_path, MAC2STR(address));
-
-	wpa_dbus_mark_property_changed(wpa_s->global->dbus, path,
-				       WPAS_DBUS_NEW_IFACE_STA, prop);
-}
-
-
-/**
  * wpas_dbus_signal_debug_level_changed - Signals change of debug param
  * @global: wpa_global structure
  *
@@ -2855,30 +2731,6 @@
 	  NULL,
 	  NULL
 	},
-	{
-	  "RoamTime", WPAS_DBUS_NEW_IFACE_INTERFACE, "u",
-	  wpas_dbus_getter_roam_time,
-	  NULL,
-	  NULL
-	},
-	{
-	  "RoamComplete", WPAS_DBUS_NEW_IFACE_INTERFACE, "b",
-	  wpas_dbus_getter_roam_complete,
-	  NULL,
-	  NULL
-	},
-	{
-	  "SessionLength", WPAS_DBUS_NEW_IFACE_INTERFACE, "u",
-	  wpas_dbus_getter_session_length,
-	  NULL,
-	  NULL
-	},
-	{
-	  "BSSTMStatus", WPAS_DBUS_NEW_IFACE_INTERFACE, "u",
-	  wpas_dbus_getter_bss_tm_status,
-	  NULL,
-	  NULL
-	},
 	{ NULL, NULL, NULL, NULL, NULL, NULL }
 };
 
@@ -3005,157 +2857,6 @@
 }
 
 
-static const struct wpa_dbus_property_desc wpas_dbus_sta_properties[] = {
-	{ "Address", WPAS_DBUS_NEW_IFACE_STA, "ay",
-	  wpas_dbus_getter_sta_address,
-	  NULL, NULL
-	},
-	{ "AID", WPAS_DBUS_NEW_IFACE_STA, "q",
-	  wpas_dbus_getter_sta_aid,
-	  NULL, NULL
-	},
-	{ "Capabilities", WPAS_DBUS_NEW_IFACE_STA, "q",
-	  wpas_dbus_getter_sta_caps,
-	  NULL, NULL
-	},
-	{ "RxPackets", WPAS_DBUS_NEW_IFACE_STA, "t",
-	  wpas_dbus_getter_sta_rx_packets,
-	  NULL, NULL
-	},
-	{ "TxPackets", WPAS_DBUS_NEW_IFACE_STA, "t",
-	  wpas_dbus_getter_sta_tx_packets,
-	  NULL, NULL
-	},
-	{ "RxBytes", WPAS_DBUS_NEW_IFACE_STA, "t",
-	  wpas_dbus_getter_sta_rx_bytes,
-	  NULL, NULL
-	},
-	{ "TxBytes", WPAS_DBUS_NEW_IFACE_STA, "t",
-	  wpas_dbus_getter_sta_tx_bytes,
-	  NULL, NULL
-	},
-	{ NULL, NULL, NULL, NULL, NULL, NULL }
-};
-
-
-static const struct wpa_dbus_signal_desc wpas_dbus_sta_signals[] = {
-	/* Deprecated: use org.freedesktop.DBus.Properties.PropertiesChanged */
-	{ "PropertiesChanged", WPAS_DBUS_NEW_IFACE_STA,
-	  {
-		  { "properties", "a{sv}", ARG_OUT },
-		  END_ARGS
-	  }
-	},
-	{ NULL, NULL, { END_ARGS } }
-};
-
-
-/**
- * wpas_dbus_unregister_sta - Unregister a connected station from dbus
- * @wpa_s: wpa_supplicant interface structure
- * @sta: station MAC address
- * Returns: 0 on success, -1 on failure
- *
- * Unregisters STA representing object from dbus.
- */
-int wpas_dbus_unregister_sta(struct wpa_supplicant *wpa_s, const u8 *sta)
-{
-	struct wpas_dbus_priv *ctrl_iface;
-	char station_obj_path[WPAS_DBUS_OBJECT_PATH_MAX];
-
-	/* Do nothing if the control interface is not turned on */
-	if (!wpa_s || !wpa_s->global)
-		return 0;
-	ctrl_iface = wpa_s->global->dbus;
-	if (!ctrl_iface)
-		return 0;
-
-	os_snprintf(station_obj_path, WPAS_DBUS_OBJECT_PATH_MAX,
-		    "%s/" WPAS_DBUS_NEW_STAS_PART "/" COMPACT_MACSTR,
-		    wpa_s->dbus_new_path, MAC2STR(sta));
-
-	wpa_printf(MSG_DEBUG, "dbus: Unregister STA object '%s'",
-		   station_obj_path);
-	if (wpa_dbus_unregister_object_per_iface(ctrl_iface,
-						 station_obj_path)) {
-		wpa_printf(MSG_ERROR, "dbus: Cannot unregister STA object %s",
-			   station_obj_path);
-		return -1;
-	}
-
-	wpas_dbus_signal_station_removed(wpa_s, station_obj_path);
-	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_STATIONS);
-
-	return 0;
-}
-
-
-/**
- * wpas_dbus_register_sta - Register a connected station with dbus
- * @wpa_s: wpa_supplicant interface structure
- * @sta: station MAC address
- * Returns: 0 on success, -1 on failure
- *
- * Registers STA representing object with dbus.
- */
-int wpas_dbus_register_sta(struct wpa_supplicant *wpa_s, const u8 *sta)
-{
-	struct wpas_dbus_priv *ctrl_iface;
-	struct wpa_dbus_object_desc *obj_desc;
-	char station_obj_path[WPAS_DBUS_OBJECT_PATH_MAX];
-	struct sta_handler_args *arg;
-
-	/* Do nothing if the control interface is not turned on */
-	if (!wpa_s || !wpa_s->global)
-		return 0;
-	ctrl_iface = wpa_s->global->dbus;
-	if (!ctrl_iface)
-		return 0;
-
-	os_snprintf(station_obj_path, WPAS_DBUS_OBJECT_PATH_MAX,
-		    "%s/" WPAS_DBUS_NEW_STAS_PART "/" COMPACT_MACSTR,
-		    wpa_s->dbus_new_path, MAC2STR(sta));
-
-	obj_desc = os_zalloc(sizeof(struct wpa_dbus_object_desc));
-	if (!obj_desc) {
-		wpa_printf(MSG_ERROR,
-			   "Not enough memory to create object description");
-		goto err;
-	}
-
-	arg = os_zalloc(sizeof(struct sta_handler_args));
-	if (!arg) {
-		wpa_printf(MSG_ERROR,
-			   "Not enough memory to create arguments for handler");
-		goto err;
-	}
-	arg->wpa_s = wpa_s;
-	arg->sta = sta;
-
-	wpas_dbus_register(obj_desc, arg, wpa_dbus_free, NULL,
-			   wpas_dbus_sta_properties, wpas_dbus_sta_signals);
-
-	wpa_printf(MSG_DEBUG, "dbus: Register STA object '%s'",
-		   station_obj_path);
-	if (wpa_dbus_register_object_per_iface(ctrl_iface, station_obj_path,
-					       wpa_s->ifname, obj_desc)) {
-		wpa_printf(MSG_ERROR,
-			   "Cannot register STA dbus object %s",
-			   station_obj_path);
-		goto err;
-	}
-
-	wpas_dbus_signal_station_added(wpa_s, station_obj_path);
-	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_STATIONS);
-
-	return 0;
-
-err:
-	free_dbus_object_desc(obj_desc);
-	return -1;
-}
-
-
 static const struct wpa_dbus_method_desc wpas_dbus_interface_methods[] = {
 	{ "Scan", WPAS_DBUS_NEW_IFACE_INTERFACE,
 	  (WPADBusMethodHandler) wpas_dbus_handler_scan,
@@ -3606,6 +3307,13 @@
 	  wpas_dbus_setter_ap_scan,
 	  NULL
 	},
+#ifdef CONFIG_IEEE80211W
+	{ "Pmf", WPAS_DBUS_NEW_IFACE_INTERFACE, "u",
+	  wpas_dbus_getter_pmf,
+	  wpas_dbus_setter_pmf,
+	  NULL
+	},
+#endif /* CONFIG_IEEE80211W */
 	{ "BSSExpireAge", WPAS_DBUS_NEW_IFACE_INTERFACE, "u",
 	  wpas_dbus_getter_bss_expire_age,
 	  wpas_dbus_setter_bss_expire_age,
@@ -3776,11 +3484,6 @@
 	  NULL,
 	  NULL
 	},
-	{ "AuthStatusCode", WPAS_DBUS_NEW_IFACE_INTERFACE, "i",
-	  wpas_dbus_getter_auth_status_code,
-	  NULL,
-	  NULL
-	},
 	{ "AssocStatusCode", WPAS_DBUS_NEW_IFACE_INTERFACE, "i",
 	  wpas_dbus_getter_assoc_status_code,
 	  NULL,
@@ -3798,11 +3501,6 @@
 	  NULL
 	},
 #endif /* CONFIG_MESH */
-	{ "Stations", WPAS_DBUS_NEW_IFACE_INTERFACE, "ao",
-	  wpas_dbus_getter_stas,
-	  NULL,
-	  NULL
-	},
 	{ NULL, NULL, NULL, NULL, NULL, NULL }
 };
 
@@ -4072,19 +3770,6 @@
 		  END_ARGS
 	  }
 	},
-	{ "StationAdded", WPAS_DBUS_NEW_IFACE_INTERFACE,
-	  {
-		  { "path", "o", ARG_OUT },
-		  { "properties", "a{sv}", ARG_OUT },
-		  END_ARGS
-	  }
-	},
-	{ "StationRemoved", WPAS_DBUS_NEW_IFACE_INTERFACE,
-	  {
-		  { "path", "o", ARG_OUT },
-		  END_ARGS
-	  }
-	},
 	{ "NetworkRequest", WPAS_DBUS_NEW_IFACE_INTERFACE,
 	  {
 		  { "path", "o", ARG_OUT },
@@ -4365,11 +4050,6 @@
 	  NULL,
 	  NULL
 	},
-	{ "VSIE", WPAS_DBUS_NEW_IFACE_P2P_PEER, "ay",
-	  wpas_dbus_getter_p2p_peer_vsie,
-	  NULL,
-	  NULL
-	},
 	{ NULL, NULL, NULL, NULL, NULL, NULL }
 };
 
@@ -4398,7 +4078,7 @@
  */
 static void wpas_dbus_signal_peer(struct wpa_supplicant *wpa_s,
 				  const u8 *dev_addr, const char *interface,
-				  const char *sig_name, dbus_bool_t properties)
+				  const char *sig_name, int properties)
 {
 	struct wpas_dbus_priv *iface;
 	DBusMessage *msg;
diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h
index 42db389..e68acb7 100644
--- a/wpa_supplicant/dbus/dbus_new.h
+++ b/wpa_supplicant/dbus/dbus_new.h
@@ -22,20 +22,15 @@
 
 enum wpas_dbus_prop {
 	WPAS_DBUS_PROP_AP_SCAN,
+	WPAS_DBUS_PROP_PMF,
 	WPAS_DBUS_PROP_SCANNING,
 	WPAS_DBUS_PROP_STATE,
 	WPAS_DBUS_PROP_CURRENT_BSS,
 	WPAS_DBUS_PROP_CURRENT_NETWORK,
 	WPAS_DBUS_PROP_CURRENT_AUTH_MODE,
 	WPAS_DBUS_PROP_BSSS,
-	WPAS_DBUS_PROP_STATIONS,
 	WPAS_DBUS_PROP_DISCONNECT_REASON,
-	WPAS_DBUS_PROP_AUTH_STATUS_CODE,
 	WPAS_DBUS_PROP_ASSOC_STATUS_CODE,
-	WPAS_DBUS_PROP_ROAM_TIME,
-	WPAS_DBUS_PROP_ROAM_COMPLETE,
-	WPAS_DBUS_PROP_SESSION_LENGTH,
-	WPAS_DBUS_PROP_BSS_TM_STATUS,
 };
 
 enum wpas_dbus_bss_prop {
@@ -51,10 +46,6 @@
 	WPAS_DBUS_BSS_PROP_AGE,
 };
 
-enum wpas_dbus_sta_prop {
-	WPAS_DBUS_STA_PROP_ADDRESS,
-};
-
 #define WPAS_DBUS_OBJECT_PATH_MAX 150
 
 #define WPAS_DBUS_NEW_SERVICE		"fi.w1.wpa_supplicant1"
@@ -71,9 +62,6 @@
 #define WPAS_DBUS_NEW_BSSIDS_PART "BSSs"
 #define WPAS_DBUS_NEW_IFACE_BSS	WPAS_DBUS_NEW_INTERFACE ".BSS"
 
-#define WPAS_DBUS_NEW_STAS_PART "Stations"
-#define WPAS_DBUS_NEW_IFACE_STA	WPAS_DBUS_NEW_INTERFACE ".Station"
-
 #define WPAS_DBUS_NEW_IFACE_P2PDEVICE	\
 		WPAS_DBUS_NEW_IFACE_INTERFACE ".P2PDevice"
 
@@ -176,8 +164,6 @@
 			     u8 bssid[ETH_ALEN], unsigned int id);
 int wpas_dbus_register_bss(struct wpa_supplicant *wpa_s,
 			   u8 bssid[ETH_ALEN], unsigned int id);
-int wpas_dbus_unregister_sta(struct wpa_supplicant *wpa_s, const u8 *sta);
-int wpas_dbus_register_sta(struct wpa_supplicant *wpa_s, const u8 *sta);
 void wpas_dbus_signal_blob_added(struct wpa_supplicant *wpa_s,
 				 const char *name);
 void wpas_dbus_signal_blob_removed(struct wpa_supplicant *wpa_s,
@@ -360,18 +346,6 @@
 	return 0;
 }
 
-static inline int wpas_dbus_unregister_sta(struct wpa_supplicant *wpa_s,
-					   const u8 *sta)
-{
-	return 0;
-}
-
-static inline int wpas_dbus_register_sta(struct wpa_supplicant *wpa_s,
-					 const u8 *sta)
-{
-	return 0;
-}
-
 static inline void wpas_dbus_signal_blob_added(struct wpa_supplicant *wpa_s,
 					       const char *name)
 {
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c
index 6c36d91..a3c98fa 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers.c
@@ -15,9 +15,6 @@
 #include "eap_peer/eap_methods.h"
 #include "eapol_supp/eapol_supp_sm.h"
 #include "rsn_supp/wpa.h"
-#include "ap/hostapd.h"
-#include "ap/sta_info.h"
-#include "ap/ap_drv_ops.h"
 #include "../config.h"
 #include "../wpa_supplicant_i.h"
 #include "../driver_i.h"
@@ -25,7 +22,6 @@
 #include "../bss.h"
 #include "../scan.h"
 #include "../autoscan.h"
-#include "../ap.h"
 #include "dbus_new_helpers.h"
 #include "dbus_new.h"
 #include "dbus_new_handlers.h"
@@ -984,8 +980,8 @@
 	const struct wpa_dbus_property_desc *property_desc,
 	DBusMessageIter *iter, DBusError *error, void *user_data)
 {
-	const char *capabilities[10] = { NULL, NULL, NULL, NULL, NULL, NULL,
-					NULL, NULL, NULL, NULL };
+	const char *capabilities[8] = { NULL, NULL, NULL, NULL, NULL, NULL,
+					NULL, NULL };
 	size_t num_items = 0;
 #ifdef CONFIG_FILS
 	struct wpa_global *global = user_data;
@@ -1024,12 +1020,6 @@
 	if (fils_sk_pfs_supported)
 		capabilities[num_items++] = "fils_sk_pfs";
 #endif /* CONFIG_FILS */
-#ifdef CONFIG_IEEE80211R
-	capabilities[num_items++] = "ft";
-#endif /* CONFIG_IEEE80211R */
-#ifdef CONFIG_SHA384
-	capabilities[num_items++] = "sha384";
-#endif /* CONFIG_SHA384 */
 
 	return wpas_dbus_simple_array_property_getter(iter,
 						      DBUS_TYPE_STRING,
@@ -3022,6 +3012,61 @@
 }
 
 
+#ifdef CONFIG_IEEE80211W
+
+/**
+ * wpas_dbus_getter_pmf - Control PMF default
+ * @iter: Pointer to incoming dbus message iter
+ * @error: Location to store error on failure
+ * @user_data: Function specific data
+ * Returns: TRUE on success, FALSE on failure
+ *
+ * Getter function for "Pmf" property.
+ */
+dbus_bool_t wpas_dbus_getter_pmf(
+	const struct wpa_dbus_property_desc *property_desc,
+	DBusMessageIter *iter, DBusError *error, void *user_data)
+{
+	struct wpa_supplicant *wpa_s = user_data;
+	dbus_uint32_t pmf = wpa_s->conf->pmf;
+
+	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT32,
+						&pmf, error);
+}
+
+
+/**
+ * wpas_dbus_setter_pmf - Control PMF default
+ * @iter: Pointer to incoming dbus message iter
+ * @error: Location to store error on failure
+ * @user_data: Function specific data
+ * Returns: TRUE on success, FALSE on failure
+ *
+ * Setter function for "Pmf" property.
+ */
+dbus_bool_t wpas_dbus_setter_pmf(
+	const struct wpa_dbus_property_desc *property_desc,
+	DBusMessageIter *iter, DBusError *error, void *user_data)
+{
+	struct wpa_supplicant *wpa_s = user_data;
+	dbus_uint32_t pmf;
+
+	if (!wpas_dbus_simple_property_setter(iter, error, DBUS_TYPE_UINT32,
+					      &pmf))
+		return FALSE;
+
+	if (pmf > 2) {
+		dbus_set_error_const(error, DBUS_ERROR_FAILED,
+				     "Pmf must be 0, 1, or 2");
+		return FALSE;
+	}
+	wpa_s->conf->pmf = pmf;
+	return TRUE;
+}
+
+#endif /* CONFIG_IEEE80211W */
+
+
 /**
  * wpas_dbus_getter_fast_reauth - Control fast
  * reauthentication (TLS session resumption)
@@ -3093,27 +3138,6 @@
 
 
 /**
- * wpas_dbus_getter_auth_status_code - Get most recent auth status code
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "AuthStatusCode" property.
- */
-dbus_bool_t wpas_dbus_getter_auth_status_code(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-	struct wpa_supplicant *wpa_s = user_data;
-	dbus_int32_t reason = wpa_s->auth_status_code;
-
-	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_INT32,
-						&reason, error);
-}
-
-
-/**
  * wpas_dbus_getter_assoc_status_code - Get most recent failed assoc status code
  * @iter: Pointer to incoming dbus message iter
  * @error: Location to store error on failure
@@ -3135,97 +3159,6 @@
 
 
 /**
- * wpas_dbus_getter_roam_time - Get most recent roam time
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "RoamTime" property.
- */
-dbus_bool_t wpas_dbus_getter_roam_time(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-	struct wpa_supplicant *wpa_s = user_data;
-	dbus_uint32_t roam_time = wpa_s->roam_time.sec * 1000 +
-		wpa_s->roam_time.usec / 1000;
-
-	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT32,
-						&roam_time, error);
-}
-
-
-/**
- * wpas_dbus_getter_roam_complete - Get most recent roam success or failure
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "RoamComplete" property.
- */
-dbus_bool_t wpas_dbus_getter_roam_complete(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-	struct wpa_supplicant *wpa_s = user_data;
-	dbus_bool_t roam_complete = os_reltime_initialized(&wpa_s->roam_time);
-
-	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_BOOLEAN,
-						&roam_complete, error);
-}
-
-
-/**
- * wpas_dbus_getter_session_length - Get most recent BSS session length
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "SessionLength" property.
- */
-dbus_bool_t wpas_dbus_getter_session_length(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-	struct wpa_supplicant *wpa_s = user_data;
-	dbus_uint32_t session_length = wpa_s->session_length.sec * 1000 +
-		wpa_s->session_length.usec / 1000;
-
-	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT32,
-						&session_length, error);
-}
-
-
-/**
- * wpas_dbus_getter_bss_tm_status - Get most BSS Transition Management request
- * status code
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "BSSTMStatus" property.
- */
-dbus_bool_t wpas_dbus_getter_bss_tm_status(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-#ifdef CONFIG_WNM
-	struct wpa_supplicant *wpa_s = user_data;
-	dbus_uint32_t bss_tm_status = wpa_s->bss_tm_status;
-#else /* CONFIG_WNM */
-	dbus_uint32_t bss_tm_status = 0;
-#endif /* CONFIG_WNM */
-
-	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT32,
-						&bss_tm_status, error);
-}
-
-
-/**
  * wpas_dbus_getter_bss_expire_age - Get BSS entry expiration age
  * @iter: Pointer to incoming dbus message iter
  * @error: Location to store error on failure
@@ -3921,320 +3854,6 @@
 }
 
 
-/**
- * wpas_dbus_getter_stas - Get connected stations for an interface
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: a list of stations
- *
- * Getter for "Stations" property.
- */
-dbus_bool_t wpas_dbus_getter_stas(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-	struct wpa_supplicant *wpa_s = user_data;
-	struct sta_info *sta = NULL;
-	char **paths = NULL;
-	unsigned int i = 0, num = 0;
-	dbus_bool_t success = FALSE;
-
-	if (!wpa_s->dbus_new_path) {
-		dbus_set_error(error, DBUS_ERROR_FAILED,
-			       "%s: no D-Bus interface", __func__);
-		return FALSE;
-	}
-
-#ifdef CONFIG_AP
-	if (wpa_s->ap_iface) {
-		struct hostapd_data *hapd;
-
-		hapd = wpa_s->ap_iface->bss[0];
-		sta = hapd->sta_list;
-		num = hapd->num_sta;
-	}
-#endif /* CONFIG_AP */
-
-	paths = os_calloc(num, sizeof(char *));
-	if (!paths) {
-		dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY, "no memory");
-		return FALSE;
-	}
-
-	/* Loop through scan results and append each result's object path */
-	for (; sta; sta = sta->next) {
-		paths[i] = os_zalloc(WPAS_DBUS_OBJECT_PATH_MAX);
-		if (!paths[i]) {
-			dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY,
-					     "no memory");
-			goto out;
-		}
-		/* Construct the object path for this BSS. */
-		os_snprintf(paths[i++], WPAS_DBUS_OBJECT_PATH_MAX,
-			    "%s/" WPAS_DBUS_NEW_STAS_PART "/" COMPACT_MACSTR,
-			    wpa_s->dbus_new_path, MAC2STR(sta->addr));
-	}
-
-	success = wpas_dbus_simple_array_property_getter(iter,
-							 DBUS_TYPE_OBJECT_PATH,
-							 paths, num,
-							 error);
-
-out:
-	while (i)
-		os_free(paths[--i]);
-	os_free(paths);
-	return success;
-}
-
-
-/**
- * wpas_dbus_getter_sta_address - Return the address of a connected station
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "Address" property.
- */
-dbus_bool_t wpas_dbus_getter_sta_address(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-#ifdef CONFIG_AP
-	struct sta_handler_args *args = user_data;
-	struct sta_info *sta;
-
-	sta = ap_get_sta(args->wpa_s->ap_iface->bss[0], args->sta);
-	if (!sta)
-		return FALSE;
-
-	return wpas_dbus_simple_array_property_getter(iter, DBUS_TYPE_BYTE,
-						      sta->addr, ETH_ALEN,
-						      error);
-#else /* CONFIG_AP */
-    return FALSE;
-#endif /* CONFIG_AP */
-}
-
-
-/**
- * wpas_dbus_getter_sta_aid - Return the AID of a connected station
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "AID" property.
- */
-dbus_bool_t wpas_dbus_getter_sta_aid(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-#ifdef CONFIG_AP
-	struct sta_handler_args *args = user_data;
-	struct sta_info *sta;
-
-	sta = ap_get_sta(args->wpa_s->ap_iface->bss[0], args->sta);
-	if (!sta)
-		return FALSE;
-
-	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT16,
-						&sta->aid,
-						error);
-#else /* CONFIG_AP */
-    return FALSE;
-#endif /* CONFIG_AP */
-}
-
-
-/**
- * wpas_dbus_getter_sta_caps - Return the capabilities of a station
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "Capabilities" property.
- */
-dbus_bool_t wpas_dbus_getter_sta_caps(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-#ifdef CONFIG_AP
-	struct sta_handler_args *args = user_data;
-	struct sta_info *sta;
-
-	sta = ap_get_sta(args->wpa_s->ap_iface->bss[0], args->sta);
-	if (!sta)
-		return FALSE;
-
-	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT16,
-						&sta->capability,
-						error);
-#else /* CONFIG_AP */
-    return FALSE;
-#endif /* CONFIG_AP */
-}
-
-
-/**
- * wpas_dbus_getter_rx_packets - Return the received packets for a station
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "RxPackets" property.
- */
-dbus_bool_t wpas_dbus_getter_sta_rx_packets(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-#ifdef CONFIG_AP
-	struct sta_handler_args *args = user_data;
-	struct sta_info *sta;
-	struct hostap_sta_driver_data data;
-	struct hostapd_data *hapd;
-
-	if (!args->wpa_s->ap_iface)
-		return FALSE;
-
-	hapd = args->wpa_s->ap_iface->bss[0];
-	sta = ap_get_sta(hapd, args->sta);
-	if (!sta)
-		return FALSE;
-
-	if (hostapd_drv_read_sta_data(hapd, &data, sta->addr) < 0)
-		return FALSE;
-
-	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT64,
-						&data.rx_packets,
-						error);
-#else /* CONFIG_AP */
-    return FALSE;
-#endif /* CONFIG_AP */
-}
-
-
-/**
- * wpas_dbus_getter_tx_packets - Return the transmitted packets for a station
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "TxPackets" property.
- */
-dbus_bool_t wpas_dbus_getter_sta_tx_packets(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-#ifdef CONFIG_AP
-	struct sta_handler_args *args = user_data;
-	struct sta_info *sta;
-	struct hostap_sta_driver_data data;
-	struct hostapd_data *hapd;
-
-	if (!args->wpa_s->ap_iface)
-		return FALSE;
-
-	hapd = args->wpa_s->ap_iface->bss[0];
-	sta = ap_get_sta(hapd, args->sta);
-	if (!sta)
-		return FALSE;
-
-	if (hostapd_drv_read_sta_data(hapd, &data, sta->addr) < 0)
-		return FALSE;
-
-	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT64,
-						&data.tx_packets,
-						error);
-#else /* CONFIG_AP */
-    return FALSE;
-#endif /* CONFIG_AP */
-}
-
-
-/**
- * wpas_dbus_getter_tx_bytes - Return the transmitted bytes for a station
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "TxBytes" property.
- */
-dbus_bool_t wpas_dbus_getter_sta_tx_bytes(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-#ifdef CONFIG_AP
-	struct sta_handler_args *args = user_data;
-	struct sta_info *sta;
-	struct hostap_sta_driver_data data;
-	struct hostapd_data *hapd;
-
-	if (!args->wpa_s->ap_iface)
-		return FALSE;
-
-	hapd = args->wpa_s->ap_iface->bss[0];
-	sta = ap_get_sta(hapd, args->sta);
-	if (!sta)
-		return FALSE;
-
-	if (hostapd_drv_read_sta_data(hapd, &data, sta->addr) < 0)
-		return FALSE;
-
-	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT64,
-						&data.tx_bytes,
-						error);
-#else /* CONFIG_AP */
-    return FALSE;
-#endif /* CONFIG_AP */
-}
-
-
-/**
- * wpas_dbus_getter_rx_bytes - Return the received bytes for a station
- * @iter: Pointer to incoming dbus message iter
- * @error: Location to store error on failure
- * @user_data: Function specific data
- * Returns: TRUE on success, FALSE on failure
- *
- * Getter for "RxBytes" property.
- */
-dbus_bool_t wpas_dbus_getter_sta_rx_bytes(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-#ifdef CONFIG_AP
-	struct sta_handler_args *args = user_data;
-	struct sta_info *sta;
-	struct hostap_sta_driver_data data;
-	struct hostapd_data *hapd;
-
-	if (!args->wpa_s->ap_iface)
-		return FALSE;
-
-	hapd = args->wpa_s->ap_iface->bss[0];
-	sta = ap_get_sta(hapd, args->sta);
-	if (!sta)
-		return FALSE;
-
-	if (hostapd_drv_read_sta_data(hapd, &data, sta->addr) < 0)
-		return FALSE;
-
-	return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT64,
-						&data.rx_bytes,
-						error);
-#else /* CONFIG_AP */
-    return FALSE;
-#endif /* CONFIG_AP */
-}
-
-
 static struct wpa_bss * get_bss_helper(struct bss_handler_args *args,
 				       DBusError *error, const char *func_name)
 {
@@ -4497,7 +4116,7 @@
 	DBusMessageIter iter_dict, variant_iter;
 	const char *group;
 	const char *pairwise[5]; /* max 5 pairwise ciphers is supported */
-	const char *key_mgmt[15]; /* max 15 key managements may be supported */
+	const char *key_mgmt[13]; /* max 13 key managements may be supported */
 	int n;
 
 	if (!dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT,
@@ -4507,12 +4126,7 @@
 	if (!wpa_dbus_dict_open_write(&variant_iter, &iter_dict))
 		goto nomem;
 
-	/*
-	 * KeyMgmt
-	 *
-	 * When adding a new entry here, please take care to extend key_mgmt[]
-	 * and keep documentation in doc/dbus.doxygen up to date.
-	 */
+	/* KeyMgmt */
 	n = 0;
 	if (ie_data->key_mgmt & WPA_KEY_MGMT_PSK)
 		key_mgmt[n++] = "wpa-psk";
@@ -4544,12 +4158,6 @@
 	if (ie_data->key_mgmt & WPA_KEY_MGMT_FT_FILS_SHA384)
 		key_mgmt[n++] = "wpa-ft-fils-sha384";
 #endif /* CONFIG_FILS */
-#ifdef CONFIG_SAE
-	if (ie_data->key_mgmt & WPA_KEY_MGMT_SAE)
-		key_mgmt[n++] = "sae";
-	if (ie_data->key_mgmt & WPA_KEY_MGMT_FT_SAE)
-		key_mgmt[n++] = "ft-sae";
-#endif /* CONFIG_SAE */
 	if (ie_data->key_mgmt & WPA_KEY_MGMT_NONE)
 		key_mgmt[n++] = "wpa-none";
 
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h
index d922ce1..26652ad 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.h
+++ b/wpa_supplicant/dbus/dbus_new_handlers.h
@@ -22,11 +22,6 @@
 	unsigned int id;
 };
 
-struct sta_handler_args {
-	struct wpa_supplicant *wpa_s;
-	const u8 *sta;
-};
-
 dbus_bool_t wpas_dbus_simple_property_getter(DBusMessageIter *iter,
 					     const int type,
 					     const void *val,
@@ -146,16 +141,13 @@
 DECLARE_ACCESSOR(wpas_dbus_getter_scanning);
 DECLARE_ACCESSOR(wpas_dbus_getter_ap_scan);
 DECLARE_ACCESSOR(wpas_dbus_setter_ap_scan);
+DECLARE_ACCESSOR(wpas_dbus_getter_pmf);
+DECLARE_ACCESSOR(wpas_dbus_setter_pmf);
 DECLARE_ACCESSOR(wpas_dbus_getter_fast_reauth);
 DECLARE_ACCESSOR(wpas_dbus_setter_fast_reauth);
 DECLARE_ACCESSOR(wpas_dbus_getter_disconnect_reason);
 DECLARE_ACCESSOR(wpas_dbus_getter_disassociate_reason);
-DECLARE_ACCESSOR(wpas_dbus_getter_auth_status_code);
 DECLARE_ACCESSOR(wpas_dbus_getter_assoc_status_code);
-DECLARE_ACCESSOR(wpas_dbus_getter_roam_time);
-DECLARE_ACCESSOR(wpas_dbus_getter_roam_complete);
-DECLARE_ACCESSOR(wpas_dbus_getter_session_length);
-DECLARE_ACCESSOR(wpas_dbus_getter_bss_tm_status);
 DECLARE_ACCESSOR(wpas_dbus_getter_bss_expire_age);
 DECLARE_ACCESSOR(wpas_dbus_setter_bss_expire_age);
 DECLARE_ACCESSOR(wpas_dbus_getter_bss_expire_count);
@@ -176,14 +168,6 @@
 DECLARE_ACCESSOR(wpas_dbus_getter_pkcs11_engine_path);
 DECLARE_ACCESSOR(wpas_dbus_getter_pkcs11_module_path);
 DECLARE_ACCESSOR(wpas_dbus_getter_blobs);
-DECLARE_ACCESSOR(wpas_dbus_getter_stas);
-DECLARE_ACCESSOR(wpas_dbus_getter_sta_address);
-DECLARE_ACCESSOR(wpas_dbus_getter_sta_aid);
-DECLARE_ACCESSOR(wpas_dbus_getter_sta_caps);
-DECLARE_ACCESSOR(wpas_dbus_getter_sta_rx_packets);
-DECLARE_ACCESSOR(wpas_dbus_getter_sta_tx_packets);
-DECLARE_ACCESSOR(wpas_dbus_getter_sta_tx_bytes);
-DECLARE_ACCESSOR(wpas_dbus_getter_sta_rx_bytes);
 DECLARE_ACCESSOR(wpas_dbus_getter_bss_bssid);
 DECLARE_ACCESSOR(wpas_dbus_getter_bss_ssid);
 DECLARE_ACCESSOR(wpas_dbus_getter_bss_privacy);
diff --git a/wpa_supplicant/dbus/dbus_new_handlers_p2p.c b/wpa_supplicant/dbus/dbus_new_handlers_p2p.c
index 8cdd885..9305b9a 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers_p2p.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers_p2p.c
@@ -384,14 +384,14 @@
 			goto inv_args;
 
 		if (wpas_p2p_group_add_persistent(wpa_s, ssid, 0, freq, 0, 0, 0,
-						  0, 0, 0, NULL, 0, 0)) {
+						  0, 0, NULL, 0, 0)) {
 			reply = wpas_dbus_error_unknown_error(
 				message,
 				"Failed to reinvoke a persistent group");
 			goto out;
 		}
 	} else if (wpas_p2p_group_add(wpa_s, persistent_group, freq, 0, 0, 0,
-				      0, 0))
+				      0))
 		goto inv_args;
 
 out:
@@ -505,7 +505,6 @@
 
 	wpa_s = wpa_s->global->p2p_init_wpa_s;
 
-	wpas_p2p_stop_find(wpa_s);
 	os_memset(wpa_s->p2p_auth_invite, 0, ETH_ALEN);
 	wpa_s->force_long_sd = 0;
 	p2p_flush(wpa_s->global->p2p);
@@ -533,7 +532,6 @@
 	int new_pin;
 	char *err_msg = NULL;
 	char *iface = NULL;
-	int ret;
 
 	if (!wpa_dbus_p2p_check_enabled(wpa_s, message, &reply, NULL))
 		return reply;
@@ -605,19 +603,13 @@
 
 	new_pin = wpas_p2p_connect(wpa_s, addr, pin, wps_method,
 				   persistent_group, 0, join, authorize_only,
-				   go_intent, freq, 0, -1, 0, 0, 0, 0, 0,
-				   NULL, 0);
+				   go_intent, freq, 0, -1, 0, 0, 0, 0, NULL, 0);
 
 	if (new_pin >= 0) {
 		char npin[9];
 		char *generated_pin;
 
-		ret = os_snprintf(npin, sizeof(npin), "%08d", new_pin);
-		if (os_snprintf_error(sizeof(npin), ret)) {
-			reply = wpas_dbus_error_unknown_error(message,
-							      "invalid PIN");
-			goto out;
-		}
+		os_snprintf(npin, sizeof(npin), "%08d", new_pin);
 		generated_pin = npin;
 		reply = dbus_message_new_method_return(message);
 		dbus_message_append_args(reply, DBUS_TYPE_STRING,
@@ -763,7 +755,7 @@
 			goto err;
 
 		if (wpas_p2p_invite(wpa_s, peer_addr, ssid, NULL, 0, 0, 0, 0, 0,
-				    0, 0) < 0) {
+				    0) < 0) {
 			reply = wpas_dbus_error_unknown_error(
 				message,
 				"Failed to reinvoke a persistent group");
@@ -1918,30 +1910,6 @@
 	return success;
 }
 
-dbus_bool_t wpas_dbus_getter_p2p_peer_vsie(
-	const struct wpa_dbus_property_desc *property_desc,
-	DBusMessageIter *iter, DBusError *error, void *user_data)
-{
-	struct peer_handler_args *peer_args = user_data;
-	const struct p2p_peer_info *info;
-
-	info = p2p_get_peer_found(peer_args->wpa_s->global->p2p,
-				  peer_args->p2p_device_addr, 0);
-	if (!info) {
-		dbus_set_error(error, DBUS_ERROR_FAILED, "failed to find peer");
-		return FALSE;
-	}
-
-	if (!info->vendor_elems)
-		return wpas_dbus_simple_array_property_getter(iter,
-							      DBUS_TYPE_BYTE,
-							      NULL, 0, error);
-
-	return wpas_dbus_simple_array_property_getter(
-		iter, DBUS_TYPE_BYTE, (char *) info->vendor_elems->buf,
-		info->vendor_elems->used, error);
-}
-
 
 /**
  * wpas_dbus_getter_persistent_groups - Get array of persistent group objects
@@ -2693,7 +2661,7 @@
 	if (!wpa_dbus_dict_open_read(&iter, &iter_dict, NULL))
 		goto error;
 
-	while (wpa_dbus_dict_has_dict_entry(&iter_dict)) {
+	if (wpa_dbus_dict_has_dict_entry(&iter_dict)) {
 		if (!wpa_dbus_dict_get_entry(&iter_dict, &entry))
 			goto error;
 
@@ -2705,27 +2673,26 @@
 				bonjour = 1;
 			else
 				goto error_clear;
-		} else if (os_strcmp(entry.key, "version") == 0 &&
-			   entry.type == DBUS_TYPE_INT32) {
-			version = entry.uint32_value;
-		} else if (os_strcmp(entry.key, "service") == 0 &&
-			   entry.type == DBUS_TYPE_STRING) {
-			os_free(service);
-			service = os_strdup(entry.str_value);
-		} else if (os_strcmp(entry.key, "query") == 0) {
-			if (entry.type != DBUS_TYPE_ARRAY ||
-			    entry.array_type != DBUS_TYPE_BYTE)
-				goto error_clear;
-			wpabuf_free(query);
-			query = wpabuf_alloc_copy(entry.bytearray_value,
-						  entry.array_len);
-		} else {
-			goto error_clear;
+			wpa_dbus_dict_entry_clear(&entry);
 		}
-
-		wpa_dbus_dict_entry_clear(&entry);
 	}
 	if (upnp == 1) {
+		while (wpa_dbus_dict_has_dict_entry(&iter_dict)) {
+			if (!wpa_dbus_dict_get_entry(&iter_dict, &entry))
+				goto error;
+			if (os_strcmp(entry.key, "version") == 0 &&
+			    entry.type == DBUS_TYPE_INT32)
+				version = entry.uint32_value;
+			else if (os_strcmp(entry.key, "service") == 0 &&
+				 entry.type == DBUS_TYPE_STRING) {
+				os_free(service);
+				service = os_strdup(entry.str_value);
+			} else
+				goto error_clear;
+
+			wpa_dbus_dict_entry_clear(&entry);
+		}
+
 		if (version <= 0 || service == NULL)
 			goto error;
 
@@ -2733,6 +2700,24 @@
 		if (ret != 0)
 			goto error;
 	} else if (bonjour == 1) {
+		while (wpa_dbus_dict_has_dict_entry(&iter_dict)) {
+			if (!wpa_dbus_dict_get_entry(&iter_dict, &entry))
+				goto error;
+
+			if (os_strcmp(entry.key, "query") == 0) {
+				if (entry.type != DBUS_TYPE_ARRAY ||
+				    entry.array_type != DBUS_TYPE_BYTE)
+					goto error_clear;
+				wpabuf_free(query);
+				query = wpabuf_alloc_copy(
+					entry.bytearray_value,
+					entry.array_len);
+			} else
+				goto error_clear;
+
+			wpa_dbus_dict_entry_clear(&entry);
+		}
+
 		if (query == NULL)
 			goto error;
 
diff --git a/wpa_supplicant/dbus/dbus_new_handlers_p2p.h b/wpa_supplicant/dbus/dbus_new_handlers_p2p.h
index b3c45c1..c4c0261 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers_p2p.h
+++ b/wpa_supplicant/dbus/dbus_new_handlers_p2p.h
@@ -114,7 +114,6 @@
 DECLARE_ACCESSOR(wpas_dbus_getter_p2p_peer_ies);
 DECLARE_ACCESSOR(wpas_dbus_getter_p2p_peer_device_address);
 DECLARE_ACCESSOR(wpas_dbus_getter_p2p_peer_groups);
-DECLARE_ACCESSOR(wpas_dbus_getter_p2p_peer_vsie);
 
 /*
  * P2P Group properties
diff --git a/wpa_supplicant/dbus/dbus_new_handlers_wps.c b/wpa_supplicant/dbus/dbus_new_handlers_wps.c
index 19c1a61..f762b3f 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers_wps.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers_wps.c
@@ -286,12 +286,8 @@
 		ret = wpas_wps_start_pin(wpa_s, params.bssid,
 					 params.pin, 0,
 					 DEV_PW_DEFAULT);
-		if (ret > 0) {
-			ret = os_snprintf(npin, sizeof(npin), "%08d", ret);
-			if (os_snprintf_error(sizeof(npin), ret))
-				return wpas_dbus_error_unknown_error(
-					message, "invalid PIN");
-		}
+		if (ret > 0)
+			os_snprintf(npin, sizeof(npin), "%08d", ret);
 	} else {
 		ret = wpas_wps_start_pbc(wpa_s, params.bssid, 0);
 	}
diff --git a/wpa_supplicant/dbus/dbus_old_handlers_wps.c b/wpa_supplicant/dbus/dbus_old_handlers_wps.c
index 987e12d..5309a53 100644
--- a/wpa_supplicant/dbus/dbus_old_handlers_wps.c
+++ b/wpa_supplicant/dbus/dbus_old_handlers_wps.c
@@ -71,7 +71,7 @@
 	char *arg_bssid;
 	char *pin = NULL;
 	u8 bssid[ETH_ALEN], *_bssid = NULL;
-	int ret;
+	int ret = 0;
 	char npin[9];
 
 	if (!dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &arg_bssid,
@@ -105,11 +105,7 @@
 		return NULL;
 
 	if (ret > 0) {
-		ret = os_snprintf(npin, sizeof(npin), "%08d", ret);
-		if (os_snprintf_error(sizeof(npin), ret))
-			return wpas_dbus_new_invalid_opts_error(message,
-								"invalid PIN");
-
+		os_snprintf(npin, sizeof(npin), "%08d", ret);
 		pin = npin;
 	}
 	dbus_message_append_args(reply, DBUS_TYPE_STRING, &pin,
diff --git a/wpa_supplicant/defconfig b/wpa_supplicant/defconfig
index b51675b..08f5857 100644
--- a/wpa_supplicant/defconfig
+++ b/wpa_supplicant/defconfig
@@ -44,7 +44,7 @@
 #CONFIG_LIBNL20=y
 
 # Use libnl 3.2 libraries (if this is selected, CONFIG_LIBNL20 is ignored)
-CONFIG_LIBNL32=y
+#CONFIG_LIBNL32=y
 
 
 # Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
@@ -301,9 +301,6 @@
 # Driver support is also needed for IEEE 802.11w.
 #CONFIG_IEEE80211W=y
 
-# Support Operating Channel Validation
-#CONFIG_OCV=y
-
 # Select TLS implementation
 # openssl = OpenSSL (default)
 # gnutls = GnuTLS
@@ -461,11 +458,6 @@
 # that meet the requirements described above.
 #CONFIG_NO_RANDOM_POOL=y
 
-# Should we attempt to use the getrandom(2) call that provides more reliable
-# yet secure randomness source than /dev/random on Linux 3.17 and newer.
-# Requires glibc 2.25 to build, falls back to /dev/random if unavailable.
-#CONFIG_GETRANDOM=y
-
 # IEEE 802.11n (High Throughput) support (mainly for AP mode)
 #CONFIG_IEEE80211N=y
 
@@ -569,6 +561,8 @@
 #CONFIG_MBO=y
 
 # Fast Initial Link Setup (FILS) (IEEE 802.11ai)
+# Note: This is an experimental and not yet complete implementation. This
+# should not be enabled for production use.
 #CONFIG_FILS=y
 # FILS shared key authentication with PFS
 #CONFIG_FILS_SK_PFS=y
diff --git a/wpa_supplicant/doc/docbook/eapol_test.sgml b/wpa_supplicant/doc/docbook/eapol_test.sgml
index e7705ab..25cfd06 100644
--- a/wpa_supplicant/doc/docbook/eapol_test.sgml
+++ b/wpa_supplicant/doc/docbook/eapol_test.sgml
@@ -194,7 +194,7 @@
   </refsect1>
   <refsect1>
     <title>Legal</title>
-    <para>wpa_supplicant is copyright (c) 2003-2019,
+    <para>wpa_supplicant is copyright (c) 2003-2017,
     Jouni Malinen <email>j@w1.fi</email> and
     contributors.
     All Rights Reserved.</para>
diff --git a/wpa_supplicant/doc/docbook/wpa_background.sgml b/wpa_supplicant/doc/docbook/wpa_background.sgml
index f6a0ca8..fa94ae4 100644
--- a/wpa_supplicant/doc/docbook/wpa_background.sgml
+++ b/wpa_supplicant/doc/docbook/wpa_background.sgml
@@ -90,7 +90,7 @@
 
   <refsect1>
     <title>Legal</title>
-    <para>wpa_supplicant is copyright (c) 2003-2019,
+    <para>wpa_supplicant is copyright (c) 2003-2017,
     Jouni Malinen <email>j@w1.fi</email> and
     contributors.
     All Rights Reserved.</para>
diff --git a/wpa_supplicant/doc/docbook/wpa_cli.sgml b/wpa_supplicant/doc/docbook/wpa_cli.sgml
index dc7fee4..be3045a 100644
--- a/wpa_supplicant/doc/docbook/wpa_cli.sgml
+++ b/wpa_supplicant/doc/docbook/wpa_cli.sgml
@@ -345,7 +345,7 @@
   </refsect1>
   <refsect1>
     <title>Legal</title>
-    <para>wpa_supplicant is copyright (c) 2003-2019,
+    <para>wpa_supplicant is copyright (c) 2003-2017,
     Jouni Malinen <email>j@w1.fi</email> and
     contributors.
     All Rights Reserved.</para>
diff --git a/wpa_supplicant/doc/docbook/wpa_gui.sgml b/wpa_supplicant/doc/docbook/wpa_gui.sgml
index 31214e3..cee9ed6 100644
--- a/wpa_supplicant/doc/docbook/wpa_gui.sgml
+++ b/wpa_supplicant/doc/docbook/wpa_gui.sgml
@@ -91,7 +91,7 @@
   </refsect1>
   <refsect1>
     <title>Legal</title>
-    <para>wpa_supplicant is copyright (c) 2003-2019,
+    <para>wpa_supplicant is copyright (c) 2003-2017,
     Jouni Malinen <email>j@w1.fi</email> and
     contributors.
     All Rights Reserved.</para>
diff --git a/wpa_supplicant/doc/docbook/wpa_passphrase.sgml b/wpa_supplicant/doc/docbook/wpa_passphrase.sgml
index ed9baf1..6667a07 100644
--- a/wpa_supplicant/doc/docbook/wpa_passphrase.sgml
+++ b/wpa_supplicant/doc/docbook/wpa_passphrase.sgml
@@ -62,7 +62,7 @@
   </refsect1>
   <refsect1>
     <title>Legal</title>
-    <para>wpa_supplicant is copyright (c) 2003-2019,
+    <para>wpa_supplicant is copyright (c) 2003-2017,
     Jouni Malinen <email>j@w1.fi</email> and
     contributors.
     All Rights Reserved.</para>
diff --git a/wpa_supplicant/doc/docbook/wpa_priv.sgml b/wpa_supplicant/doc/docbook/wpa_priv.sgml
index dd44565..3796b93 100644
--- a/wpa_supplicant/doc/docbook/wpa_priv.sgml
+++ b/wpa_supplicant/doc/docbook/wpa_priv.sgml
@@ -137,7 +137,7 @@
   </refsect1>
   <refsect1>
     <title>Legal</title>
-    <para>wpa_supplicant is copyright (c) 2003-2019,
+    <para>wpa_supplicant is copyright (c) 2003-2017,
     Jouni Malinen <email>j@w1.fi</email> and
     contributors.
     All Rights Reserved.</para>
diff --git a/wpa_supplicant/doc/docbook/wpa_supplicant.sgml b/wpa_supplicant/doc/docbook/wpa_supplicant.sgml
index ebf102e..80b3878 100644
--- a/wpa_supplicant/doc/docbook/wpa_supplicant.sgml
+++ b/wpa_supplicant/doc/docbook/wpa_supplicant.sgml
@@ -246,18 +246,9 @@
 
     <variablelist>
       <varlistentry>
-	<term>nl80211</term>
-	<listitem>
-	  <para>Uses the modern Linux nl80211/cfg80211 netlink-based
-	  interface (most new drivers).</para>
-	</listitem>
-      </varlistentry>
-
-      <varlistentry>
 	<term>wext</term>
 	<listitem>
-	  <para>Uses the legacy Linux wireless extensions ioctl-based
-	  interface (older hardware/drivers).</para>
+	  <para>Linux wireless extensions (generic).</para>
 	</listitem>
       </varlistentry>
 
@@ -547,15 +538,11 @@
 
     <itemizedlist>
       <listitem>
-	<para>Linux kernel 2.6.30 or higher with
-	nl80211/cfg80211 support</para>
-      </listitem>
-
-      <listitem>
-	<para>Linux kernel 2.4.x or higher with Linux Wireless
+	<para>Linux kernel 2.4.x or 2.6.x with Linux Wireless
 	Extensions v15 or newer</para>
       </listitem>
 
+
       <listitem>
 	<para>FreeBSD 6-CURRENT</para>
       </listitem>
@@ -571,13 +558,6 @@
     <title>Supported Drivers</title>
     <variablelist>
       <varlistentry>
-	<term>Linux nl80211/cfg80211</term>
-	<listitem>
-	  <para>This is the preferred driver for Linux.</para>
-	</listitem>
-      </varlistentry>
-
-      <varlistentry>
 	<term>Linux wireless extensions</term>
 	<listitem>
 	  <para>In theory, any driver that supports Linux wireless
@@ -749,7 +729,7 @@
   </refsect1>
   <refsect1>
     <title>Legal</title>
-    <para>wpa_supplicant is copyright (c) 2003-2019,
+    <para>wpa_supplicant is copyright (c) 2003-2017,
     Jouni Malinen <email>j@w1.fi</email> and
     contributors.
     All Rights Reserved.</para>
diff --git a/wpa_supplicant/dpp_supplicant.c b/wpa_supplicant/dpp_supplicant.c
index 8877f7a..22ba902 100644
--- a/wpa_supplicant/dpp_supplicant.c
+++ b/wpa_supplicant/dpp_supplicant.c
@@ -529,9 +529,9 @@
 }
 
 
-static int wpas_dpp_set_configurator(struct wpa_supplicant *wpa_s,
-				     struct dpp_authentication *auth,
-				     const char *cmd)
+static void wpas_dpp_set_configurator(struct wpa_supplicant *wpa_s,
+				      struct dpp_authentication *auth,
+				      const char *cmd)
 {
 	const char *pos, *end;
 	struct dpp_configuration *conf_sta = NULL, *conf_ap = NULL;
@@ -545,7 +545,7 @@
 	char *group_id = NULL;
 
 	if (!cmd)
-		return 0;
+		return;
 
 	wpa_printf(MSG_DEBUG, "DPP: Set configurator parameters: %s", cmd);
 	pos = os_strstr(cmd, " ssid=");
@@ -609,12 +609,10 @@
 				conf_sta->akm = DPP_AKM_PSK;
 			if (psk_set) {
 				os_memcpy(conf_sta->psk, psk, PMK_LEN);
-			} else if (pass_len > 0) {
+			} else {
 				conf_sta->passphrase = os_strdup(pass);
 				if (!conf_sta->passphrase)
 					goto fail;
-			} else {
-				goto fail;
 			}
 		} else if (os_strstr(cmd, " conf=sta-dpp")) {
 			conf_sta->akm = DPP_AKM_DPP;
@@ -688,14 +686,13 @@
 	auth->conf_ap = conf_ap;
 	auth->conf = conf;
 	os_free(group_id);
-	return 0;
+	return;
 
 fail:
-	wpa_msg(wpa_s, MSG_INFO, "DPP: Failed to set configurator parameters");
+	wpa_printf(MSG_DEBUG, "DPP: Failed to set configurator parameters");
 	dpp_configuration_free(conf_sta);
 	dpp_configuration_free(conf_ap);
 	os_free(group_id);
-	return -1;
 }
 
 
@@ -875,11 +872,7 @@
 	if (!wpa_s->dpp_auth)
 		goto fail;
 	wpas_dpp_set_testing_options(wpa_s, wpa_s->dpp_auth);
-	if (wpas_dpp_set_configurator(wpa_s, wpa_s->dpp_auth, cmd) < 0) {
-		dpp_auth_deinit(wpa_s->dpp_auth);
-		wpa_s->dpp_auth = NULL;
-		goto fail;
-	}
+	wpas_dpp_set_configurator(wpa_s, wpa_s->dpp_auth, cmd);
 
 	wpa_s->dpp_auth->neg_freq = neg_freq;
 
@@ -945,7 +938,6 @@
 		wpa_printf(MSG_DEBUG,
 			   "DPP: Failed to request the driver to remain on channel (%u MHz) for listen",
 			   lwork->freq);
-		wpa_s->dpp_listen_freq = 0;
 		wpas_dpp_listen_work_done(wpa_s);
 		wpa_s->dpp_pending_listen_freq = 0;
 		return;
@@ -1026,6 +1018,29 @@
 }
 
 
+void wpas_dpp_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
+				   unsigned int freq)
+{
+	if (!wpa_s->dpp_listen_freq && !wpa_s->dpp_pending_listen_freq)
+		return;
+
+	wpa_printf(MSG_DEBUG,
+		   "DPP: remain-on-channel callback (off_channel_freq=%u dpp_pending_listen_freq=%d roc_waiting_drv_freq=%d freq=%u)",
+		   wpa_s->off_channel_freq, wpa_s->dpp_pending_listen_freq,
+		   wpa_s->roc_waiting_drv_freq, freq);
+	if (wpa_s->off_channel_freq &&
+	    wpa_s->off_channel_freq == wpa_s->dpp_pending_listen_freq) {
+		wpa_printf(MSG_DEBUG, "DPP: Listen on %u MHz started", freq);
+		wpa_s->dpp_pending_listen_freq = 0;
+	} else {
+		wpa_printf(MSG_DEBUG,
+			   "DPP: Ignore remain-on-channel callback (off_channel_freq=%u dpp_pending_listen_freq=%d freq=%u)",
+			   wpa_s->off_channel_freq,
+			   wpa_s->dpp_pending_listen_freq, freq);
+	}
+}
+
+
 void wpas_dpp_cancel_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
 					  unsigned int freq)
 {
@@ -1130,12 +1145,8 @@
 		return;
 	}
 	wpas_dpp_set_testing_options(wpa_s, wpa_s->dpp_auth);
-	if (wpas_dpp_set_configurator(wpa_s, wpa_s->dpp_auth,
-				      wpa_s->dpp_configurator_params) < 0) {
-		dpp_auth_deinit(wpa_s->dpp_auth);
-		wpa_s->dpp_auth = NULL;
-		return;
-	}
+	wpas_dpp_set_configurator(wpa_s, wpa_s->dpp_auth,
+				  wpa_s->dpp_configurator_params);
 	os_memcpy(wpa_s->dpp_auth->peer_mac_addr, src, ETH_ALEN);
 
 	if (wpa_s->dpp_listen_freq &&
@@ -1342,8 +1353,7 @@
 		wpa_printf(MSG_DEBUG, "DPP: No matching exchange in progress");
 		return;
 	}
-	if (result != GAS_QUERY_SUCCESS ||
-	    !resp || status_code != WLAN_STATUS_SUCCESS) {
+	if (!resp || status_code != WLAN_STATUS_SUCCESS) {
 		wpa_printf(MSG_DEBUG, "DPP: GAS query did not succeed");
 		goto fail;
 	}
@@ -2293,9 +2303,9 @@
 		return -1;
 
 	curve = get_param(cmd, " curve=");
-	wpas_dpp_set_testing_options(wpa_s, auth);
-	if (wpas_dpp_set_configurator(wpa_s, auth, cmd) == 0 &&
-	    dpp_configurator_own_config(auth, curve, 0) == 0) {
+	wpas_dpp_set_configurator(wpa_s, auth, cmd);
+
+	if (dpp_configurator_own_config(auth, curve, 0) == 0) {
 		wpas_dpp_handle_config_obj(wpa_s, auth);
 		ret = 0;
 	}
diff --git a/wpa_supplicant/dpp_supplicant.h b/wpa_supplicant/dpp_supplicant.h
index 5a4f06e..9b539df 100644
--- a/wpa_supplicant/dpp_supplicant.h
+++ b/wpa_supplicant/dpp_supplicant.h
@@ -19,6 +19,8 @@
 int wpas_dpp_auth_init(struct wpa_supplicant *wpa_s, const char *cmd);
 int wpas_dpp_listen(struct wpa_supplicant *wpa_s, const char *cmd);
 void wpas_dpp_listen_stop(struct wpa_supplicant *wpa_s);
+void wpas_dpp_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
+				   unsigned int freq);
 void wpas_dpp_cancel_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
 					  unsigned int freq);
 void wpas_dpp_rx_action(struct wpa_supplicant *wpa_s, const u8 *src,
diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h
index 4a9f472..078de23 100644
--- a/wpa_supplicant/driver_i.h
+++ b/wpa_supplicant/driver_i.h
@@ -492,14 +492,6 @@
 	return -1;
 }
 
-static inline int wpa_drv_channel_info(struct wpa_supplicant *wpa_s,
-				       struct wpa_channel_info *ci)
-{
-	if (wpa_s->driver->channel_info)
-		return wpa_s->driver->channel_info(wpa_s->drv_priv, ci);
-	return -1;
-}
-
 static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s,
 				      struct hostap_sta_driver_data *sta)
 {
@@ -804,14 +796,6 @@
 	return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, sa);
 }
 
-static inline int wpa_drv_set_receive_lowest_pn(struct wpa_supplicant *wpa_s,
-						struct receive_sa *sa)
-{
-	if (!wpa_s->driver->set_receive_lowest_pn)
-		return -1;
-	return wpa_s->driver->set_receive_lowest_pn(wpa_s->drv_priv, sa);
-}
-
 static inline int
 wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, struct receive_sc *sc,
 			  unsigned int conf_offset, int validation)
@@ -1062,12 +1046,4 @@
 							params);
 }
 
-static inline int wpa_drv_set_4addr_mode(struct wpa_supplicant *wpa_s, int val)
-{
-	if (!wpa_s->driver->set_4addr_mode)
-		return -1;
-	return wpa_s->driver->set_4addr_mode(wpa_s->drv_priv,
-					     wpa_s->bridge_ifname, val);
-}
-
 #endif /* DRIVER_I_H */
diff --git a/wpa_supplicant/eapol_test.c b/wpa_supplicant/eapol_test.c
index 3fd4ce6..6548bd1 100644
--- a/wpa_supplicant/eapol_test.c
+++ b/wpa_supplicant/eapol_test.c
@@ -711,8 +711,7 @@
 
 	eap = (struct eap_hdr *) (hdr + 1);
 	eap->code = EAP_CODE_REQUEST;
-	if (os_get_random((u8 *) &eap->identifier, sizeof(eap->identifier)) < 0)
-		eap->identifier = os_random() & 0xff;
+	eap->identifier = 0;
 	eap->length = htons(5);
 	pos = (u8 *) (eap + 1);
 	*pos = EAP_TYPE_IDENTITY;
diff --git a/wpa_supplicant/eapol_test.py b/wpa_supplicant/eapol_test.py
index 734428d..80e7dfc 100644
--- a/wpa_supplicant/eapol_test.py
+++ b/wpa_supplicant/eapol_test.py
@@ -136,7 +136,7 @@
             results = res[i].get(False)
         except:
             results = "N/A"
-        print("%d: %s" % (i, results))
+        print "%d: %s" % (i, results)
 
 if __name__ == "__main__":
     main()
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 8ede2bb..ef28ffe 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -293,13 +293,6 @@
 	if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED)
 		return;
 
-	if (os_reltime_initialized(&wpa_s->session_start)) {
-		os_reltime_age(&wpa_s->session_start, &wpa_s->session_length);
-		wpa_s->session_start.sec = 0;
-		wpa_s->session_start.usec = 0;
-		wpas_notify_session_length(wpa_s);
-	}
-
 	wpa_supplicant_set_state(wpa_s, WPA_DISCONNECTED);
 	bssid_changed = !is_zero_ether_addr(wpa_s->bssid);
 	os_memset(wpa_s->bssid, 0, ETH_ALEN);
@@ -331,9 +324,6 @@
 	os_memset(wpa_s->last_tk, 0, sizeof(wpa_s->last_tk));
 #endif /* CONFIG_TESTING_OPTIONS */
 	wpa_s->ieee80211ac = 0;
-
-	if (wpa_s->enabled_4addr_mode && wpa_drv_set_4addr_mode(wpa_s, 0) == 0)
-		wpa_s->enabled_4addr_mode = 0;
 }
 
 
@@ -1345,10 +1335,10 @@
 			continue;
 		}
 
-		if (wpa_is_bss_tmp_disallowed(wpa_s, bss)) {
+		if (wpa_is_bss_tmp_disallowed(wpa_s, bss->bssid)) {
 			if (debug_print)
 				wpa_dbg(wpa_s, MSG_DEBUG,
-					"   skip - AP temporarily disallowed");
+					"   skip - MBO retry delay has not passed yet");
 			continue;
 		}
 #ifdef CONFIG_TESTING_OPTIONS
@@ -2277,50 +2267,6 @@
 #endif /* CONFIG_INTERWORKING */
 
 
-static void multi_ap_process_assoc_resp(struct wpa_supplicant *wpa_s,
-					const u8 *ies, size_t ies_len)
-{
-	struct ieee802_11_elems elems;
-	const u8 *map_sub_elem, *pos;
-	size_t len;
-
-	if (!wpa_s->current_ssid ||
-	    !wpa_s->current_ssid->multi_ap_backhaul_sta ||
-	    !ies ||
-	    ieee802_11_parse_elems(ies, ies_len, &elems, 1) == ParseFailed)
-		return;
-
-	if (!elems.multi_ap || elems.multi_ap_len < 7) {
-		wpa_printf(MSG_INFO, "AP doesn't support Multi-AP protocol");
-		goto fail;
-	}
-
-	pos = elems.multi_ap + 4;
-	len = elems.multi_ap_len - 4;
-
-	map_sub_elem = get_ie(pos, len, MULTI_AP_SUB_ELEM_TYPE);
-	if (!map_sub_elem || map_sub_elem[1] < 1) {
-		wpa_printf(MSG_INFO, "invalid Multi-AP sub elem type");
-		goto fail;
-	}
-
-	if (!(map_sub_elem[2] & MULTI_AP_BACKHAUL_BSS)) {
-		wpa_printf(MSG_INFO, "AP doesn't support backhaul BSS");
-		goto fail;
-	}
-
-	if (wpa_drv_set_4addr_mode(wpa_s, 1) < 0) {
-		wpa_printf(MSG_ERROR, "Failed to set 4addr mode");
-		goto fail;
-	}
-	wpa_s->enabled_4addr_mode = 1;
-	return;
-
-fail:
-	wpa_supplicant_deauthenticate(wpa_s, WLAN_REASON_DEAUTH_LEAVING);
-}
-
-
 #ifdef CONFIG_FST
 static int wpas_fst_update_mbie(struct wpa_supplicant *wpa_s,
 				const u8 *ie, size_t ie_len)
@@ -2397,9 +2343,6 @@
 		    get_ie(data->assoc_info.resp_ies,
 			   data->assoc_info.resp_ies_len, WLAN_EID_VHT_CAP))
 			wpa_s->ieee80211ac = 1;
-
-		multi_ap_process_assoc_resp(wpa_s, data->assoc_info.resp_ies,
-					    data->assoc_info.resp_ies_len);
 	}
 	if (data->assoc_info.beacon_ies)
 		wpa_hexdump(MSG_DEBUG, "beacon_ies",
@@ -2705,16 +2648,6 @@
 
 	wpa_supplicant_set_state(wpa_s, WPA_ASSOCIATED);
 	if (os_memcmp(bssid, wpa_s->bssid, ETH_ALEN) != 0) {
-		if (os_reltime_initialized(&wpa_s->session_start)) {
-			os_reltime_age(&wpa_s->session_start,
-				       &wpa_s->session_length);
-			wpa_s->session_start.sec = 0;
-			wpa_s->session_start.usec = 0;
-			wpas_notify_session_length(wpa_s);
-		} else {
-			wpas_notify_auth_changed(wpa_s);
-			os_get_reltime(&wpa_s->session_start);
-		}
 		wpa_dbg(wpa_s, MSG_DEBUG, "Associated to a new BSS: BSSID="
 			MACSTR, MAC2STR(bssid));
 		new_bss = 1;
@@ -2805,7 +2738,7 @@
 	}
 	wpa_supplicant_cancel_scan(wpa_s);
 
-	if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK) &&
+	if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE) &&
 	    wpa_key_mgmt_wpa_psk(wpa_s->key_mgmt)) {
 		/*
 		 * We are done; the driver will take care of RSN 4-way
@@ -2815,7 +2748,7 @@
 		wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
 		eapol_sm_notify_portValid(wpa_s->eapol, TRUE);
 		eapol_sm_notify_eap_success(wpa_s->eapol, TRUE);
-	} else if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X) &&
+	} else if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE) &&
 		   wpa_key_mgmt_wpa_ieee8021x(wpa_s->key_mgmt)) {
 		/*
 		 * The driver will take care of RSN 4-way handshake, so we need
@@ -3077,7 +3010,7 @@
 	    !disallowed_ssid(wpa_s, fast_reconnect->ssid,
 			     fast_reconnect->ssid_len) &&
 	    !wpas_temp_disabled(wpa_s, fast_reconnect_ssid) &&
-	    !wpa_is_bss_tmp_disallowed(wpa_s, fast_reconnect)) {
+	    !wpa_is_bss_tmp_disallowed(wpa_s, fast_reconnect->bssid)) {
 #ifndef CONFIG_NO_SCAN_PROCESSING
 		wpa_dbg(wpa_s, MSG_DEBUG, "Try to reconnect to the same BSS");
 		if (wpa_supplicant_connect(wpa_s, fast_reconnect,
@@ -3650,8 +3583,8 @@
 }
 
 
-void wpa_supplicant_update_channel_list(struct wpa_supplicant *wpa_s,
-					struct channel_list_changed *info)
+static void wpa_supplicant_update_channel_list(
+	struct wpa_supplicant *wpa_s, struct channel_list_changed *info)
 {
 	struct wpa_supplicant *ifs;
 	u8 dfs_domain;
@@ -3665,13 +3598,10 @@
 	for (ifs = wpa_s; ifs->parent && ifs != ifs->parent; ifs = ifs->parent)
 		;
 
-	if (info) {
-		wpa_msg(ifs, MSG_INFO,
-			WPA_EVENT_REGDOM_CHANGE "init=%s type=%s%s%s",
-			reg_init_str(info->initiator), reg_type_str(info->type),
-			info->alpha2[0] ? " alpha2=" : "",
-			info->alpha2[0] ? info->alpha2 : "");
-	}
+	wpa_msg(ifs, MSG_INFO, WPA_EVENT_REGDOM_CHANGE "init=%s type=%s%s%s",
+		reg_init_str(info->initiator), reg_type_str(info->type),
+		info->alpha2[0] ? " alpha2=" : "",
+		info->alpha2[0] ? info->alpha2 : "");
 
 	if (wpa_s->drv_priv == NULL)
 		return; /* Ignore event during drv initialization */
@@ -3910,7 +3840,7 @@
 				       struct dfs_event *radar)
 {
 #if defined(NEED_AP_MLME) && defined(CONFIG_AP)
-	if (wpa_s->ap_iface || wpa_s->ifmsh) {
+	if (wpa_s->ap_iface) {
 		wpas_ap_event_dfs_cac_started(wpa_s, radar);
 	} else
 #endif /* NEED_AP_MLME && CONFIG_AP */
@@ -3931,7 +3861,7 @@
 					struct dfs_event *radar)
 {
 #if defined(NEED_AP_MLME) && defined(CONFIG_AP)
-	if (wpa_s->ap_iface || wpa_s->ifmsh) {
+	if (wpa_s->ap_iface) {
 		wpas_ap_event_dfs_cac_finished(wpa_s, radar);
 	} else
 #endif /* NEED_AP_MLME && CONFIG_AP */
@@ -3947,7 +3877,7 @@
 				       struct dfs_event *radar)
 {
 #if defined(NEED_AP_MLME) && defined(CONFIG_AP)
-	if (wpa_s->ap_iface || wpa_s->ifmsh) {
+	if (wpa_s->ap_iface) {
 		wpas_ap_event_dfs_cac_aborted(wpa_s, radar);
 	} else
 #endif /* NEED_AP_MLME && CONFIG_AP */
@@ -4055,32 +3985,6 @@
 	}
 #endif /* CONFIG_OWE */
 
-#ifdef CONFIG_MBO
-	if (data->assoc_reject.status_code ==
-	    WLAN_STATUS_DENIED_POOR_CHANNEL_CONDITIONS &&
-	    wpa_s->current_bss && data->assoc_reject.bssid &&
-	    data->assoc_reject.resp_ies) {
-		const u8 *rssi_rej;
-
-		rssi_rej = mbo_get_attr_from_ies(
-			data->assoc_reject.resp_ies,
-			data->assoc_reject.resp_ies_len,
-			OCE_ATTR_ID_RSSI_BASED_ASSOC_REJECT);
-		if (rssi_rej && rssi_rej[1] == 2) {
-			wpa_printf(MSG_DEBUG,
-				   "OCE: RSSI-based association rejection from "
-				   MACSTR " (Delta RSSI: %u, Retry Delay: %u)",
-				   MAC2STR(data->assoc_reject.bssid),
-				   rssi_rej[2], rssi_rej[3]);
-			wpa_bss_tmp_disallow(wpa_s,
-					     data->assoc_reject.bssid,
-					     rssi_rej[3],
-					     rssi_rej[2] +
-					     wpa_s->current_bss->level);
-		}
-	}
-#endif /* CONFIG_MBO */
-
 	if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) {
 		sme_event_assoc_reject(wpa_s, data);
 		return;
@@ -4128,9 +4032,6 @@
 {
 	struct wpa_supplicant *wpa_s = ctx;
 	int resched;
-#ifndef CONFIG_NO_STDOUT_DEBUG
-	int level = MSG_DEBUG;
-#endif /* CONFIG_NO_STDOUT_DEBUG */
 
 	if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED &&
 	    event != EVENT_INTERFACE_ENABLED &&
@@ -4144,6 +4045,9 @@
 	}
 
 #ifndef CONFIG_NO_STDOUT_DEBUG
+{
+	int level = MSG_DEBUG;
+
 	if (event == EVENT_RX_MGMT && data->rx_mgmt.frame_len >= 24) {
 		const struct ieee80211_hdr *hdr;
 		u16 fc;
@@ -4156,6 +4060,7 @@
 
 	wpa_dbg(wpa_s, level, "Event %s (%d) received",
 		event_to_string(event), event);
+}
 #endif /* CONFIG_NO_STDOUT_DEBUG */
 
 	switch (event) {
@@ -4167,8 +4072,6 @@
 				   "FST: MB IEs updated from auth IE");
 #endif /* CONFIG_FST */
 		sme_event_auth(wpa_s, data);
-		wpa_s->auth_status_code = data->auth.status_code;
-		wpas_notify_auth_status_code(wpa_s);
 		break;
 	case EVENT_ASSOC:
 #ifdef CONFIG_TESTING_OPTIONS
@@ -4184,7 +4087,6 @@
 		}
 #endif /* CONFIG_TESTING_OPTIONS */
 		wpa_supplicant_event_assoc(wpa_s, data);
-		wpa_s->assoc_status_code = WLAN_STATUS_SUCCESS;
 		if (data &&
 		    (data->assoc_info.authorized ||
 		     (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) &&
@@ -4427,7 +4329,6 @@
 #ifdef CONFIG_AP
 		if (wpa_s->current_ssid->mode == WPAS_MODE_AP ||
 		    wpa_s->current_ssid->mode == WPAS_MODE_P2P_GO ||
-		    wpa_s->current_ssid->mode == WPAS_MODE_MESH ||
 		    wpa_s->current_ssid->mode ==
 		    WPAS_MODE_P2P_GROUP_FORMATION) {
 			wpas_ap_ch_switch(wpa_s, data->ch_switch.freq,
@@ -4439,9 +4340,6 @@
 		}
 #endif /* CONFIG_AP */
 
-#ifdef CONFIG_IEEE80211W
-		sme_event_ch_switch(wpa_s);
-#endif /* CONFIG_IEEE80211W */
 		wpas_p2p_update_channel_list(wpa_s, WPAS_P2P_CHANNEL_UPDATE_CS);
 		wnm_clear_coloc_intf_reporting(wpa_s);
 		break;
diff --git a/wpa_supplicant/examples/dbus-listen-preq.py b/wpa_supplicant/examples/dbus-listen-preq.py
index 337519f..5ac9859 100755
--- a/wpa_supplicant/examples/dbus-listen-preq.py
+++ b/wpa_supplicant/examples/dbus-listen-preq.py
@@ -1,6 +1,5 @@
 #!/usr/bin/python
 
-from __future__ import print_function
 import dbus
 import sys
 import time
@@ -13,24 +12,21 @@
 WPAS_DBUS_INTERFACES_INTERFACE = "fi.w1.wpa_supplicant1.Interface"
 
 def usage():
-	print("Usage: %s <ifname>" % sys.argv[0])
-	print("Press Ctrl-C to stop")
+	print "Usage: %s <ifname>" % sys.argv[0]
+	print "Press Ctrl-C to stop"
 
 def ProbeRequest(args):
 	if 'addr' in args:
-		print('%.2x:%.2x:%.2x:%.2x:%.2x:%.2x' % tuple(args['addr']),
-                      end=' ')
+		print '%.2x:%.2x:%.2x:%.2x:%.2x:%.2x' % tuple(args['addr']),
 	if 'dst' in args:
-		print('-> %.2x:%.2x:%.2x:%.2x:%.2x:%.2x' % tuple(args['dst']),
-                      end=' ')
+		print '-> %.2x:%.2x:%.2x:%.2x:%.2x:%.2x' % tuple(args['dst']),
 	if 'bssid' in args:
-		print('(bssid %.2x:%.2x:%.2x:%.2x:%.2x:%.2x)' % tuple(args['dst']),
-                      end=' ')
+		print '(bssid %.2x:%.2x:%.2x:%.2x:%.2x:%.2x)' % tuple(args['dst']),
 	if 'signal' in args:
-		print('signal:%d' % args['signal'], end=' ')
+		print 'signal:%d' % args['signal'],
 	if 'ies' in args:
-		print('have IEs (%d bytes)' % len(args['ies']), end=' ')
-        print('')
+		print 'have IEs (%d bytes)' % len(args['ies']),
+        print ''
 
 if __name__ == "__main__":
 	global bus
diff --git a/wpa_supplicant/examples/dpp-qrcode.py b/wpa_supplicant/examples/dpp-qrcode.py
index b468d15..e2a00c9 100644
--- a/wpa_supplicant/examples/dpp-qrcode.py
+++ b/wpa_supplicant/examples/dpp-qrcode.py
@@ -24,19 +24,19 @@
     if os.path.isdir(wpas_ctrl):
         try:
             ifaces = [os.path.join(wpas_ctrl, i) for i in os.listdir(wpas_ctrl)]
-        except OSError as error:
-            print("Could not find wpa_supplicant: ", error)
+        except OSError, error:
+            print "Could not find wpa_supplicant: ", error
             return None
 
     if len(ifaces) < 1:
-        print("No wpa_supplicant control interface found")
+        print "No wpa_supplicant control interface found"
         return None
 
     for ctrl in ifaces:
         try:
             wpas = wpaspy.Ctrl(ctrl)
             return wpas
-        except Exception as e:
+        except Exception, e:
             pass
     return None
 
@@ -55,27 +55,27 @@
             continue
         if not uri.startswith('DPP:'):
             continue
-        print("Found DPP bootstrap info URI:")
-        print(uri)
+        print "Found DPP bootstrap info URI:"
+        print uri
         wpas = wpas_connect()
         if not wpas:
-            print("Could not connect to wpa_supplicant")
-            print('')
+            print "Could not connect to wpa_supplicant"
+            print
             continue
         res = wpas.request("DPP_QR_CODE " + uri);
         try:
             id = int(res)
         except ValueError:
-            print("QR Code URI rejected")
+            print "QR Code URI rejected"
             continue
-        print("QR Code URI accepted - ID=%d" % id)
-        print(wpas.request("DPP_BOOTSTRAP_INFO %d" % id))
+        print "QR Code URI accepted - ID=%d" % id
+        print wpas.request("DPP_BOOTSTRAP_INFO %d" % id)
         del wpas
 
 def dpp_display(curve):
         wpas = wpas_connect()
         if not wpas:
-            print("Could not connect to wpa_supplicant")
+            print "Could not connect to wpa_supplicant"
             return
         res = wpas.request("STATUS")
         addr = None
@@ -93,18 +93,18 @@
         try:
             id = int(res)
         except ValueError:
-            print("Failed to generate bootstrap info URI")
+            print "Failed to generate bootstrap info URI"
             return
-        print("Bootstrap information - ID=%d" % id)
-        print(wpas.request("DPP_BOOTSTRAP_INFO %d" % id))
+        print "Bootstrap information - ID=%d" % id
+        print wpas.request("DPP_BOOTSTRAP_INFO %d" % id)
         uri = wpas.request("DPP_BOOTSTRAP_GET_URI %d" % id)
-        print(uri)
-        print("ID=%d" % id)
+        print uri
+        print "ID=%d" % id
         qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_M,
                            border=3)
         qr.add_data(uri, optimize=5)
         qr.print_ascii(tty=True)
-        print("ID=%d" % id)
+        print "ID=%d" % id
         del wpas
 
 def main():
diff --git a/wpa_supplicant/examples/p2p-nfc.py b/wpa_supplicant/examples/p2p-nfc.py
index 889ac8b..91eba28 100644
--- a/wpa_supplicant/examples/p2p-nfc.py
+++ b/wpa_supplicant/examples/p2p-nfc.py
@@ -37,7 +37,7 @@
 success_file = None
 
 def summary(txt):
-    print(txt)
+    print txt
     if summary_file:
         with open(summary_file, 'a') as f:
             f.write(txt + "\n")
@@ -53,12 +53,12 @@
     if os.path.isdir(wpas_ctrl):
         try:
             ifaces = [os.path.join(wpas_ctrl, i) for i in os.listdir(wpas_ctrl)]
-        except OSError as error:
-            print("Could not find wpa_supplicant: ", error)
+        except OSError, error:
+            print "Could not find wpa_supplicant: ", error
             return None
 
     if len(ifaces) < 1:
-        print("No wpa_supplicant control interface found")
+        print "No wpa_supplicant control interface found"
         return None
 
     for ctrl in ifaces:
@@ -66,10 +66,10 @@
             if ifname not in ctrl:
                 continue
         try:
-            print("Trying to use control interface " + ctrl)
+            print "Trying to use control interface " + ctrl
             wpas = wpaspy.Ctrl(ctrl)
             return wpas
-        except Exception as e:
+        except Exception, e:
             pass
     return None
 
@@ -160,30 +160,30 @@
         if (data == None):
             summary("Could not get handover request carrier record from wpa_supplicant")
             return
-        print("Handover request carrier record from wpa_supplicant: " + data.encode("hex"))
+        print "Handover request carrier record from wpa_supplicant: " + data.encode("hex")
         datamsg = nfc.ndef.Message(data)
         message.add_carrier(datamsg[0], "active", datamsg[1:])
 
     global include_wps_req
     if include_wps_req:
-        print("Handover request (pre-WPS):")
+        print "Handover request (pre-WPS):"
         try:
-            print(message.pretty())
-        except Exception as e:
-            print(e)
+            print message.pretty()
+        except Exception, e:
+            print e
 
         data = wpas_get_handover_req_wps()
         if data:
-            print("Add WPS request in addition to P2P")
+            print "Add WPS request in addition to P2P"
             datamsg = nfc.ndef.Message(data)
             message.add_carrier(datamsg[0], "active", datamsg[1:])
 
-    print("Handover request:")
+    print "Handover request:"
     try:
-        print(message.pretty())
-    except Exception as e:
-        print(e)
-    print(str(message).encode("hex"))
+        print message.pretty()
+    except Exception, e:
+        print e
+    print str(message).encode("hex")
 
     client = nfc.handover.HandoverClient(llc)
     try:
@@ -194,7 +194,7 @@
         summary("Handover connection refused")
         client.close()
         return
-    except Exception as e:
+    except Exception, e:
         summary("Other exception: " + str(e))
         client.close()
         return
@@ -217,41 +217,41 @@
         client.close()
         return
 
-    print("Received message")
+    print "Received message"
     try:
-        print(message.pretty())
-    except Exception as e:
-        print(e)
-    print(str(message).encode("hex"))
+        print message.pretty()
+    except Exception, e:
+        print e
+    print str(message).encode("hex")
     message = nfc.ndef.HandoverSelectMessage(message)
     summary("Handover select received")
     try:
-        print(message.pretty())
-    except Exception as e:
-        print(e)
+        print message.pretty()
+    except Exception, e:
+        print e
 
     for carrier in message.carriers:
-        print("Remote carrier type: " + carrier.type)
+        print "Remote carrier type: " + carrier.type
         if carrier.type == "application/vnd.wfa.p2p":
-            print("P2P carrier type match - send to wpa_supplicant")
+            print "P2P carrier type match - send to wpa_supplicant"
             if "OK" in wpas_report_handover(data, carrier.record, "INIT"):
                 success_report("P2P handover reported successfully (initiator)")
             else:
                 summary("P2P handover report rejected")
             break
 
-    print("Remove peer")
+    print "Remove peer"
     client.close()
-    print("Done with handover")
+    print "Done with handover"
     global only_one
     if only_one:
-        print("only_one -> stop loop")
+        print "only_one -> stop loop"
         global continue_loop
         continue_loop = False
 
     global no_wait
     if no_wait:
-        print("Trying to exit..")
+        print "Trying to exit.."
         global terminate_now
         terminate_now = True
 
@@ -283,33 +283,33 @@
     def process_request(self, request):
         self.ho_server_processing = True
         clear_raw_mode()
-        print("HandoverServer - request received")
+        print "HandoverServer - request received"
         try:
-            print("Parsed handover request: " + request.pretty())
-        except Exception as e:
-            print(e)
+            print "Parsed handover request: " + request.pretty()
+        except Exception, e:
+            print e
 
         sel = nfc.ndef.HandoverSelectMessage(version="1.2")
 
         found = False
 
         for carrier in request.carriers:
-            print("Remote carrier type: " + carrier.type)
+            print "Remote carrier type: " + carrier.type
             if carrier.type == "application/vnd.wfa.p2p":
-                print("P2P carrier type match - add P2P carrier record")
+                print "P2P carrier type match - add P2P carrier record"
                 found = True
                 self.received_carrier = carrier.record
-                print("Carrier record:")
+                print "Carrier record:"
                 try:
-                    print(carrier.record.pretty())
-                except Exception as e:
-                    print(e)
+                    print carrier.record.pretty()
+                except Exception, e:
+                    print e
                 data = wpas_get_handover_sel()
                 if data is None:
-                    print("Could not get handover select carrier record from wpa_supplicant")
+                    print "Could not get handover select carrier record from wpa_supplicant"
                     continue
-                print("Handover select carrier record from wpa_supplicant:")
-                print(data.encode("hex"))
+                print "Handover select carrier record from wpa_supplicant:"
+                print data.encode("hex")
                 self.sent_carrier = data
                 if "OK" in wpas_report_handover(self.received_carrier, self.sent_carrier, "RESP"):
                     success_report("P2P handover reported successfully (responder)")
@@ -324,22 +324,22 @@
         for carrier in request.carriers:
             if found:
                 break
-            print("Remote carrier type: " + carrier.type)
+            print "Remote carrier type: " + carrier.type
             if carrier.type == "application/vnd.wfa.wsc":
-                print("WSC carrier type match - add WSC carrier record")
+                print "WSC carrier type match - add WSC carrier record"
                 found = True
                 self.received_carrier = carrier.record
-                print("Carrier record:")
+                print "Carrier record:"
                 try:
-                    print(carrier.record.pretty())
-                except Exception as e:
-                    print(e)
+                    print carrier.record.pretty()
+                except Exception, e:
+                    print e
                 data = wpas_get_handover_sel_wps()
                 if data is None:
-                    print("Could not get handover select carrier record from wpa_supplicant")
+                    print "Could not get handover select carrier record from wpa_supplicant"
                     continue
-                print("Handover select carrier record from wpa_supplicant:")
-                print(data.encode("hex"))
+                print "Handover select carrier record from wpa_supplicant:"
+                print data.encode("hex")
                 self.sent_carrier = data
                 if "OK" in wpas_report_handover_wsc(self.received_carrier, self.sent_carrier, "RESP"):
                     success_report("WSC handover reported successfully")
@@ -352,12 +352,12 @@
                 found = True
                 break
 
-        print("Handover select:")
+        print "Handover select:"
         try:
-            print(sel.pretty())
-        except Exception as e:
-            print(e)
-        print(str(sel).encode("hex"))
+            print sel.pretty()
+        except Exception, e:
+            print e
+        print str(sel).encode("hex")
 
         summary("Sending handover select")
         self.success = True
@@ -396,7 +396,7 @@
     success = False
     if len(tag.ndef.message):
         for record in tag.ndef.message:
-            print("record type " + record.type)
+            print "record type " + record.type
             if record.type == "application/vnd.wfa.wsc":
                 summary("WPS tag - send to wpa_supplicant")
                 success = wpas_tag_read(tag.ndef.message)
@@ -419,7 +419,7 @@
     global p2p_sel_data
     tag.ndef.message = str(p2p_sel_data)
     success_report("Tag write succeeded")
-    print("Done - remove tag")
+    print "Done - remove tag"
     global only_one
     if only_one:
         global continue_loop
@@ -428,7 +428,7 @@
     return p2p_sel_wait_remove
 
 def wps_write_p2p_handover_sel(clf, wait_remove=True):
-    print("Write P2P handover select")
+    print "Write P2P handover select"
     data = wpas_get_handover_sel(tag=True)
     if (data == None):
         summary("Could not get P2P handover select from wpa_supplicant")
@@ -440,14 +440,14 @@
     p2p_sel_data = nfc.ndef.HandoverSelectMessage(version="1.2")
     message = nfc.ndef.Message(data);
     p2p_sel_data.add_carrier(message[0], "active", message[1:])
-    print("Handover select:")
+    print "Handover select:"
     try:
-        print(p2p_sel_data.pretty())
-    except Exception as e:
-        print(e)
-    print(str(p2p_sel_data).encode("hex"))
+        print p2p_sel_data.pretty()
+    except Exception, e:
+        print e
+    print str(p2p_sel_data).encode("hex")
 
-    print("Touch an NFC tag")
+    print "Touch an NFC tag"
     clf.connect(rdwr={'on-connect': rdwr_connected_p2p_write})
 
 
@@ -456,11 +456,11 @@
     summary("Tag connected: " + str(tag))
 
     if tag.ndef:
-        print("NDEF tag: " + tag.type)
+        print "NDEF tag: " + tag.type
         try:
-            print(tag.ndef.message.pretty())
-        except Exception as e:
-            print(e)
+            print tag.ndef.message.pretty()
+        except Exception, e:
+            print e
         success = p2p_tag_read(tag)
         if only_one and success:
             global continue_loop
@@ -475,15 +475,15 @@
 def llcp_worker(llc):
     global init_on_touch
     if init_on_touch:
-            print("Starting handover client")
+            print "Starting handover client"
             p2p_handover_client(llc)
             return
 
     global no_input
     if no_input:
-        print("Wait for handover to complete")
+        print "Wait for handover to complete"
     else:
-        print("Wait for handover to complete - press 'i' to initiate ('w' for WPS only, 'p' for P2P only)")
+        print "Wait for handover to complete - press 'i' to initiate ('w' for WPS only, 'p' for P2P only)"
     global srv
     global wait_connection
     while not wait_connection and srv.sent_carrier is None:
@@ -506,21 +506,21 @@
             else:
                 continue
             clear_raw_mode()
-            print("Starting handover client")
+            print "Starting handover client"
             p2p_handover_client(llc)
             return
             
     clear_raw_mode()
-    print("Exiting llcp_worker thread")
+    print "Exiting llcp_worker thread"
 
 def llcp_startup(clf, llc):
-    print("Start LLCP server")
+    print "Start LLCP server"
     global srv
     srv = HandoverServer(llc)
     return llc
 
 def llcp_connected(llc):
-    print("P2P LLCP connected")
+    print "P2P LLCP connected"
     global wait_connection
     wait_connection = False
     global init_on_touch
@@ -587,7 +587,7 @@
     if args.ifname:
         global ifname
         ifname = args.ifname
-        print("Selected ifname " + ifname)
+        print "Selected ifname " + ifname
 
     if args.no_wps_req:
         global include_wps_req
@@ -610,7 +610,7 @@
 
     try:
         if not clf.open("usb"):
-            print("Could not open connection with an NFC device")
+            print "Could not open connection with an NFC device"
             raise SystemExit
 
         if args.command == "write-p2p-sel":
@@ -619,7 +619,7 @@
 
         global continue_loop
         while continue_loop:
-            print("Waiting for a tag or peer to be touched")
+            print "Waiting for a tag or peer to be touched"
             wait_connection = True
             try:
                 if args.tag_read_only:
@@ -636,8 +636,8 @@
                                              'on-connect': llcp_connected},
                                        terminate=terminate_loop):
                         break
-            except Exception as e:
-                print("clf.connect failed")
+            except Exception, e:
+                print "clf.connect failed"
 
             global srv
             if only_one and srv and srv.success:
diff --git a/wpa_supplicant/examples/p2p/p2p_connect.py b/wpa_supplicant/examples/p2p/p2p_connect.py
index 6e3d94e..59b0a9d 100644
--- a/wpa_supplicant/examples/p2p/p2p_connect.py
+++ b/wpa_supplicant/examples/p2p/p2p_connect.py
@@ -13,40 +13,40 @@
 
 
 def usage():
-	print("Usage:")
-	print("  %s -i <interface_name> -m <wps_method> \ " \
-		% sys.argv[0])
-	print("		-a <addr> [-p <pin>] [-g <go_intent>] \ ")
-	print("  		[-w <wpas_dbus_interface>]")
-	print("Options:")
-	print("  -i = interface name")
-	print("  -m = wps method")
-	print("  -a = peer address")
-	print("  -p = pin number (8 digits)")
-	print("  -g = group owner intent")
-	print("  -w = wpas dbus interface = fi.w1.wpa_supplicant1")
-	print("Example:")
-	print("  %s -i wlan0 -a 0015008352c0 -m display -p 12345670" % sys.argv[0])
+	print "Usage:"
+	print "  %s -i <interface_name> -m <wps_method> \ " \
+		% sys.argv[0]
+	print "		-a <addr> [-p <pin>] [-g <go_intent>] \ "
+	print "  		[-w <wpas_dbus_interface>]"
+	print "Options:"
+	print "  -i = interface name"
+	print "  -m = wps method"
+	print "  -a = peer address"
+	print "  -p = pin number (8 digits)"
+	print "  -g = group owner intent"
+	print "  -w = wpas dbus interface = fi.w1.wpa_supplicant1"
+	print "Example:"
+	print "  %s -i wlan0 -a 0015008352c0 -m display -p 12345670" % sys.argv[0]
 
 
 # Required Signals
 def GONegotiationSuccess(status):
-	print("Go Negotiation Success")
+	print "Go Negotiation Success"
 
 def GONegotiationFailure(status):
-	print('Go Negotiation Failed. Status:')
-	print(format(status))
+	print 'Go Negotiation Failed. Status:'
+	print format(status)
 	os._exit(0)
 
 def GroupStarted(properties):
 	if properties.has_key("group_object"):
-		print('Group Formation Complete %s' \
-			% properties["group_object"])
+		print 'Group Formation Complete %s' \
+			% properties["group_object"]
 	os._exit(0)
 
 def WpsFailure(status, etc):
-	print("WPS Authentication Failure".format(status))
-	print(etc)
+	print "WPS Authentication Failure".format(status)
+	print etc
 	os._exit(0)
 
 class P2P_Connect():
@@ -118,7 +118,7 @@
 					{'Ifname': ifname, 'Driver': 'test'})
 				time.sleep(1)
 
-			except dbus.DBusException as exc:
+			except dbus.DBusException, exc:
 				if not str(exc).startswith(
 					self.wpas_dbus_interface + \
 					".InterfaceExists:"):
@@ -157,12 +157,12 @@
 			if (self.pin != None):
 				self.p2p_connect_arguements.update({'pin':self.pin})
 			else:
-				print("Error:\n  Pin required for wps_method=display")
+				print "Error:\n  Pin required for wps_method=display"
 				usage()
 				quit()
 
 			if (self.go_intent != None and int(self.go_intent) != 15):
-				print("go_intent overwritten to 15")
+				print "go_intent overwritten to 15"
 
 			self.go_intent = '15'
 
@@ -171,14 +171,14 @@
 			if (self.pin != None):
 				self.p2p_connect_arguements.update({'pin':self.pin})
 			else:
-				print("Error:\n  Pin required for wps_method=keypad")
+				print "Error:\n  Pin required for wps_method=keypad"
 				usage()
 				quit()
 
 			if (self.go_intent != None and int(self.go_intent) == 15):
 				error = "Error :\n Group Owner intent cannot be" + \
 					" 15 for wps_method=keypad"
-				print(error)
+				print error
 				usage()
 				quit()
 
@@ -186,15 +186,15 @@
 		# for ./wpa_cli, p2p_connect [mac] [pin#], wps_method=keypad
 		elif (self.wps_method == 'pin'):
 			if (self.pin != None):
-				print("pin ignored")
+				print "pin ignored"
 
 		# No pin is required for pbc so it is ignored
 		elif (self.wps_method == 'pbc'):
 			if (self.pin != None):
-				print("pin ignored")
+				print "pin ignored"
 
 		else:
-			print("Error:\n  wps_method not supported or does not exist")
+			print "Error:\n  wps_method not supported or does not exist"
 			usage()
 			quit()
 
@@ -209,12 +209,12 @@
 			result_pin = self.p2p_interface.Connect(
 				self.p2p_connect_arguements)
 
-		except dbus.DBusException as exc:
+		except dbus.DBusException, exc:
 				raise exc
 
 		if (self.wps_method == 'pin' and \
 		not self.p2p_connect_arguements.has_key('pin') ):
-			print("Connect return with pin value of %d " % int(result_pin))
+			print "Connect return with pin value of %d " % int(result_pin)
 		gobject.MainLoop().run()
 
 if __name__ == "__main__":
@@ -268,19 +268,19 @@
 
 	# Required Arguements check
 	if (interface_name == None or wps_method == None or addr == None):
-		print("Error:\n  Required arguements not specified")
+		print "Error:\n  Required arguements not specified"
 		usage()
 		quit()
 
 	# Group Owner Intent Check
 	if (go_intent != None and (int(go_intent) > 15 or int(go_intent) < 0) ):
-		print("Error:\n  Group Owner Intent must be between 0 and 15 inclusive")
+		print "Error:\n  Group Owner Intent must be between 0 and 15 inclusive"
 		usage()
 		quit()
 
 	# Pin Check
 	if (pin != None and len(pin) != 8):
-		print("Error:\n  Pin is not 8 digits")
+		print "Error:\n  Pin is not 8 digits"
 		usage()
 		quit()
 
@@ -289,7 +289,7 @@
 			addr,pin,wps_method,go_intent)
 
 	except:
-		print("Error:\n  Invalid Arguements")
+		print "Error:\n  Invalid Arguements"
 		usage()
 		quit()
 
diff --git a/wpa_supplicant/examples/p2p/p2p_disconnect.py b/wpa_supplicant/examples/p2p/p2p_disconnect.py
index 85b5a8b..c3e39b3 100644
--- a/wpa_supplicant/examples/p2p/p2p_disconnect.py
+++ b/wpa_supplicant/examples/p2p/p2p_disconnect.py
@@ -12,19 +12,19 @@
 from dbus.mainloop.glib import DBusGMainLoop
 
 def usage():
-	print("Usage:")
-	print("  %s -i <interface_name> \ " \
-		% sys.argv[0])
-	print("  		[-w <wpas_dbus_interface>]")
-	print("Options:")
-	print("  -i = interface name")
-	print("  -w = wpas dbus interface = fi.w1.wpa_supplicant1")
-	print("Example:")
-	print("  %s -i p2p-wlan0-0" % sys.argv[0])
+	print "Usage:"
+	print "  %s -i <interface_name> \ " \
+		% sys.argv[0]
+	print "  		[-w <wpas_dbus_interface>]"
+	print "Options:"
+	print "  -i = interface name"
+	print "  -w = wpas dbus interface = fi.w1.wpa_supplicant1"
+	print "Example:"
+	print "  %s -i p2p-wlan0-0" % sys.argv[0]
 
 # Required Signals
 def GroupFinished(status, etc):
-	print("Disconnected")
+	print "Disconnected"	
 	os._exit(0)
 
 class P2P_Disconnect (threading.Thread):
@@ -81,10 +81,10 @@
 		try:
 			self.path = self.wpas.GetInterface(
 					self.interface_name)
-		except dbus.DBusException as exc:
+		except dbus.DBusException, exc:
 			error = 'Error:\n  Interface ' + self.interface_name \
 				+ ' was not found'
-			print(error)
+			print error
 			usage()
 			os._exit(0)
 
@@ -142,7 +142,7 @@
 
 	# Interface name is required and was not given
 	if (interface_name == None):
-		print("Error:\n  interface_name is required")
+		print "Error:\n  interface_name is required"
 		usage()
 		quit()
 
@@ -152,7 +152,7 @@
 						wpas_dbus_interface,timeout)
 
 	except:
-		print("Error:\n  Invalid wpas_dbus_interface")
+		print "Error:\n  Invalid wpas_dbus_interface"
 		usage()
 		quit()
 
@@ -165,5 +165,5 @@
 	except:
 		pass
 
-	print("Disconnect timed out")
+	print "Disconnect timed out"
 	quit()
diff --git a/wpa_supplicant/examples/p2p/p2p_find.py b/wpa_supplicant/examples/p2p/p2p_find.py
index e2df528..973d46a 100644
--- a/wpa_supplicant/examples/p2p/p2p_find.py
+++ b/wpa_supplicant/examples/p2p/p2p_find.py
@@ -13,23 +13,23 @@
 from dbus.mainloop.glib import DBusGMainLoop
 
 def usage():
-	print("Usage:")
-	print("  %s -i <interface_name> [-t <timeout>] \ " \
-		% sys.argv[0])
-	print("  		[-w <wpas_dbus_interface>]")
-	print("Options:")
-	print("  -i = interface name")
-	print("  -t = timeout = 0s (infinite)")
-	print("  -w = wpas dbus interface = fi.w1.wpa_supplicant1")
-	print("Example:")
-	print("  %s -i wlan0 -t 10" % sys.argv[0])
+	print "Usage:"
+	print "  %s -i <interface_name> [-t <timeout>] \ " \
+		% sys.argv[0]
+	print "  		[-w <wpas_dbus_interface>]"
+	print "Options:"
+	print "  -i = interface name"
+	print "  -t = timeout = 0s (infinite)"
+	print "  -w = wpas dbus interface = fi.w1.wpa_supplicant1"
+	print "Example:"
+	print "  %s -i wlan0 -t 10" % sys.argv[0]
 
 # Required Signals
 def deviceFound(devicepath):
-	print("Device found: %s" % (devicepath))
+	print "Device found: %s" % (devicepath)
 
 def deviceLost(devicepath):
-	print("Device lost: %s" % (devicepath))
+	print "Device lost: %s" % (devicepath)
 
 class P2P_Find (threading.Thread):
 	# Needed Variables
@@ -85,10 +85,10 @@
 		try:
 			self.path = self.wpas.GetInterface(
 					self.interface_name)
-		except dbus.DBusException as exc:
+		except dbus.DBusException, exc:
 			error = 'Error:\n  Interface ' + self.interface_name \
 				+ ' was not found'
-			print(error)
+			print error
 			usage()
 			os._exit(0)
 
@@ -150,7 +150,7 @@
 			if ( int(value) >= 0):
 				timeout = value
 			else:
-				print("Error:\n  Timeout cannot be negative")
+				print "Error:\n  Timeout cannot be negative"
 				usage()
 				quit()
 		# Dbus interface
@@ -161,7 +161,7 @@
 
 	# Interface name is required and was not given
 	if (interface_name == None):
-		print("Error:\n  interface_name is required")
+		print "Error:\n  interface_name is required"
 		usage()
 		quit()
 
@@ -170,7 +170,7 @@
 		p2p_find_test = P2P_Find(interface_name, wpas_dbus_interface, timeout)
 
 	except:
-		print("Error:\n  Invalid wpas_dbus_interface")
+		print "Error:\n  Invalid wpas_dbus_interface"
 		usage()
 		quit()
 
diff --git a/wpa_supplicant/examples/p2p/p2p_flush.py b/wpa_supplicant/examples/p2p/p2p_flush.py
index 42fc7a3..ff8509d 100644
--- a/wpa_supplicant/examples/p2p/p2p_flush.py
+++ b/wpa_supplicant/examples/p2p/p2p_flush.py
@@ -13,19 +13,19 @@
 from dbus.mainloop.glib import DBusGMainLoop
 
 def usage():
-	print("Usage:")
-	print("  %s -i <interface_name> \ " \
-		% sys.argv[0])
-	print("  		[-w <wpas_dbus_interface>]")
-	print("Options:")
-	print("  -i = interface name")
-	print("  -w = wpas dbus interface = fi.w1.wpa_supplicant1")
-	print("Example:")
-	print("  %s -i wlan0" % sys.argv[0])
+	print "Usage:"
+	print "  %s -i <interface_name> \ " \
+		% sys.argv[0]
+	print "  		[-w <wpas_dbus_interface>]"
+	print "Options:"
+	print "  -i = interface name"
+	print "  -w = wpas dbus interface = fi.w1.wpa_supplicant1"
+	print "Example:"
+	print "  %s -i wlan0" % sys.argv[0]
 
 # Required Signals\
 def deviceLost(devicepath):
-	print("Device lost: %s" % (devicepath))
+	print "Device lost: %s" % (devicepath)
 
 class P2P_Flush (threading.Thread):
 	# Needed Variables
@@ -81,10 +81,10 @@
 		try:
 			self.path = self.wpas.GetInterface(
 					self.interface_name)
-		except dbus.DBusException as exc:
+		except dbus.DBusException, exc:
 			error = 'Error:\n  Interface ' + self.interface_name \
 				+ ' was not found'
-			print(error)
+			print error
 			usage()
 			os._exit(0)
 
@@ -142,7 +142,7 @@
 
 	# Interface name is required and was not given
 	if (interface_name == None):
-		print("Error:\n  interface_name is required")
+		print "Error:\n  interface_name is required"
 		usage()
 		quit()
 
@@ -151,7 +151,7 @@
 		p2p_flush_test = P2P_Flush(interface_name, wpas_dbus_interface,timeout)
 
 	except:
-		print("Error:\n  Invalid wpas_dbus_interface")
+		print "Error:\n  Invalid wpas_dbus_interface"
 		usage()
 		quit()
 
@@ -164,5 +164,5 @@
 	except:
 		pass
 
-	print("p2p_flush complete")
+	print "p2p_flush complete"
 	quit()
diff --git a/wpa_supplicant/examples/p2p/p2p_group_add.py b/wpa_supplicant/examples/p2p/p2p_group_add.py
index 6d40821..5c8fdaf 100644
--- a/wpa_supplicant/examples/p2p/p2p_group_add.py
+++ b/wpa_supplicant/examples/p2p/p2p_group_add.py
@@ -11,30 +11,30 @@
 from dbus.mainloop.glib import DBusGMainLoop
 
 def usage():
-	print("Usage:")
-	print("  %s -i <interface_name> [-p <persistent>] \ " \
-		% sys.argv[0])
-	print("		[-f <frequency>] [-o <group_object_path>] \ ")
-	print("  		[-w <wpas_dbus_interface>]")
-	print("Options:")
-	print("  -i = interface name")
-	print("  -p = persistant group = 0 (0=false, 1=true)")
-	print("  -f = frequency")
-	print("  -o = persistent group object path")
-	print("  -w = wpas dbus interface = fi.w1.wpa_supplicant1")
-	print("Example:")
-	print("  %s -i wlan0" % sys.argv[0])
+	print "Usage:"
+	print "  %s -i <interface_name> [-p <persistent>] \ " \
+		% sys.argv[0]
+	print "		[-f <frequency>] [-o <group_object_path>] \ "
+	print "  		[-w <wpas_dbus_interface>]"
+	print "Options:"
+	print "  -i = interface name"
+	print "  -p = persistant group = 0 (0=false, 1=true)"
+	print "  -f = frequency"
+	print "  -o = persistent group object path"
+	print "  -w = wpas dbus interface = fi.w1.wpa_supplicant1"
+	print "Example:"
+	print "  %s -i wlan0" % sys.argv[0]
 
 # Required Signals
 def GroupStarted(properties):
 	if properties.has_key("group_object"):
-		print('Group Formation Complete %s' \
-			% properties["group_object"])
+		print 'Group Formation Complete %s' \
+			% properties["group_object"]
 	os._exit(0)
 
 def WpsFailure(status, etc):
-	print("WPS Authentication Failure".format(status))
-	print(etc)
+	print "WPS Authentication Failure".format(status)
+	print etc
 	os._exit(0)
 
 class P2P_Group_Add (threading.Thread):
@@ -99,10 +99,10 @@
 		try:
 			self.path = self.wpas.GetInterface(
 					self.interface_name)
-		except dbus.DBusException as exc:
+		except dbus.DBusException, exc:
 			error = 'Error:\n  Interface ' + self.interface_name \
 				+ ' was not found'
-			print(error)
+			print error
 			usage()
 			os._exit(0)
 
@@ -127,7 +127,7 @@
 			if (int(self.frequency) > 0):
 				self.P2PDictionary.update({'frequency':int(self.frequency)})
 			else:
-				print("Error:\n  Frequency must be greater than 0")
+				print "Error:\n  Frequency must be greater than 0"
 				usage()
 				os._exit(0)
 
@@ -141,7 +141,7 @@
 			self.p2p_interface.GroupAdd(self.P2PDictionary)
 
 		except:
-			print("Error:\n  Could not preform group add")
+			print "Error:\n  Could not preform group add"
 			usage()
 			os._exit(0)
 
@@ -188,7 +188,7 @@
 			elif (value == '1'):
 				persistent = True
 			else:
-				print("Error:\n  Persistent can only be 1 or 0")
+				print "Error:\n  Persistent can only be 1 or 0"
 				usage()
 				os._exit(0)
 		# Frequency
@@ -205,7 +205,7 @@
 
 	# Interface name is required and was not given
 	if (interface_name == None):
-		print("Error:\n  interface_name is required")
+		print "Error:\n  interface_name is required"
 		usage()
 		quit()
 
@@ -213,10 +213,10 @@
 		p2p_group_add_test = P2P_Group_Add(interface_name,wpas_dbus_interface,
 					persistent,frequency,persistent_group_object)
 	except:
-		print("Error:\n  Invalid Arguements")
+		print "Error:\n  Invalid Arguements"
 
 	p2p_group_add_test.constructArguements()
 	p2p_group_add_test.start()
 	time.sleep(5)
-	print("Error:\n  Group formation timed out")
+	print "Error:\n  Group formation timed out"
 	os._exit(0)
diff --git a/wpa_supplicant/examples/p2p/p2p_invite.py b/wpa_supplicant/examples/p2p/p2p_invite.py
index 341dcd0..6deb397 100644
--- a/wpa_supplicant/examples/p2p/p2p_invite.py
+++ b/wpa_supplicant/examples/p2p/p2p_invite.py
@@ -11,29 +11,29 @@
 from dbus.mainloop.glib import DBusGMainLoop
 
 def usage():
-	print("Usage:")
-	print("  %s -i <interface_name> -a <addr> \ " \
-		% sys.argv[0])
-	print("		[-o <persistent_group_object>] [-w <wpas_dbus_interface>]")
-	print("Options:")
-	print("  -i = interface name")
-	print("  -a = address of peer")
-	print("  -o = persistent group object path")
-	print("  -w = wpas dbus interface = fi.w1.wpa_supplicant1")
-	print("Example:")
-	print("  %s -i p2p-wlan0-0 -a 00150083523c" % sys.argv[0])
+	print "Usage:"
+	print "  %s -i <interface_name> -a <addr> \ " \
+		% sys.argv[0]
+	print "		[-o <persistent_group_object>] [-w <wpas_dbus_interface>]"
+	print "Options:"
+	print "  -i = interface name"
+	print "  -a = address of peer"
+	print "  -o = persistent group object path"
+	print "  -w = wpas dbus interface = fi.w1.wpa_supplicant1"
+	print "Example:"
+	print "  %s -i p2p-wlan0-0 -a 00150083523c" % sys.argv[0]
 
 # Required Signals
 def InvitationResult(invite_result):
-	print("Inviation Result signal :")
+	print "Inviation Result signal :"
 	status = invite_result['status']
-	print("status = ", status)
+	print "status = ", status
 	if invite_result.has_key('BSSID'):
 		bssid = invite_result['BSSID']
-		print("BSSID = ", hex(bssid[0]) , ":" , \
+		print "BSSID = ", hex(bssid[0]) , ":" , \
 		 hex(bssid[1]) , ":" , hex(bssid[2]) , ":", \
 		 hex(bssid[3]) , ":" , hex(bssid[4]) , ":" , \
-		hex(bssid[5]))
+		hex(bssid[5])
 	os._exit(0)
 
 class P2P_Invite (threading.Thread):
@@ -96,10 +96,10 @@
 		try:
 			self.path = self.wpas.GetInterface(
 					self.interface_name)
-		except dbus.DBusException as exc:
+		except dbus.DBusException, exc:
 			error = 'Error:\n  Interface ' + self.interface_name \
 				+ ' was not found'
-			print(error)
+			print error
 			usage()
 			os._exit(0)
 
@@ -127,7 +127,7 @@
 			self.p2p_interface.Invite(self.P2PDictionary)
 
 		except:
-			print("Error:\n  Invalid Arguements")
+			print "Error:\n  Invalid Arguements"
 			usage()
 			os._exit(0)
 
@@ -176,12 +176,12 @@
 
 	# Interface name is required and was not given
 	if (interface_name == None):
-		print("Error:\n  interface_name is required")
+		print "Error:\n  interface_name is required"
 		usage()
 		quit()
 
 	if (addr == None):
-		print("Error:\n  peer address is required")
+		print "Error:\n  peer address is required"
 		usage()
 		quit()
 
@@ -190,12 +190,12 @@
 			P2P_Invite(interface_name,wpas_dbus_interface,
 					addr,persistent_group_object)
 	except:
-		print("Error:\n  Invalid Arguements")
+		print "Error:\n  Invalid Arguements"
 		usage()
 		os._exit(1)
 
 	p2p_invite_test.constructArguements()
 	p2p_invite_test.start()
 	time.sleep(10)
-	print("Error:\n  p2p_invite timed out")
+	print "Error:\n  p2p_invite timed out"
 	os._exit(0)
diff --git a/wpa_supplicant/examples/p2p/p2p_listen.py b/wpa_supplicant/examples/p2p/p2p_listen.py
index b0837d9..bb3c1e4 100644
--- a/wpa_supplicant/examples/p2p/p2p_listen.py
+++ b/wpa_supplicant/examples/p2p/p2p_listen.py
@@ -13,20 +13,20 @@
 from dbus.mainloop.glib import DBusGMainLoop
 
 def usage():
-	print("Usage:")
-	print("  %s -i <interface_name> [-t <timeout>] \ " \
-		% sys.argv[0])
-	print("  		[-w <wpas_dbus_interface>]")
-	print("Options:")
-	print("  -i = interface name")
-	print("  -t = timeout = 0s (infinite)")
-	print("  -w = wpas dbus interface = fi.w1.wpa_supplicant1")
-	print("Example:")
-	print("  %s -i wlan0 -t 5" % sys.argv[0])
+	print "Usage:"
+	print "  %s -i <interface_name> [-t <timeout>] \ " \
+		% sys.argv[0]
+	print "  		[-w <wpas_dbus_interface>]"
+	print "Options:"
+	print "  -i = interface name"
+	print "  -t = timeout = 0s (infinite)"
+	print "  -w = wpas dbus interface = fi.w1.wpa_supplicant1"
+	print "Example:"
+	print "  %s -i wlan0 -t 5" % sys.argv[0]
 
 # Required Signals
 def p2pStateChange(status):
-	print(status)
+	print status
 
 class P2P_Listen(threading.Thread):
 	# Needed Variables
@@ -82,10 +82,10 @@
 		try:
 			self.path = self.wpas.GetInterface(
 					self.interface_name)
-		except dbus.DBusException as exc:
+		except dbus.DBusException, exc:
 			error = 'Error:\n  Interface ' + self.interface_name \
 				+ ' was not found'
-			print(error)
+			print error
 			usage()
 			os._exit(0)
 
@@ -140,7 +140,7 @@
 			if ( int(value) >= 0):
 				timeout = value
 			else:
-				print("Error:\n  Timeout cannot be negative")
+				print "Error:\n  Timeout cannot be negative"
 				usage()
 				quit()
 		# Dbus interface
@@ -151,7 +151,7 @@
 
 	# Interface name is required and was not given
 	if (interface_name == None):
-		print("Error:\n  interface_name is required")
+		print "Error:\n  interface_name is required"
 		usage()
 		quit()
 
@@ -160,7 +160,7 @@
 		p2p_listen_test = P2P_Listen(interface_name, wpas_dbus_interface, timeout)
 
 	except:
-		print("Error:\n  Invalid wpas_dbus_interface")
+		print "Error:\n  Invalid wpas_dbus_interface"
 		usage()
 		quit()
 
diff --git a/wpa_supplicant/examples/p2p/p2p_stop_find.py b/wpa_supplicant/examples/p2p/p2p_stop_find.py
index bdb4c0e..f6c03b0 100644
--- a/wpa_supplicant/examples/p2p/p2p_stop_find.py
+++ b/wpa_supplicant/examples/p2p/p2p_stop_find.py
@@ -11,22 +11,22 @@
 from dbus.mainloop.glib import DBusGMainLoop
 
 def usage():
-	print("Usage:")
-	print("  %s -i <interface_name> \ " \
-		% sys.argv[0])
-	print("  		[-w <wpas_dbus_interface>]")
-	print("Options:")
-	print("  -i = interface name")
-	print("  -w = wpas dbus interface = fi.w1.wpa_supplicant1")
-	print("Example:")
-	print("  %s -i wlan0" % sys.argv[0])
+	print "Usage:"
+	print "  %s -i <interface_name> \ " \
+		% sys.argv[0]
+	print "  		[-w <wpas_dbus_interface>]"
+	print "Options:"
+	print "  -i = interface name"
+	print "  -w = wpas dbus interface = fi.w1.wpa_supplicant1"
+	print "Example:"
+	print "  %s -i wlan0" % sys.argv[0]
 
 # Required Signals
 def deviceLost(devicepath):
-	print("Device lost: %s" % (devicepath))
+	print "Device lost: %s" % (devicepath)
 
 def p2pStateChange(status):
-	print(status)
+	print status
 	os._exit(0)
 
 class P2P_Stop_Find (threading.Thread):
@@ -83,10 +83,10 @@
 		try:
 			self.path = self.wpas.GetInterface(
 					self.interface_name)
-		except dbus.DBusException as exc:
+		except dbus.DBusException, exc:
 			error = 'Error:\n  Interface ' + self.interface_name \
 				+ ' was not found'
-			print(error)
+			print error
 			usage()
 			os._exit(0)
 
@@ -147,7 +147,7 @@
 
 	# Interface name is required and was not given
 	if (interface_name == None):
-		print("Error:\n  interface_name is required")
+		print "Error:\n  interface_name is required"
 		usage()
 		quit()
 
@@ -157,7 +157,7 @@
 						wpas_dbus_interface,timeout)
 
 	except:
-		print("Error:\n  Invalid wpas_dbus_interface")
+		print "Error:\n  Invalid wpas_dbus_interface"
 		usage()
 		quit()
 
@@ -170,5 +170,5 @@
 	except:
 		pass
 
-	print("p2p find stopped")
+	print "p2p find stopped"
 	quit()
diff --git a/wpa_supplicant/examples/wpas-dbus-new-getall.py b/wpa_supplicant/examples/wpas-dbus-new-getall.py
index 732f54d..03da187 100755
--- a/wpa_supplicant/examples/wpas-dbus-new-getall.py
+++ b/wpa_supplicant/examples/wpas-dbus-new-getall.py
@@ -11,8 +11,8 @@
 				  "/fi/w1/wpa_supplicant1")
 	props = wpas_obj.GetAll("fi.w1.wpa_supplicant1",
 				dbus_interface=dbus.PROPERTIES_IFACE)
-	print("GetAll(fi.w1.wpa_supplicant1, /fi/w1/wpa_supplicant1):")
-	print(props)
+	print "GetAll(fi.w1.wpa_supplicant1, /fi/w1/wpa_supplicant1):"
+	print props
 
 	if len(sys.argv) != 2:
 		os._exit(1)
@@ -24,15 +24,15 @@
 	if_obj = bus.get_object("fi.w1.wpa_supplicant1", path)
 	props = if_obj.GetAll("fi.w1.wpa_supplicant1.Interface",
 			      dbus_interface=dbus.PROPERTIES_IFACE)
-	print('')
-	print("GetAll(fi.w1.wpa_supplicant1.Interface, %s):" % (path))
-	print(props)
+	print
+	print "GetAll(fi.w1.wpa_supplicant1.Interface, %s):" % (path)
+	print props
 
 	props = if_obj.GetAll("fi.w1.wpa_supplicant1.Interface.WPS",
 			      dbus_interface=dbus.PROPERTIES_IFACE)
-	print('')
-	print("GetAll(fi.w1.wpa_supplicant1.Interface.WPS, %s):" % (path))
-	print(props)
+	print
+	print "GetAll(fi.w1.wpa_supplicant1.Interface.WPS, %s):" % (path)
+	print props
 
 	res = if_obj.Get("fi.w1.wpa_supplicant1.Interface", 'BSSs',
 			 dbus_interface=dbus.PROPERTIES_IFACE)
@@ -40,9 +40,9 @@
 		bss_obj = bus.get_object("fi.w1.wpa_supplicant1", res[0])
 		props = bss_obj.GetAll("fi.w1.wpa_supplicant1.BSS",
 				       dbus_interface=dbus.PROPERTIES_IFACE)
-		print('')
-		print("GetAll(fi.w1.wpa_supplicant1.BSS, %s):" % (res[0]))
-		print(props)
+		print
+		print "GetAll(fi.w1.wpa_supplicant1.BSS, %s):" % (res[0])
+		print props
 
 	res = if_obj.Get("fi.w1.wpa_supplicant1.Interface", 'Networks',
 			 dbus_interface=dbus.PROPERTIES_IFACE)
@@ -50,9 +50,10 @@
 		net_obj = bus.get_object("fi.w1.wpa_supplicant1", res[0])
 		props = net_obj.GetAll("fi.w1.wpa_supplicant1.Network",
 				       dbus_interface=dbus.PROPERTIES_IFACE)
-		print('')
-		print("GetAll(fi.w1.wpa_supplicant1.Network, %s):" % (res[0]))
-		print(props)
+		print
+		print "GetAll(fi.w1.wpa_supplicant1.Network, %s):" % (res[0])
+		print props
 
 if __name__ == "__main__":
 	main()
+
diff --git a/wpa_supplicant/examples/wpas-dbus-new-signals.py b/wpa_supplicant/examples/wpas-dbus-new-signals.py
index 366a655..d90ef18 100755
--- a/wpa_supplicant/examples/wpas-dbus-new-signals.py
+++ b/wpa_supplicant/examples/wpas-dbus-new-signals.py
@@ -32,17 +32,17 @@
 		if_obj = bus.get_object(WPAS_DBUS_SERVICE, path)
 		ifname = if_obj.Get(WPAS_DBUS_INTERFACES_INTERFACE, 'Ifname',
 			      dbus_interface=dbus.PROPERTIES_IFACE)
-		print(ifname)
+		print ifname
 
 def interfaceAdded(interface, properties):
-	print("InterfaceAdded(%s): Ifname=%s" % (interface, properties['Ifname']))
+	print "InterfaceAdded(%s): Ifname=%s" % (interface, properties['Ifname'])
 
 def interfaceRemoved(interface):
-	print("InterfaceRemoved(%s)" % (interface))
+	print "InterfaceRemoved(%s)" % (interface)
 
 def propertiesChanged(properties):
 	for i in properties:
-		print("PropertiesChanged: %s=%s" % (i, properties[i]))
+		print "PropertiesChanged: %s=%s" % (i, properties[i])
 
 def showBss(bss):
 	net_obj = bus.get_object(WPAS_DBUS_SERVICE, bss)
@@ -80,48 +80,48 @@
 	else:
 		maxrate = 0
 
-	print("  %s  ::  ssid='%s'  wpa=%s  wpa2=%s  signal=%d  rate=%d  freq=%d" % (bssid, ssid, wpa, wpa2, signal, maxrate, freq))
+	print "  %s  ::  ssid='%s'  wpa=%s  wpa2=%s  signal=%d  rate=%d  freq=%d" % (bssid, ssid, wpa, wpa2, signal, maxrate, freq)
 
 def scanDone(success):
 	gobject.MainLoop().quit()
-	print("Scan done: success=%s" % success)
+	print "Scan done: success=%s" % success
 
 def scanDone2(success, path=None):
-	print("Scan done: success=%s [path=%s]" % (success, path))
+	print "Scan done: success=%s [path=%s]" % (success, path)
 
 def bssAdded(bss, properties):
-	print("BSS added: %s" % (bss))
+	print "BSS added: %s" % (bss)
 	showBss(bss)
 
 def bssRemoved(bss):
-	print("BSS removed: %s" % (bss))
+	print "BSS removed: %s" % (bss)
 
 def blobAdded(blob):
-	print("BlobAdded(%s)" % (blob))
+	print "BlobAdded(%s)" % (blob)
 
 def blobRemoved(blob):
-	print("BlobRemoved(%s)" % (blob))
+	print "BlobRemoved(%s)" % (blob)
 
 def networkAdded(network, properties):
-	print("NetworkAdded(%s)" % (network))
+	print "NetworkAdded(%s)" % (network)
 
 def networkRemoved(network):
-	print("NetworkRemoved(%s)" % (network))
+	print "NetworkRemoved(%s)" % (network)
 
 def networkSelected(network):
-	print("NetworkSelected(%s)" % (network))
+	print "NetworkSelected(%s)" % (network)
 
 def propertiesChangedInterface(properties):
 	for i in properties:
-		print("PropertiesChanged(interface): %s=%s" % (i, properties[i]))
+		print "PropertiesChanged(interface): %s=%s" % (i, properties[i])
 
 def propertiesChangedBss(properties):
 	for i in properties:
-		print("PropertiesChanged(BSS): %s=%s" % (i, properties[i]))
+		print "PropertiesChanged(BSS): %s=%s" % (i, properties[i])
 
 def propertiesChangedNetwork(properties):
 	for i in properties:
-		print("PropertiesChanged(Network): %s=%s" % (i, properties[i]))
+		print "PropertiesChanged(Network): %s=%s" % (i, properties[i])
 
 def main():
 	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
diff --git a/wpa_supplicant/examples/wpas-dbus-new-wps.py b/wpa_supplicant/examples/wpas-dbus-new-wps.py
index 7d87b1e..b886385 100755
--- a/wpa_supplicant/examples/wpas-dbus-new-wps.py
+++ b/wpa_supplicant/examples/wpas-dbus-new-wps.py
@@ -15,23 +15,23 @@
 
 def propertiesChanged(properties):
 	if properties.has_key("State"):
-		print("PropertiesChanged: State: %s" % (properties["State"]))
+		print "PropertiesChanged: State: %s" % (properties["State"])
 
 def scanDone(success):
-	print("Scan done: success=%s" % success)
+	print "Scan done: success=%s" % success
 
 def bssAdded(bss, properties):
-	print("BSS added: %s" % (bss))
+	print "BSS added: %s" % (bss)
 
 def bssRemoved(bss):
-	print("BSS removed: %s" % (bss))
+	print "BSS removed: %s" % (bss)
 
 def wpsEvent(name, args):
-	print("WPS event: %s" % (name))
-	print(args)
+	print "WPS event: %s" % (name)
+	print args
 
 def credentials(cred):
-	print("WPS credentials: %s" % (cred))
+	print "WPS credentials: %s" % (cred)
 
 def main():
 	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
@@ -40,7 +40,7 @@
 	wpas_obj = bus.get_object(WPAS_DBUS_SERVICE, WPAS_DBUS_OPATH)
 
 	if len(sys.argv) != 2:
-		print("Missing ifname argument")
+		print "Missing ifname argument"
 		os._exit(1)
 
 	wpas = dbus.Interface(wpas_obj, WPAS_DBUS_INTERFACE)
diff --git a/wpa_supplicant/examples/wpas-dbus-new.py b/wpa_supplicant/examples/wpas-dbus-new.py
index 6bf74ae..25072ce 100755
--- a/wpa_supplicant/examples/wpas-dbus-new.py
+++ b/wpa_supplicant/examples/wpas-dbus-new.py
@@ -31,11 +31,11 @@
 		if_obj = bus.get_object(WPAS_DBUS_SERVICE, path)
 		ifname = if_obj.Get(WPAS_DBUS_INTERFACES_INTERFACE, 'Ifname',
 			      dbus_interface=dbus.PROPERTIES_IFACE)
-		print(ifname)
+		print ifname
 
 def propertiesChanged(properties):
 	if properties.has_key("State"):
-		print("PropertiesChanged: State: %s" % (properties["State"]))
+		print "PropertiesChanged: State: %s" % (properties["State"])
 
 def showBss(bss):
 	net_obj = bus.get_object(WPAS_DBUS_SERVICE, bss)
@@ -73,25 +73,25 @@
 	else:
 		maxrate = 0
 
-	print("  %s  ::  ssid='%s'  wpa=%s  wpa2=%s  signal=%d  rate=%d  freq=%d" % (bssid, ssid, wpa, wpa2, signal, maxrate, freq))
+	print "  %s  ::  ssid='%s'  wpa=%s  wpa2=%s  signal=%d  rate=%d  freq=%d" % (bssid, ssid, wpa, wpa2, signal, maxrate, freq)
 
 def scanDone(success):
-	print("Scan done: success=%s" % success)
+	print "Scan done: success=%s" % success
 	
 	res = if_obj.Get(WPAS_DBUS_INTERFACES_INTERFACE, 'BSSs',
 			 dbus_interface=dbus.PROPERTIES_IFACE)
 
-	print("Scanned wireless networks:")
+	print "Scanned wireless networks:"
 	for opath in res:
-		print(opath)
+		print opath
 		showBss(opath)
 
 def bssAdded(bss, properties):
-	print("BSS added: %s" % (bss))
+	print "BSS added: %s" % (bss)
 	showBss(bss)
 
 def bssRemoved(bss):
-	print("BSS removed: %s" % (bss))
+	print "BSS removed: %s" % (bss)
 
 def main():
 	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
@@ -123,14 +123,14 @@
 	path = None
 	try:
 		path = wpas.GetInterface(ifname)
-	except dbus.DBusException as exc:
+	except dbus.DBusException, exc:
 		if not str(exc).startswith("fi.w1.wpa_supplicant1.InterfaceUnknown:"):
 			raise exc
 		try:
 			path = wpas.CreateInterface({'Ifname': ifname, 'Driver': 'test'})
 			time.sleep(1)
 
-		except dbus.DBusException as exc:
+		except dbus.DBusException, exc:
 			if not str(exc).startswith("fi.w1.wpa_supplicant1.InterfaceExists:"):
 				raise exc
 
diff --git a/wpa_supplicant/examples/wpas-test.py b/wpa_supplicant/examples/wpas-test.py
index bdd16a8..fd7f73d 100755
--- a/wpa_supplicant/examples/wpas-test.py
+++ b/wpa_supplicant/examples/wpas-test.py
@@ -24,7 +24,7 @@
 
 def main():
 	if len(sys.argv) != 2:
-		print("Usage: wpas-test.py <interface>")
+		print "Usage: wpas-test.py <interface>"
 		os._exit(1)
 
 	ifname = sys.argv[1]
@@ -37,12 +37,12 @@
 	path = None
 	try:
 		path = wpas.getInterface(ifname)
-	except dbus.dbus_bindings.DBusException as exc:
+	except dbus.dbus_bindings.DBusException, exc:
 		if str(exc) != "wpa_supplicant knows nothing about this interface.":
 			raise exc
 		try:
 			path = wpas.addInterface(ifname, {'driver': dbus.Variant('wext')})
-		except dbus.dbus_bindings.DBusException as exc:
+		except dbus.dbus_bindings.DBusException, exc:
 			if str(exc) != "wpa_supplicant already controls this interface.":
 				raise exc
 
@@ -53,7 +53,7 @@
 	time.sleep(5)
 	res = iface.scanResults()
 
-	print("Scanned wireless networks:")
+	print "Scanned wireless networks:"
 	for opath in res:
 		net_obj = bus.get_object(WPAS_DBUS_SERVICE, opath)
 		net = dbus.Interface(net_obj, WPAS_DBUS_BSSID_INTERFACE)
@@ -80,7 +80,7 @@
 		noise = props["noise"]
 		maxrate = props["maxrate"] / 1000000
 
-		print("  %s  ::  ssid='%s'  wpa=%s  wpa2=%s  quality=%d%%  rate=%d  freq=%d" % (bssid, ssid, wpa, wpa2, qual, maxrate, freq))
+		print "  %s  ::  ssid='%s'  wpa=%s  wpa2=%s  quality=%d%%  rate=%d  freq=%d" % (bssid, ssid, wpa, wpa2, qual, maxrate, freq)
 
 	wpas.removeInterface(dbus.ObjectPath(path))
 	# Should fail here with unknown interface error
diff --git a/wpa_supplicant/examples/wps-ap-cli b/wpa_supplicant/examples/wps-ap-cli
index 15d913e..cc2cff2 100755
--- a/wpa_supplicant/examples/wps-ap-cli
+++ b/wpa_supplicant/examples/wps-ap-cli
@@ -14,12 +14,12 @@
 enter_pin()
 {
 	echo "Enter a PIN from a station to be enrolled to the network."
-	printf "Enrollee PIN: "
+	echo -n "Enrollee PIN: "
 	read pin
 	cpin=`$CLI wps_check_pin "$pin" | tail -1`
 	if [ "$cpin" = "FAIL-CHECKSUM" ]; then
 		echo "Checksum digit is not valid"
-		printf "Do you want to use this PIN (y/n)? "
+		echo -n "Do you want to use this PIN (y/n)? "
 		read resp
 		case "$resp" in
 			y*)
@@ -52,7 +52,7 @@
 	echo "3: Show current configuration"
 	echo "0: Exit wps-ap-cli"
 
-	printf "Command: "
+	echo -n "Command: "
 	read cmd
 
 	case "$cmd" in
diff --git a/wpa_supplicant/examples/wps-nfc.py b/wpa_supplicant/examples/wps-nfc.py
index bb458fb..7459eb9 100755
--- a/wpa_supplicant/examples/wps-nfc.py
+++ b/wpa_supplicant/examples/wps-nfc.py
@@ -30,7 +30,7 @@
 success_file = None
 
 def summary(txt):
-    print(txt)
+    print txt
     if summary_file:
         with open(summary_file, 'a') as f:
             f.write(txt + "\n")
@@ -46,19 +46,19 @@
     if os.path.isdir(wpas_ctrl):
         try:
             ifaces = [os.path.join(wpas_ctrl, i) for i in os.listdir(wpas_ctrl)]
-        except OSError as error:
-            print("Could not find wpa_supplicant: ", error)
+        except OSError, error:
+            print "Could not find wpa_supplicant: ", error
             return None
 
     if len(ifaces) < 1:
-        print("No wpa_supplicant control interface found")
+        print "No wpa_supplicant control interface found"
         return None
 
     for ctrl in ifaces:
         try:
             wpas = wpaspy.Ctrl(ctrl)
             return wpas
-        except Exception as e:
+        except Exception, e:
             pass
     return None
 
@@ -163,22 +163,22 @@
         self.ho_server_processing = True
         summary("HandoverServer - request received")
         try:
-            print("Parsed handover request: " + request.pretty())
-        except Exception as e:
-            print(e)
+            print "Parsed handover request: " + request.pretty()
+        except Exception, e:
+            print e
 
         sel = nfc.ndef.HandoverSelectMessage(version="1.2")
 
         for carrier in request.carriers:
-            print("Remote carrier type: " + carrier.type)
+            print "Remote carrier type: " + carrier.type
             if carrier.type == "application/vnd.wfa.wsc":
                 summary("WPS carrier type match - add WPS carrier record")
                 data = wpas_get_handover_sel(self.uuid)
                 if data is None:
                     summary("Could not get handover select carrier record from wpa_supplicant")
                     continue
-                print("Handover select carrier record from wpa_supplicant:")
-                print(data.encode("hex"))
+                print "Handover select carrier record from wpa_supplicant:"
+                print data.encode("hex")
                 self.sent_carrier = data
                 if "OK" in wpas_report_handover(carrier.record, self.sent_carrier, "RESP"):
                     success_report("Handover reported successfully (responder)")
@@ -188,12 +188,12 @@
                 message = nfc.ndef.Message(data);
                 sel.add_carrier(message[0], "active", message[1:])
 
-        print("Handover select:")
+        print "Handover select:"
         try:
-            print(sel.pretty())
-        except Exception as e:
-            print(e)
-        print(str(sel).encode("hex"))
+            print sel.pretty()
+        except Exception, e:
+            print e
+        print str(sel).encode("hex")
 
         summary("Sending handover select")
         self.success = True
@@ -207,19 +207,19 @@
     if (data == None):
         summary("Could not get handover request carrier record from wpa_supplicant")
         return
-    print("Handover request carrier record from wpa_supplicant: " + data.encode("hex"))
+    print "Handover request carrier record from wpa_supplicant: " + data.encode("hex")
 
     message = nfc.ndef.HandoverRequestMessage(version="1.2")
     message.nonce = random.randint(0, 0xffff)
     datamsg = nfc.ndef.Message(data)
     message.add_carrier(datamsg[0], "active", datamsg[1:])
 
-    print("Handover request:")
+    print "Handover request:"
     try:
-        print(message.pretty())
-    except Exception as e:
-        print(e)
-    print(str(message).encode("hex"))
+        print message.pretty()
+    except Exception, e:
+        print e
+    print str(message).encode("hex")
 
     client = nfc.handover.HandoverClient(llc)
     try:
@@ -230,7 +230,7 @@
         summary("Handover connection refused")
         client.close()
         return
-    except Exception as e:
+    except Exception, e:
         summary("Other exception: " + str(e))
         client.close()
         return
@@ -253,23 +253,23 @@
         client.close()
         return
 
-    print("Received message")
+    print "Received message"
     try:
-        print(message.pretty())
-    except Exception as e:
-        print(e)
-    print(str(message).encode("hex"))
+        print message.pretty()
+    except Exception, e:
+        print e
+    print str(message).encode("hex")
     message = nfc.ndef.HandoverSelectMessage(message)
     summary("Handover select received")
     try:
-        print(message.pretty())
-    except Exception as e:
-        print(e)
+        print message.pretty()
+    except Exception, e:
+        print e
 
     for carrier in message.carriers:
-        print("Remote carrier type: " + carrier.type)
+        print "Remote carrier type: " + carrier.type
         if carrier.type == "application/vnd.wfa.wsc":
-            print("WPS carrier type match - send to wpa_supplicant")
+            print "WPS carrier type match - send to wpa_supplicant"
             if "OK" in wpas_report_handover(data, carrier.record, "INIT"):
                 success_report("Handover reported successfully (initiator)")
             else:
@@ -278,9 +278,9 @@
             #wifi = nfc.ndef.WifiConfigRecord(carrier.record)
             #print wifi.pretty()
 
-    print("Remove peer")
+    print "Remove peer"
     client.close()
-    print("Done with handover")
+    print "Done with handover"
     global only_one
     if only_one:
         global continue_loop
@@ -288,7 +288,7 @@
 
     global no_wait
     if no_wait:
-        print("Trying to exit..")
+        print "Trying to exit.."
         global terminate_now
         terminate_now = True
 
@@ -296,7 +296,7 @@
     success = False
     if len(tag.ndef.message):
         for record in tag.ndef.message:
-            print("record type " + record.type)
+            print "record type " + record.type
             if record.type == "application/vnd.wfa.wsc":
                 summary("WPS tag - send to wpa_supplicant")
                 success = wpas_tag_read(tag.ndef.message)
@@ -308,7 +308,7 @@
         success_report("Tag read succeeded")
 
     if wait_remove:
-        print("Remove tag")
+        print "Remove tag"
         while tag.is_present:
             time.sleep(0.1)
 
@@ -320,7 +320,7 @@
     global write_data
     tag.ndef.message = str(write_data)
     success_report("Tag write succeeded")
-    print("Done - remove tag")
+    print "Done - remove tag"
     global only_one
     if only_one:
         global continue_loop
@@ -330,41 +330,41 @@
         time.sleep(0.1)
 
 def wps_write_config_tag(clf, id=None, wait_remove=True):
-    print("Write WPS config token")
+    print "Write WPS config token"
     global write_data, write_wait_remove
     write_wait_remove = wait_remove
     write_data = wpas_get_config_token(id)
     if write_data == None:
-        print("Could not get WPS config token from wpa_supplicant")
+        print "Could not get WPS config token from wpa_supplicant"
         sys.exit(1)
         return
-    print("Touch an NFC tag")
+    print "Touch an NFC tag"
     clf.connect(rdwr={'on-connect': rdwr_connected_write})
 
 
 def wps_write_er_config_tag(clf, uuid, wait_remove=True):
-    print("Write WPS ER config token")
+    print "Write WPS ER config token"
     global write_data, write_wait_remove
     write_wait_remove = wait_remove
     write_data = wpas_get_er_config_token(uuid)
     if write_data == None:
-        print("Could not get WPS config token from wpa_supplicant")
+        print "Could not get WPS config token from wpa_supplicant"
         return
 
-    print("Touch an NFC tag")
+    print "Touch an NFC tag"
     clf.connect(rdwr={'on-connect': rdwr_connected_write})
 
 
 def wps_write_password_tag(clf, wait_remove=True):
-    print("Write WPS password token")
+    print "Write WPS password token"
     global write_data, write_wait_remove
     write_wait_remove = wait_remove
     write_data = wpas_get_password_token()
     if write_data == None:
-        print("Could not get WPS password token from wpa_supplicant")
+        print "Could not get WPS password token from wpa_supplicant"
         return
 
-    print("Touch an NFC tag")
+    print "Touch an NFC tag"
     clf.connect(rdwr={'on-connect': rdwr_connected_write})
 
 
@@ -373,11 +373,11 @@
     summary("Tag connected: " + str(tag))
 
     if tag.ndef:
-        print("NDEF tag: " + tag.type)
+        print "NDEF tag: " + tag.type
         try:
-            print(tag.ndef.message.pretty())
-        except Exception as e:
-            print(e)
+            print tag.ndef.message.pretty()
+        except Exception, e:
+            print e
         success = wps_tag_read(tag, not only_one)
         if only_one and success:
             global continue_loop
@@ -393,7 +393,7 @@
     global arg_uuid
     if arg_uuid is None:
         wps_handover_init(llc)
-        print("Exiting llcp_worker thread")
+        print "Exiting llcp_worker thread"
         return
 
     global srv
@@ -405,19 +405,19 @@
 def llcp_startup(clf, llc):
     global arg_uuid
     if arg_uuid:
-        print("Start LLCP server")
+        print "Start LLCP server"
         global srv
         srv = HandoverServer(llc)
         if arg_uuid is "ap":
-            print("Trying to handle WPS handover")
+            print "Trying to handle WPS handover"
             srv.uuid = None
         else:
-            print("Trying to handle WPS handover with AP " + arg_uuid)
+            print "Trying to handle WPS handover with AP " + arg_uuid
             srv.uuid = arg_uuid
     return llc
 
 def llcp_connected(llc):
-    print("P2P LLCP connected")
+    print "P2P LLCP connected"
     global wait_connection
     wait_connection = False
     global arg_uuid
@@ -426,7 +426,7 @@
         srv.start()
     else:
         threading.Thread(target=llcp_worker, args=(llc,)).start()
-    print("llcp_connected returning")
+    print "llcp_connected returning"
     return True
 
 
@@ -482,7 +482,7 @@
 
     try:
         if not clf.open("usb"):
-            print("Could not open connection with an NFC device")
+            print "Could not open connection with an NFC device"
             raise SystemExit
 
         if args.command == "write-config":
@@ -499,7 +499,7 @@
 
         global continue_loop
         while continue_loop:
-            print("Waiting for a tag or peer to be touched")
+            print "Waiting for a tag or peer to be touched"
             wait_connection = True
             try:
                 if not clf.connect(rdwr={'on-connect': rdwr_connected},
@@ -507,8 +507,8 @@
                                          'on-connect': llcp_connected},
                                    terminate=terminate_loop):
                     break
-            except Exception as e:
-                print("clf.connect failed")
+            except Exception, e:
+                print "clf.connect failed"
 
             global srv
             if only_one and srv and srv.success:
diff --git a/wpa_supplicant/gas_query.c b/wpa_supplicant/gas_query.c
index 8e977a3..f4f60c5 100644
--- a/wpa_supplicant/gas_query.c
+++ b/wpa_supplicant/gas_query.c
@@ -272,7 +272,7 @@
 }
 
 
-int pmf_in_use(struct wpa_supplicant *wpa_s, const u8 *addr)
+static int pmf_in_use(struct wpa_supplicant *wpa_s, const u8 *addr)
 {
 	if (wpa_s->current_ssid == NULL ||
 	    wpa_s->wpa_state < WPA_4WAY_HANDSHAKE ||
diff --git a/wpa_supplicant/gas_query.h b/wpa_supplicant/gas_query.h
index d2b4554..982c0f7 100644
--- a/wpa_supplicant/gas_query.h
+++ b/wpa_supplicant/gas_query.h
@@ -19,7 +19,6 @@
 int gas_query_rx(struct gas_query *gas, const u8 *da, const u8 *sa,
 		 const u8 *bssid, u8 categ, const u8 *data, size_t len,
 		 int freq);
-int pmf_in_use(struct wpa_supplicant *wpa_s, const u8 *addr);
 
 /**
  * enum gas_query_result - GAS query result
diff --git a/wpa_supplicant/hidl/1.2/p2p_iface.cpp b/wpa_supplicant/hidl/1.2/p2p_iface.cpp
index 56f8344..4c16743 100644
--- a/wpa_supplicant/hidl/1.2/p2p_iface.cpp
+++ b/wpa_supplicant/hidl/1.2/p2p_iface.cpp
@@ -330,7 +330,7 @@
 
 	if (wpas_p2p_group_add_persistent(
 		wpa_s, wpa_network, 0, 0, 0, 0, ht40, vht,
-		VHT_CHANWIDTH_USE_HT, 0, NULL, 0, 1)) {
+		VHT_CHANWIDTH_USE_HT, NULL, 0, 1)) {
 		ret = -1;
 	}
 
@@ -1048,7 +1048,7 @@
 	int new_pin = wpas_p2p_connect(
 	    wpa_s, peer_address.data(), pin, wps_method, persistent, false,
 	    join_existing_group, false, go_intent_signed, 0, 0, -1, false, ht40,
-	    vht, VHT_CHANWIDTH_USE_HT, 0, nullptr, 0);
+	    vht, VHT_CHANWIDTH_USE_HT, nullptr, 0);
 	if (new_pin < 0) {
 		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
 	}
@@ -1111,7 +1111,7 @@
 	if (ssid == NULL) {
 		if (wpas_p2p_group_add(
 			wpa_s, persistent, 0, 0, ht40, vht,
-			VHT_CHANWIDTH_USE_HT, 0)) {
+			VHT_CHANWIDTH_USE_HT)) {
 			return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
 		} else {
 			return {SupplicantStatusCode::SUCCESS, ""};
@@ -1119,7 +1119,7 @@
 	} else if (ssid->disabled == 2) {
 		if (wpas_p2p_group_add_persistent(
 			wpa_s, ssid, 0, 0, 0, 0, ht40, vht,
-			VHT_CHANWIDTH_USE_HT, 0, NULL, 0, 0)) {
+			VHT_CHANWIDTH_USE_HT, NULL, 0, 0)) {
 			return {SupplicantStatusCode::FAILURE_NETWORK_UNKNOWN,
 				""};
 		} else {
@@ -1183,7 +1183,7 @@
 	}
 	if (wpas_p2p_invite(
 		wpa_s, peer_address.data(), ssid, NULL, 0, 0, ht40, vht,
-		VHT_CHANWIDTH_USE_HT, 0, 0)) {
+		VHT_CHANWIDTH_USE_HT, 0)) {
 		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
 	}
 	return {SupplicantStatusCode::SUCCESS, ""};
@@ -1639,7 +1639,7 @@
 
 		if (wpas_p2p_group_add(
 		    wpa_s, persistent, freq, 0, ht40, vht,
-		    VHT_CHANWIDTH_USE_HT, 0)) {
+		    VHT_CHANWIDTH_USE_HT)) {
 			return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
 		}
 		return {SupplicantStatusCode::SUCCESS, ""};
diff --git a/wpa_supplicant/hs20_supplicant.c b/wpa_supplicant/hs20_supplicant.c
index e81fef1..814d18e 100644
--- a/wpa_supplicant/hs20_supplicant.c
+++ b/wpa_supplicant/hs20_supplicant.c
@@ -96,7 +96,8 @@
 		return;
 	}
 
-	if (wpa_bss_ext_capab(bss, WLAN_EXT_CAPAB_PROXY_ARP))
+	/* Check if Proxy ARP is enabled (2nd byte in the IE) */
+	if (ext_capa[3] & BIT(4))
 		filter |= WPA_DATA_FRAME_FILTER_FLAG_ARP |
 			WPA_DATA_FRAME_FILTER_FLAG_NA;
 
@@ -104,22 +105,15 @@
 }
 
 
-void wpas_hs20_add_indication(struct wpabuf *buf, int pps_mo_id, int ap_release)
+void wpas_hs20_add_indication(struct wpabuf *buf, int pps_mo_id)
 {
-	int release;
 	u8 conf;
 
-	release = (HS20_VERSION >> 4) + 1;
-	if (ap_release > 0 && release > ap_release)
-		release = ap_release;
-	if (release < 2)
-		pps_mo_id = -1;
-
 	wpabuf_put_u8(buf, WLAN_EID_VENDOR_SPECIFIC);
 	wpabuf_put_u8(buf, pps_mo_id >= 0 ? 7 : 5);
 	wpabuf_put_be24(buf, OUI_WFA);
 	wpabuf_put_u8(buf, HS20_INDICATION_OUI_TYPE);
-	conf = (release - 1) << 4;
+	conf = HS20_VERSION;
 	if (pps_mo_id >= 0)
 		conf |= HS20_PPS_MO_ID_PRESENT;
 	wpabuf_put_u8(buf, conf);
@@ -144,21 +138,6 @@
 }
 
 
-int get_hs20_version(struct wpa_bss *bss)
-{
-	const u8 *ie;
-
-	if (!bss)
-		return 0;
-
-	ie = wpa_bss_get_vendor_ie(bss, HS20_IE_VENDOR_TYPE);
-	if (!ie || ie[1] < 5)
-		return 0;
-
-	return ((ie[6] >> 4) & 0x0f) + 1;
-}
-
-
 int is_hs20_network(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
 		    struct wpa_bss *bss)
 {
@@ -432,7 +411,7 @@
 		return;
 	}
 
-	if (lchown(fname, statbuf.st_uid, statbuf.st_gid) < 0) {
+	if (chown(fname, statbuf.st_uid, statbuf.st_gid) < 0) {
 		wpa_printf(MSG_WARNING, "Cannot change the ownership for %s",
 			   fname);
 	}
diff --git a/wpa_supplicant/hs20_supplicant.h b/wpa_supplicant/hs20_supplicant.h
index e43414b..66fc540 100644
--- a/wpa_supplicant/hs20_supplicant.h
+++ b/wpa_supplicant/hs20_supplicant.h
@@ -9,8 +9,7 @@
 #define HS20_SUPPLICANT_H
 
 void hs20_configure_frame_filters(struct wpa_supplicant *wpa_s);
-void wpas_hs20_add_indication(struct wpabuf *buf, int pps_mo_id,
-			      int ap_release);
+void wpas_hs20_add_indication(struct wpabuf *buf, int pps_mo_id);
 void wpas_hs20_add_roam_cons_sel(struct wpabuf *buf,
 				 const struct wpa_ssid *ssid);
 
@@ -21,7 +20,6 @@
 void hs20_parse_rx_hs20_anqp_resp(struct wpa_supplicant *wpa_s,
 				  struct wpa_bss *bss, const u8 *sa,
 				  const u8 *data, size_t slen, u8 dialog_token);
-int get_hs20_version(struct wpa_bss *bss);
 int is_hs20_network(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
 		    struct wpa_bss *bss);
 int hs20_get_pps_mo_id(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
diff --git a/wpa_supplicant/interworking.c b/wpa_supplicant/interworking.c
index c66a09b..ebb3a50 100644
--- a/wpa_supplicant/interworking.c
+++ b/wpa_supplicant/interworking.c
@@ -958,7 +958,6 @@
 			"WPA-EAP WPA-EAP-SHA256" : "WPA-EAP";
 	if (wpa_config_set(ssid, "key_mgmt", key_mgmt, 0) < 0 ||
 	    wpa_config_set(ssid, "proto", "RSN", 0) < 0 ||
-	    wpa_config_set(ssid, "ieee80211w", "1", 0) < 0 ||
 	    wpa_config_set(ssid, "pairwise", "CCMP", 0) < 0)
 		return -1;
 	return 0;
@@ -2626,6 +2625,7 @@
 {
 	struct wpa_bss *bss;
 	int found = 0;
+	const u8 *ie;
 
 	wpa_printf(MSG_DEBUG, "Interworking: next_anqp_fetch - "
 		   "fetch_anqp_in_progress=%d fetch_osu_icon_in_progress=%d",
@@ -2648,7 +2648,8 @@
 	dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) {
 		if (!(bss->caps & IEEE80211_CAP_ESS))
 			continue;
-		if (!wpa_bss_ext_capab(bss, WLAN_EXT_CAPAB_INTERWORKING))
+		ie = wpa_bss_get_ie(bss, WLAN_EID_EXT_CAPAB);
+		if (ie == NULL || ie[1] < 4 || !(ie[5] & 0x80))
 			continue; /* AP does not support Interworking */
 		if (disallowed_bssid(wpa_s, bss->bssid) ||
 		    disallowed_ssid(wpa_s, bss->ssid, bss->ssid_len))
@@ -2981,7 +2982,7 @@
 			MAC2STR(sa));
 		anqp_add_extra(wpa_s, anqp, info_id, pos, slen);
 
-		if (!pmf_in_use(wpa_s, sa)) {
+		if (!wpa_sm_pmf_enabled(wpa_s->wpa)) {
 			wpa_printf(MSG_DEBUG,
 				   "ANQP: Ignore Venue URL since PMF was not enabled");
 			break;
diff --git a/wpa_supplicant/mbo.c b/wpa_supplicant/mbo.c
index bd5020a..5adf61e 100644
--- a/wpa_supplicant/mbo.c
+++ b/wpa_supplicant/mbo.c
@@ -51,19 +51,6 @@
 }
 
 
-const u8 * mbo_get_attr_from_ies(const u8 *ies, size_t ies_len,
-				 enum mbo_attr_id attr)
-{
-	const u8 *mbo_ie;
-
-	mbo_ie = get_vendor_ie(ies, ies_len, MBO_IE_VENDOR_TYPE);
-	if (!mbo_ie)
-		return NULL;
-
-	return mbo_attr_from_mbo_ie(mbo_ie, attr);
-}
-
-
 const u8 * wpas_mbo_get_bss_attr(struct wpa_bss *bss, enum mbo_attr_id attr)
 {
 	const u8 *mbo, *end;
@@ -514,7 +501,7 @@
 
 	if (disallowed_sec && wpa_s->current_bss)
 		wpa_bss_tmp_disallow(wpa_s, wpa_s->current_bss->bssid,
-				     disallowed_sec, 0);
+				     disallowed_sec);
 
 	return;
 fail:
diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c
index e9457f0..38b9fb3 100644
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
@@ -34,8 +34,6 @@
 	wpa_s->current_ssid = NULL;
 	os_free(wpa_s->mesh_rsn);
 	wpa_s->mesh_rsn = NULL;
-	os_free(wpa_s->mesh_params);
-	wpa_s->mesh_params = NULL;
 	/* TODO: leave mesh (stop beacon). This will happen on link down
 	 * anyway, so it's not urgent */
 }
@@ -95,9 +93,6 @@
 			conf->ieee80211w = NO_MGMT_FRAME_PROTECTION;
 	}
 #endif /* CONFIG_IEEE80211W */
-#ifdef CONFIG_OCV
-	conf->ocv = ssid->ocv;
-#endif /* CONFIG_OCV */
 
 	cipher = wpa_pick_pairwise_cipher(ssid->pairwise_cipher, 0);
 	if (cipher < 0 || cipher == WPA_CIPHER_TKIP) {
@@ -152,95 +147,6 @@
 }
 
 
-static int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s)
-{
-	struct hostapd_iface *ifmsh = wpa_s->ifmsh;
-	struct wpa_ssid *ssid = wpa_s->current_ssid;
-	struct hostapd_data *bss = ifmsh->bss[0];
-	static int default_groups[] = { 19, 20, 21, 25, 26, -1 };
-	const char *password;
-	size_t len;
-
-	password = ssid->sae_password;
-	if (!password)
-		password = ssid->passphrase;
-	if (!password) {
-		wpa_printf(MSG_ERROR,
-			   "mesh: Passphrase for SAE not configured");
-		return -1;
-	}
-
-	bss->conf->wpa = ssid->proto;
-	bss->conf->wpa_key_mgmt = ssid->key_mgmt;
-
-	if (wpa_s->conf->sae_groups && wpa_s->conf->sae_groups[0] > 0) {
-		wpas_mesh_copy_groups(bss, wpa_s);
-	} else {
-		bss->conf->sae_groups = os_memdup(default_groups,
-						  sizeof(default_groups));
-		if (!bss->conf->sae_groups)
-			return -1;
-	}
-
-	len = os_strlen(password);
-	bss->conf->ssid.wpa_passphrase = dup_binstr(password, len);
-
-	wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, ifmsh->mconf);
-	return !wpa_s->mesh_rsn ? -1 : 0;
-}
-
-
-static int wpas_mesh_complete(struct wpa_supplicant *wpa_s)
-{
-	struct hostapd_iface *ifmsh = wpa_s->ifmsh;
-	struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params;
-	struct wpa_ssid *ssid = wpa_s->current_ssid;
-	int ret;
-
-	if (!params || !ssid) {
-		wpa_printf(MSG_ERROR, "mesh: %s called without active mesh",
-			   __func__);
-		return -1;
-	}
-
-	if (ifmsh->mconf->security != MESH_CONF_SEC_NONE &&
-	    wpas_mesh_init_rsn(wpa_s)) {
-		wpa_printf(MSG_ERROR,
-			   "mesh: RSN initialization failed - deinit mesh");
-		wpa_supplicant_mesh_deinit(wpa_s);
-		return -1;
-	}
-
-	if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) {
-		wpa_s->pairwise_cipher = wpa_s->mesh_rsn->pairwise_cipher;
-		wpa_s->group_cipher = wpa_s->mesh_rsn->group_cipher;
-		wpa_s->mgmt_group_cipher = wpa_s->mesh_rsn->mgmt_group_cipher;
-	}
-
-	if (ifmsh) {
-		params->ies = ifmsh->mconf->rsn_ie;
-		params->ie_len = ifmsh->mconf->rsn_ie_len;
-		params->basic_rates = ifmsh->basic_rates;
-		params->conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_HT_OP_MODE;
-		params->conf.ht_opmode = ifmsh->bss[0]->iface->ht_op_mode;
-	}
-
-	wpa_msg(wpa_s, MSG_INFO, "joining mesh %s",
-		wpa_ssid_txt(ssid->ssid, ssid->ssid_len));
-	ret = wpa_drv_join_mesh(wpa_s, params);
-	if (ret)
-		wpa_msg(wpa_s, MSG_ERROR, "mesh join error=%d", ret);
-
-	/* hostapd sets the interface down until we associate */
-	wpa_drv_set_operstate(wpa_s, 1);
-
-	if (!ret)
-		wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
-
-	return ret;
-}
-
-
 static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
 				    struct wpa_ssid *ssid,
 				    struct hostapd_freq_params *freq)
@@ -250,6 +156,9 @@
 	struct hostapd_config *conf;
 	struct mesh_conf *mconf;
 	int basic_rates_erp[] = { 10, 20, 55, 60, 110, 120, 240, -1 };
+	static int default_groups[] = { 19, 20, 21, 25, 26, -1 };
+	const char *password;
+	size_t len;
 	int rate_len;
 	int frequency;
 
@@ -299,16 +208,6 @@
 	bss->conf->start_disabled = 1;
 	bss->conf->mesh = MESH_ENABLED;
 	bss->conf->ap_max_inactivity = wpa_s->conf->mesh_max_inactivity;
-
-	if (ieee80211_is_dfs(ssid->frequency, wpa_s->hw.modes,
-			     wpa_s->hw.num_modes) && wpa_s->conf->country[0]) {
-		conf->ieee80211h = 1;
-		conf->ieee80211d = 1;
-		conf->country[0] = wpa_s->conf->country[0];
-		conf->country[1] = wpa_s->conf->country[1];
-		conf->country[2] = ' ';
-	}
-
 	bss->iconf = conf;
 	ifmsh->conf = conf;
 
@@ -332,8 +231,7 @@
 	if (ssid->ht40)
 		conf->secondary_channel = ssid->ht40;
 	if (conf->hw_mode == HOSTAPD_MODE_IEEE80211A && ssid->vht) {
-		if (ssid->max_oper_chwidth != DEFAULT_MAX_OPER_CHWIDTH)
-			conf->vht_oper_chwidth = ssid->max_oper_chwidth;
+		conf->vht_oper_chwidth = ssid->max_oper_chwidth;
 		switch (conf->vht_oper_chwidth) {
 		case VHT_CHANWIDTH_80MHZ:
 		case VHT_CHANWIDTH_80P80MHZ:
@@ -383,15 +281,48 @@
 		conf->basic_rates[rate_len] = -1;
 	}
 
+	if (hostapd_setup_interface(ifmsh)) {
+		wpa_printf(MSG_ERROR,
+			   "Failed to initialize hostapd interface for mesh");
+		return -1;
+	}
+
 	if (wpa_drv_init_mesh(wpa_s)) {
 		wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh in driver");
 		return -1;
 	}
 
-	if (hostapd_setup_interface(ifmsh)) {
-		wpa_printf(MSG_ERROR,
-			   "Failed to initialize hostapd interface for mesh");
-		return -1;
+	if (mconf->security != MESH_CONF_SEC_NONE) {
+		password = ssid->sae_password;
+		if (!password)
+			password = ssid->passphrase;
+		if (!password) {
+			wpa_printf(MSG_ERROR,
+				   "mesh: Passphrase for SAE not configured");
+			goto out_free;
+		}
+
+		bss->conf->wpa = ssid->proto;
+		bss->conf->wpa_key_mgmt = ssid->key_mgmt;
+
+		if (wpa_s->conf->sae_groups &&
+		    wpa_s->conf->sae_groups[0] > 0) {
+			wpas_mesh_copy_groups(bss, wpa_s);
+		} else {
+			bss->conf->sae_groups =
+				os_memdup(default_groups,
+					  sizeof(default_groups));
+			if (!bss->conf->sae_groups)
+				goto out_free;
+		}
+
+		len = os_strlen(password);
+		bss->conf->ssid.wpa_passphrase =
+			dup_binstr(password, len);
+
+		wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, mconf);
+		if (!wpa_s->mesh_rsn)
+			goto out_free;
 	}
 
 	wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf);
@@ -436,13 +367,11 @@
 int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s,
 			     struct wpa_ssid *ssid)
 {
-	struct wpa_driver_mesh_join_params *params = os_zalloc(sizeof(*params));
+	struct wpa_driver_mesh_join_params params;
 	int ret = 0;
 
-	if (!ssid || !ssid->ssid || !ssid->ssid_len || !ssid->frequency ||
-	    !params) {
+	if (!ssid || !ssid->ssid || !ssid->ssid_len || !ssid->frequency) {
 		ret = -ENOENT;
-		os_free(params);
 		goto out;
 	}
 
@@ -452,23 +381,22 @@
 	wpa_s->group_cipher = WPA_CIPHER_NONE;
 	wpa_s->mgmt_group_cipher = 0;
 
-	params->meshid = ssid->ssid;
-	params->meshid_len = ssid->ssid_len;
-	ibss_mesh_setup_freq(wpa_s, ssid, &params->freq);
-	wpa_s->mesh_ht_enabled = !!params->freq.ht_enabled;
-	wpa_s->mesh_vht_enabled = !!params->freq.vht_enabled;
-	if (params->freq.ht_enabled && params->freq.sec_channel_offset)
-		ssid->ht40 = params->freq.sec_channel_offset;
-
+	os_memset(&params, 0, sizeof(params));
+	params.meshid = ssid->ssid;
+	params.meshid_len = ssid->ssid_len;
+	ibss_mesh_setup_freq(wpa_s, ssid, &params.freq);
+	wpa_s->mesh_ht_enabled = !!params.freq.ht_enabled;
+	wpa_s->mesh_vht_enabled = !!params.freq.vht_enabled;
+	if (params.freq.ht_enabled && params.freq.sec_channel_offset)
+		ssid->ht40 = params.freq.sec_channel_offset;
 	if (wpa_s->mesh_vht_enabled) {
 		ssid->vht = 1;
-		ssid->vht_center_freq1 = params->freq.center_freq1;
-		switch (params->freq.bandwidth) {
+		switch (params.freq.bandwidth) {
 		case 80:
-			if (params->freq.center_freq2) {
+			if (params.freq.center_freq2) {
 				ssid->max_oper_chwidth = VHT_CHANWIDTH_80P80MHZ;
 				ssid->vht_center_freq2 =
-					params->freq.center_freq2;
+					params.freq.center_freq2;
 			} else {
 				ssid->max_oper_chwidth = VHT_CHANWIDTH_80MHZ;
 			}
@@ -482,44 +410,67 @@
 		}
 	}
 	if (ssid->beacon_int > 0)
-		params->beacon_int = ssid->beacon_int;
+		params.beacon_int = ssid->beacon_int;
 	else if (wpa_s->conf->beacon_int > 0)
-		params->beacon_int = wpa_s->conf->beacon_int;
+		params.beacon_int = wpa_s->conf->beacon_int;
 	if (ssid->dtim_period > 0)
-		params->dtim_period = ssid->dtim_period;
+		params.dtim_period = ssid->dtim_period;
 	else if (wpa_s->conf->dtim_period > 0)
-		params->dtim_period = wpa_s->conf->dtim_period;
-	params->conf.max_peer_links = wpa_s->conf->max_peer_links;
+		params.dtim_period = wpa_s->conf->dtim_period;
+	params.conf.max_peer_links = wpa_s->conf->max_peer_links;
 	if (ssid->mesh_rssi_threshold < DEFAULT_MESH_RSSI_THRESHOLD) {
-		params->conf.rssi_threshold = ssid->mesh_rssi_threshold;
-		params->conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_RSSI_THRESHOLD;
+		params.conf.rssi_threshold = ssid->mesh_rssi_threshold;
+		params.conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_RSSI_THRESHOLD;
 	}
 
 	if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) {
-		params->flags |= WPA_DRIVER_MESH_FLAG_SAE_AUTH;
-		params->flags |= WPA_DRIVER_MESH_FLAG_AMPE;
+		params.flags |= WPA_DRIVER_MESH_FLAG_SAE_AUTH;
+		params.flags |= WPA_DRIVER_MESH_FLAG_AMPE;
 		wpa_s->conf->user_mpm = 1;
 	}
 
 	if (wpa_s->conf->user_mpm) {
-		params->flags |= WPA_DRIVER_MESH_FLAG_USER_MPM;
-		params->conf.auto_plinks = 0;
+		params.flags |= WPA_DRIVER_MESH_FLAG_USER_MPM;
+		params.conf.auto_plinks = 0;
 	} else {
-		params->flags |= WPA_DRIVER_MESH_FLAG_DRIVER_MPM;
-		params->conf.auto_plinks = 1;
+		params.flags |= WPA_DRIVER_MESH_FLAG_DRIVER_MPM;
+		params.conf.auto_plinks = 1;
 	}
-	params->conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity;
+	params.conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity;
 
-	os_free(wpa_s->mesh_params);
-	wpa_s->mesh_params = params;
-	if (wpa_supplicant_mesh_init(wpa_s, ssid, &params->freq)) {
+	if (wpa_supplicant_mesh_init(wpa_s, ssid, &params.freq)) {
 		wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh");
 		wpa_drv_leave_mesh(wpa_s);
 		ret = -1;
 		goto out;
 	}
 
-	ret = wpas_mesh_complete(wpa_s);
+	if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) {
+		wpa_s->pairwise_cipher = wpa_s->mesh_rsn->pairwise_cipher;
+		wpa_s->group_cipher = wpa_s->mesh_rsn->group_cipher;
+		wpa_s->mgmt_group_cipher = wpa_s->mesh_rsn->mgmt_group_cipher;
+	}
+
+	if (wpa_s->ifmsh) {
+		params.ies = wpa_s->ifmsh->mconf->rsn_ie;
+		params.ie_len = wpa_s->ifmsh->mconf->rsn_ie_len;
+		params.basic_rates = wpa_s->ifmsh->basic_rates;
+		params.conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_HT_OP_MODE;
+		params.conf.ht_opmode = wpa_s->ifmsh->bss[0]->iface->ht_op_mode;
+	}
+
+	wpa_msg(wpa_s, MSG_INFO, "joining mesh %s",
+		wpa_ssid_txt(ssid->ssid, ssid->ssid_len));
+	ret = wpa_drv_join_mesh(wpa_s, &params);
+	if (ret)
+		wpa_msg(wpa_s, MSG_ERROR, "mesh join error=%d", ret);
+
+	/* hostapd sets the interface down until we associate */
+	wpa_drv_set_operstate(wpa_s, 1);
+
+	if (!ret)
+		wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
+
 out:
 	return ret;
 }
diff --git a/wpa_supplicant/mesh_mpm.c b/wpa_supplicant/mesh_mpm.c
index 4485939..d166cfe 100644
--- a/wpa_supplicant/mesh_mpm.c
+++ b/wpa_supplicant/mesh_mpm.c
@@ -12,7 +12,6 @@
 #include "utils/eloop.h"
 #include "common/ieee802_11_defs.h"
 #include "common/hw_features_common.h"
-#include "common/ocv.h"
 #include "ap/hostapd.h"
 #include "ap/sta_info.h"
 #include "ap/ieee802_11.h"
@@ -223,14 +222,13 @@
 	if (!sta)
 		return;
 
-	buf_len = 2 +      /* Category and Action */
-		  2 +      /* capability info */
+	buf_len = 2 +      /* capability info */
 		  2 +      /* AID */
 		  2 + 8 +  /* supported rates */
 		  2 + (32 - 8) +
 		  2 + 32 + /* mesh ID */
 		  2 + 7 +  /* mesh config */
-		  2 + 24 + /* peering management */
+		  2 + 23 + /* peering management */
 		  2 + 96 + /* AMPE */
 		  2 + 16;  /* MIC */
 #ifdef CONFIG_IEEE80211N
@@ -247,11 +245,6 @@
 #endif /* CONFIG_IEEE80211AC */
 	if (type != PLINK_CLOSE)
 		buf_len += conf->rsn_ie_len; /* RSN IE */
-#ifdef CONFIG_OCV
-	/* OCI is included even when the other STA doesn't support OCV */
-	if (type != PLINK_CLOSE && conf->ocv)
-		buf_len += OCV_OCI_EXTENDED_LEN;
-#endif /* CONFIG_OCV */
 
 	buf = wpabuf_alloc(buf_len);
 	if (!buf)
@@ -363,22 +356,6 @@
 	}
 #endif /* CONFIG_IEEE80211AC */
 
-#ifdef CONFIG_OCV
-	if (type != PLINK_CLOSE && conf->ocv) {
-		struct wpa_channel_info ci;
-
-		if (wpa_drv_channel_info(wpa_s, &ci) != 0) {
-			wpa_printf(MSG_WARNING,
-				   "Mesh MPM: Failed to get channel info for OCI element");
-			goto fail;
-		}
-
-		pos = wpabuf_put(buf, OCV_OCI_EXTENDED_LEN);
-		if (ocv_insert_extended_oci(&ci, pos) < 0)
-			goto fail;
-	}
-#endif /* CONFIG_OCV */
-
 	if (ampe && mesh_rsn_protect_frame(wpa_s->mesh_rsn, sta, cat, buf)) {
 		wpa_msg(wpa_s, MSG_INFO,
 			"Mesh MPM: failed to add AMPE and MIC IE");
@@ -721,7 +698,6 @@
 
 #ifdef CONFIG_IEEE80211AC
 	copy_sta_vht_capab(data, sta, elems->vht_capabilities);
-	copy_sta_vht_oper(data, sta, elems->vht_operation);
 	set_sta_vht_opmode(data, sta, elems->vht_opmode_notif);
 #endif /* CONFIG_IEEE80211AC */
 
@@ -1219,56 +1195,6 @@
 			}
 			return;
 		}
-
-#ifdef CONFIG_OCV
-		if (action_field == PLINK_OPEN && elems.rsn_ie) {
-			struct wpa_state_machine *sm = sta->wpa_sm;
-			struct wpa_ie_data data;
-
-			res = wpa_parse_wpa_ie_rsn(elems.rsn_ie - 2,
-						   elems.rsn_ie_len + 2,
-						   &data);
-			if (res) {
-				wpa_printf(MSG_DEBUG,
-					   "Failed to parse RSN IE (res=%d)",
-					   res);
-				wpa_hexdump(MSG_DEBUG, "RSN IE", elems.rsn_ie,
-					    elems.rsn_ie_len);
-				return;
-			}
-
-			wpa_auth_set_ocv(sm, mconf->ocv &&
-					 (data.capabilities &
-					  WPA_CAPABILITY_OCVC));
-		}
-
-		if (action_field != PLINK_CLOSE &&
-		    wpa_auth_uses_ocv(sta->wpa_sm)) {
-			struct wpa_channel_info ci;
-			int tx_chanwidth;
-			int tx_seg1_idx;
-
-			if (wpa_drv_channel_info(wpa_s, &ci) != 0) {
-				wpa_printf(MSG_WARNING,
-					   "MPM: Failed to get channel info to validate received OCI in MPM Confirm");
-				return;
-			}
-
-			if (get_tx_parameters(
-				    sta, channel_width_to_int(ci.chanwidth),
-				    ci.seg1_idx, &tx_chanwidth,
-				    &tx_seg1_idx) < 0)
-				return;
-
-			if (ocv_verify_tx_params(elems.oci, elems.oci_len, &ci,
-						 tx_chanwidth, tx_seg1_idx) !=
-			    0) {
-				wpa_printf(MSG_WARNING, "MPM: %s",
-					   ocv_errorstr);
-				return;
-			}
-		}
-#endif /* CONFIG_OCV */
 	}
 
 	if (sta->plink_state == PLINK_BLOCKED) {
diff --git a/wpa_supplicant/mesh_rsn.c b/wpa_supplicant/mesh_rsn.c
index 04ac747..e74cb16 100644
--- a/wpa_supplicant/mesh_rsn.c
+++ b/wpa_supplicant/mesh_rsn.c
@@ -140,7 +140,7 @@
 
 
 static int __mesh_rsn_auth_init(struct mesh_rsn *rsn, const u8 *addr,
-				enum mfp_options ieee80211w, int ocv)
+				enum mfp_options ieee80211w)
 {
 	struct wpa_auth_config conf;
 	static const struct wpa_auth_callbacks cb = {
@@ -168,9 +168,6 @@
 	if (ieee80211w != NO_MGMT_FRAME_PROTECTION)
 		conf.group_mgmt_cipher = rsn->mgmt_group_cipher;
 #endif /* CONFIG_IEEE80211W */
-#ifdef CONFIG_OCV
-	conf.ocv = ocv;
-#endif /* CONFIG_OCV */
 
 	rsn->auth = wpa_init(addr, &conf, &cb, rsn);
 	if (rsn->auth == NULL) {
@@ -243,7 +240,7 @@
 	mesh_rsn->mgmt_group_cipher = conf->mgmt_group_cipher;
 
 	if (__mesh_rsn_auth_init(mesh_rsn, wpa_s->own_addr,
-				 conf->ieee80211w, conf->ocv) < 0) {
+				 conf->ieee80211w) < 0) {
 		mesh_rsn_deinit(mesh_rsn);
 		os_free(mesh_rsn);
 		return NULL;
diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c
index a7fdab9..30bdb6d 100644
--- a/wpa_supplicant/notify.c
+++ b/wpa_supplicant/notify.c
@@ -149,15 +149,6 @@
 }
 
 
-void wpas_notify_auth_status_code(struct wpa_supplicant *wpa_s)
-{
-	if (wpa_s->p2p_mgmt)
-		return;
-
-	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_AUTH_STATUS_CODE);
-}
-
-
 void wpas_notify_assoc_status_code(struct wpa_supplicant *wpa_s)
 {
 	if (wpa_s->p2p_mgmt)
@@ -175,42 +166,6 @@
 	wpas_hidl_notify_auth_timeout(wpa_s);
 }
 
-void wpas_notify_roam_time(struct wpa_supplicant *wpa_s)
-{
-	if (wpa_s->p2p_mgmt)
-		return;
-
-	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_ROAM_TIME);
-}
-
-
-void wpas_notify_roam_complete(struct wpa_supplicant *wpa_s)
-{
-	if (wpa_s->p2p_mgmt)
-		return;
-
-	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_ROAM_COMPLETE);
-}
-
-
-void wpas_notify_session_length(struct wpa_supplicant *wpa_s)
-{
-	if (wpa_s->p2p_mgmt)
-		return;
-
-	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_SESSION_LENGTH);
-}
-
-
-void wpas_notify_bss_tm_status(struct wpa_supplicant *wpa_s)
-{
-	if (wpa_s->p2p_mgmt)
-		return;
-
-	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_BSS_TM_STATUS);
-}
-
-
 void wpas_notify_network_changed(struct wpa_supplicant *wpa_s)
 {
 	if (wpa_s->p2p_mgmt)
@@ -833,9 +788,6 @@
 		wpas_dbus_signal_p2p_peer_joined(wpa_s, p2p_dev_addr);
 #endif /* CONFIG_P2P */
 
-	/* Register the station */
-	wpas_dbus_register_sta(wpa_s, sta);
-
 	/* Notify listeners a new station has been authorized */
 	wpas_dbus_signal_sta_authorized(wpa_s, sta);
 
@@ -859,8 +811,7 @@
 	/* Notify listeners a station has been deauthorized */
 	wpas_dbus_signal_sta_deauthorized(wpa_s, sta);
 
-	/* Unregister the station */
-	wpas_dbus_unregister_sta(wpa_s, sta);
+	wpas_hidl_notify_ap_sta_deauthorized(wpa_s, sta, p2p_dev_addr);
 }
 
 
diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h
index 2f194ce..703ef8f 100644
--- a/wpa_supplicant/notify.h
+++ b/wpa_supplicant/notify.h
@@ -24,13 +24,8 @@
 			       enum wpa_states new_state,
 			       enum wpa_states old_state);
 void wpas_notify_disconnect_reason(struct wpa_supplicant *wpa_s);
-void wpas_notify_auth_status_code(struct wpa_supplicant *wpa_s);
 void wpas_notify_assoc_status_code(struct wpa_supplicant *wpa_s);
 void wpas_notify_auth_timeout(struct wpa_supplicant *wpa_s);
-void wpas_notify_roam_time(struct wpa_supplicant *wpa_s);
-void wpas_notify_roam_complete(struct wpa_supplicant *wpa_s);
-void wpas_notify_session_length(struct wpa_supplicant *wpa_s);
-void wpas_notify_bss_tm_status(struct wpa_supplicant *wpa_s);
 void wpas_notify_network_changed(struct wpa_supplicant *wpa_s);
 void wpas_notify_ap_scan_changed(struct wpa_supplicant *wpa_s);
 void wpas_notify_bssid_changed(struct wpa_supplicant *wpa_s);
diff --git a/wpa_supplicant/op_classes.c b/wpa_supplicant/op_classes.c
index 947917b..d23b009 100644
--- a/wpa_supplicant/op_classes.c
+++ b/wpa_supplicant/op_classes.c
@@ -208,78 +208,17 @@
 
 
 static int wpas_op_class_supported(struct wpa_supplicant *wpa_s,
-				   struct wpa_ssid *ssid,
 				   const struct oper_class_map *op_class)
 {
 	int chan;
 	size_t i;
 	struct hostapd_hw_modes *mode;
 	int found;
-	int z;
-	int freq2 = 0;
-	int freq5 = 0;
 
 	mode = get_mode(wpa_s->hw.modes, wpa_s->hw.num_modes, op_class->mode);
 	if (!mode)
 		return 0;
 
-	/* If we are configured to disable certain things, take that into
-	 * account here. */
-	if (ssid->freq_list && ssid->freq_list[0]) {
-		for (z = 0; ; z++) {
-			int f = ssid->freq_list[z];
-
-			if (f == 0)
-				break; /* end of list */
-			if (f > 4000 && f < 6000)
-				freq5 = 1;
-			else if (f > 2400 && f < 2500)
-				freq2 = 1;
-		}
-	} else {
-		/* No frequencies specified, can use anything hardware supports.
-		 */
-		freq2 = freq5 = 1;
-	}
-
-	if (op_class->op_class >= 115 && op_class->op_class <= 130 && !freq5)
-		return 0;
-	if (op_class->op_class >= 81 && op_class->op_class <= 84 && !freq2)
-		return 0;
-
-#ifdef CONFIG_HT_OVERRIDES
-	if (ssid->disable_ht) {
-		switch (op_class->op_class) {
-		case 83:
-		case 84:
-		case 104:
-		case 105:
-		case 116:
-		case 117:
-		case 119:
-		case 120:
-		case 122:
-		case 123:
-		case 126:
-		case 127:
-		case 128:
-		case 129:
-		case 130:
-			/* Disable >= 40 MHz channels if HT is disabled */
-			return 0;
-		}
-	}
-#endif /* CONFIG_HT_OVERRIDES */
-
-#ifdef CONFIG_VHT_OVERRIDES
-	if (ssid->disable_vht) {
-		if (op_class->op_class >= 128 && op_class->op_class <= 130) {
-			/* Disable >= 80 MHz channels if VHT is disabled */
-			return 0;
-		}
-	}
-#endif /* CONFIG_VHT_OVERRIDES */
-
 	if (op_class->op_class == 128) {
 		u8 channels[] = { 42, 58, 106, 122, 138, 155 };
 
@@ -334,9 +273,8 @@
 }
 
 
-size_t wpas_supp_op_class_ie(struct wpa_supplicant *wpa_s,
-			     struct wpa_ssid *ssid,
-			     int freq, u8 *pos, size_t len)
+size_t wpas_supp_op_class_ie(struct wpa_supplicant *wpa_s, int freq, u8 *pos,
+			      size_t len)
 {
 	struct wpabuf *buf;
 	u8 op, current, chan;
@@ -366,7 +304,7 @@
 	wpabuf_put_u8(buf, current);
 
 	for (op = 0; global_op_class[op].op_class; op++) {
-		if (wpas_op_class_supported(wpa_s, ssid, &global_op_class[op]))
+		if (wpas_op_class_supported(wpa_s, &global_op_class[op]))
 			wpabuf_put_u8(buf, global_op_class[op].op_class);
 	}
 
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index 78011c6..3626ea3 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -1912,7 +1912,6 @@
 	ssid->vht = params->vht;
 	ssid->max_oper_chwidth = params->max_oper_chwidth;
 	ssid->vht_center_freq2 = params->vht_center_freq2;
-	ssid->he = params->he;
 	ssid->ssid = os_zalloc(params->ssid_len + 1);
 	if (ssid->ssid) {
 		os_memcpy(ssid->ssid, params->ssid, params->ssid_len);
@@ -2077,12 +2076,16 @@
 	}
 
 	if (wpa_s->conf->p2p_interface_random_mac_addr) {
-		random_mac_addr(wpa_s->pending_interface_addr);
-		wpa_printf(MSG_DEBUG, "P2P: Generate random MAC address " MACSTR
-			   " for the group",
-			   MAC2STR(wpa_s->pending_interface_addr));
+		if (random_mac_addr(wpa_s->pending_interface_addr) < 0) {
+			wpa_printf(MSG_ERROR, "P2P: Failed to generate random MAC address "
+					      "for the group interface");
+			return -1;
+		}
+		wpa_printf(MSG_DEBUG, "P2P: Generate random MAC address " MACSTR " for the group",
+			MAC2STR(wpa_s->pending_interface_addr));
 	}
 
+
 	if (force_ifname[0]) {
 		wpa_printf(MSG_DEBUG, "P2P: Driver forced interface name %s",
 			   force_ifname);
@@ -2162,26 +2165,22 @@
 	wpas_p2p_clone_config(group_wpa_s, wpa_s);
 
 	if (wpa_s->conf->p2p_interface_random_mac_addr) {
-		if (wpa_drv_set_mac_addr(group_wpa_s,
-					 wpa_s->pending_interface_addr) < 0) {
+		if (wpa_drv_set_mac_addr(group_wpa_s, wpa_s->pending_interface_addr) < 0) {
 			wpa_msg(group_wpa_s, MSG_INFO,
 				"Failed to set random MAC address");
-			wpa_supplicant_remove_iface(wpa_s->global, group_wpa_s,
-						    0);
+			wpa_supplicant_remove_iface(wpa_s->global, group_wpa_s, 0);
 			return NULL;
 		}
 
 		if (wpa_supplicant_update_mac_addr(group_wpa_s) < 0) {
 			wpa_msg(group_wpa_s, MSG_INFO,
 				"Could not update MAC address information");
-			wpa_supplicant_remove_iface(wpa_s->global, group_wpa_s,
-						    0);
+			wpa_supplicant_remove_iface(wpa_s->global, group_wpa_s, 0);
 			return NULL;
 		}
 
-		wpa_printf(MSG_DEBUG, "P2P: Using random MAC address " MACSTR
-			   " for the group",
-			   MAC2STR(wpa_s->pending_interface_addr));
+		wpa_printf(MSG_DEBUG, "P2P: Using random MAC address " MACSTR " for the group",
+			MAC2STR(wpa_s->pending_interface_addr));
 	}
 
 	return group_wpa_s;
@@ -3089,7 +3088,7 @@
 					       MAC2STR(sa), s->id);
 			}
 			wpas_p2p_group_add_persistent(
-				wpa_s, s, go, 0, op_freq, 0, 0, 0, 0, 0, NULL,
+				wpa_s, s, go, 0, op_freq, 0, 0, 0, 0, NULL,
 				go ? P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE : 0,
 				1);
 		} else if (bssid) {
@@ -3315,7 +3314,6 @@
 				      wpa_s->p2p_go_vht_center_freq2,
 				      wpa_s->p2p_go_ht40, wpa_s->p2p_go_vht,
 				      wpa_s->p2p_go_max_oper_chwidth,
-				      wpa_s->p2p_go_he,
 				      channels,
 				      ssid->mode == WPAS_MODE_P2P_GO ?
 				      P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE :
@@ -3960,10 +3958,6 @@
 
 		/* Remove stale persistent group */
 		if (s->mode != WPAS_MODE_P2P_GO || s->num_p2p_clients <= 1) {
-			wpa_dbg(wpa_s, MSG_DEBUG,
-				"P2P: Remove stale persistent group id=%d",
-				s->id);
-			wpas_notify_persistent_group_removed(wpa_s, s);
 			wpa_config_remove_network(wpa_s->conf, s->id);
 			save_config = 1;
 			continue;
@@ -4087,11 +4081,6 @@
 
 		if (persistent_go && !persistent_go->num_p2p_clients) {
 			/* remove empty persistent GO */
-			wpa_dbg(wpa_s, MSG_DEBUG,
-				"P2P: Remove empty persistent group id=%d",
-				persistent_go->id);
-			wpas_notify_persistent_group_removed(wpa_s,
-							     persistent_go);
 			wpa_config_remove_network(wpa_s->conf,
 						  persistent_go->id);
 		}
@@ -4132,10 +4121,6 @@
 		/* Remove stale persistent group */
 		if (stale->mode != WPAS_MODE_P2P_GO ||
 		    stale->num_p2p_clients <= 1) {
-			wpa_dbg(wpa_s, MSG_DEBUG,
-				"P2P: Remove stale persistent group id=%d",
-				stale->id);
-			wpas_notify_persistent_group_removed(wpa_s, stale);
 			wpa_config_remove_network(wpa_s->conf, stale->id);
 		} else {
 			size_t i;
@@ -4168,11 +4153,6 @@
 		if (persistent_go && s != persistent_go &&
 		    !persistent_go->num_p2p_clients) {
 			/* remove empty persistent GO */
-			wpa_dbg(wpa_s, MSG_DEBUG,
-				"P2P: Remove empty persistent group id=%d",
-				persistent_go->id);
-			wpas_notify_persistent_group_removed(wpa_s,
-							     persistent_go);
 			wpa_config_remove_network(wpa_s->conf,
 						  persistent_go->id);
 			/* Save config */
@@ -4225,14 +4205,13 @@
 			if (response_done && persistent_go) {
 				wpas_p2p_group_add_persistent(
 					wpa_s, persistent_go,
-					0, 0, freq, 0, 0, 0, 0, 0, NULL,
+					0, 0, freq, 0, 0, 0, 0, NULL,
 					persistent_go->mode ==
 					WPAS_MODE_P2P_GO ?
 					P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE :
 					0, 0);
 			} else if (response_done) {
-				wpas_p2p_group_add(wpa_s, 1, freq,
-						   0, 0, 0, 0, 0);
+				wpas_p2p_group_add(wpa_s, 1, freq, 0, 0, 0, 0);
 			}
 
 			if (passwd_id == DEV_PW_P2PS_DEFAULT) {
@@ -4281,10 +4260,6 @@
 
 	if (persistent_go && !persistent_go->num_p2p_clients) {
 		/* remove empty persistent GO */
-		wpa_dbg(wpa_s, MSG_DEBUG,
-			"P2P: Remove empty persistent group id=%d",
-			persistent_go->id);
-		wpas_notify_persistent_group_removed(wpa_s, persistent_go);
 		wpa_config_remove_network(wpa_s->conf, persistent_go->id);
 	}
 
@@ -4348,11 +4323,11 @@
 
 	if (persistent_go) {
 		wpas_p2p_group_add_persistent(
-			wpa_s, persistent_go, 0, 0, 0, 0, 0, 0, 0, 0, NULL,
+			wpa_s, persistent_go, 0, 0, 0, 0, 0, 0, 0, NULL,
 			persistent_go->mode == WPAS_MODE_P2P_GO ?
 			P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE : 0, 0);
 	} else {
-		wpas_p2p_group_add(wpa_s, 1, freq, 0, 0, 0, 0, 0);
+		wpas_p2p_group_add(wpa_s, 1, freq, 0, 0, 0, 0);
 	}
 
 	return 1;
@@ -4416,6 +4391,7 @@
 	return 0;
 }
 
+
 /**
  * wpas_p2p_init - Initialize P2P module for %wpa_supplicant
  * @global: Pointer to global data from wpa_supplicant_init()
@@ -4506,10 +4482,7 @@
 		 * channel.
 		 */
 		if (p2p_config_get_random_social(&p2p, &p2p.reg_class,
-						 &p2p.channel,
-						 &global->p2p_go_avoid_freq,
-						 &global->p2p_disallow_freq) !=
-		    0) {
+						 &p2p.channel) != 0) {
 			wpa_printf(MSG_INFO,
 				   "P2P: No social channels supported by the driver - do not enable P2P");
 			return 0;
@@ -4534,14 +4507,10 @@
 		 * other preference is indicated.
 		 */
 		if (p2p_config_get_random_social(&p2p, &p2p.op_reg_class,
-						 &p2p.op_channel, NULL,
-						 NULL) != 0) {
-			wpa_printf(MSG_INFO,
+						 &p2p.op_channel) != 0) {
+			wpa_printf(MSG_ERROR,
 				   "P2P: Failed to select random social channel as operation channel");
-			p2p.op_reg_class = 0;
-			p2p.op_channel = 0;
-			/* This will be overridden during group setup in
-			 * p2p_prepare_channel(), so allow setup to continue. */
+			return -1;
 		}
 		p2p.cfg_op_channel = 0;
 		wpa_printf(MSG_DEBUG, "P2P: Random operating channel: "
@@ -4934,7 +4903,6 @@
 					 wpa_s->p2p_go_ht40,
 					 wpa_s->p2p_go_vht,
 					 wpa_s->p2p_go_max_oper_chwidth,
-					 wpa_s->p2p_go_he,
 					 NULL, 0);
 			return;
 		}
@@ -5232,18 +5200,17 @@
 		os_memcpy(group->p2p_pin, wpa_s->p2p_pin,
 			  sizeof(group->p2p_pin));
 		group->p2p_wps_method = wpa_s->p2p_wps_method;
+	} else {
+		/*
+		 * Need to mark the current interface for p2p_group_formation
+		 * when a separate group interface is not used. This is needed
+		 * to allow p2p_cancel stop a pending p2p_connect-join.
+		 * wpas_p2p_init_group_interface() addresses this for the case
+		 * where a separate group interface is used.
+		 */
+		wpa_s->global->p2p_group_formation = wpa_s;
 	}
 
-	/*
-	 * Need to mark the current interface for p2p_group_formation
-	 * when a separate group interface is not used. This is needed
-	 * to allow p2p_cancel stop a pending p2p_connect-join.
-	 * wpas_p2p_init_group_interface() addresses this for the case
-	 * where a separate group interface is used.
-	 */
-	if (group == wpa_s->parent)
-		wpa_s->global->p2p_group_formation = group;
-
 	group->p2p_in_provisioning = 1;
 	group->p2p_fallback_to_go_neg = wpa_s->p2p_fallback_to_go_neg;
 
@@ -5483,7 +5450,7 @@
 		     int persistent_group, int auto_join, int join, int auth,
 		     int go_intent, int freq, unsigned int vht_center_freq2,
 		     int persistent_id, int pd, int ht40, int vht,
-		     unsigned int vht_chwidth, int he, const u8 *group_ssid,
+		     unsigned int vht_chwidth, const u8 *group_ssid,
 		     size_t group_ssid_len)
 {
 	int force_freq = 0, pref_freq = 0;
@@ -5528,7 +5495,6 @@
 	wpa_s->p2p_go_vht = !!vht;
 	wpa_s->p2p_go_vht_center_freq2 = vht_center_freq2;
 	wpa_s->p2p_go_max_oper_chwidth = vht_chwidth;
-	wpa_s->p2p_go_he = !!he;
 
 	if (pin)
 		os_strlcpy(wpa_s->p2p_pin, pin, sizeof(wpa_s->p2p_pin));
@@ -5952,7 +5918,7 @@
 static int wpas_p2p_init_go_params(struct wpa_supplicant *wpa_s,
 				   struct p2p_go_neg_results *params,
 				   int freq, int vht_center_freq2, int ht40,
-				   int vht, int max_oper_chwidth, int he,
+				   int vht, int max_oper_chwidth,
 				   const struct p2p_channels *channels)
 {
 	struct wpa_used_freq_data *freqs;
@@ -5965,7 +5931,6 @@
 	params->role_go = 1;
 	params->ht40 = ht40;
 	params->vht = vht;
-	params->he = he;
 	params->max_oper_chwidth = max_oper_chwidth;
 	params->vht_center_freq2 = vht_center_freq2;
 
@@ -6322,7 +6287,7 @@
  */
 int wpas_p2p_group_add(struct wpa_supplicant *wpa_s, int persistent_group,
 		       int freq, int vht_center_freq2, int ht40, int vht,
-		       int max_oper_chwidth, int he)
+		       int max_oper_chwidth)
 {
 	struct p2p_go_neg_results params;
 
@@ -6343,7 +6308,7 @@
 	}
 
 	if (wpas_p2p_init_go_params(wpa_s, &params, freq, vht_center_freq2,
-				    ht40, vht, max_oper_chwidth, he, NULL))
+				    ht40, vht, max_oper_chwidth, NULL))
 		return -1;
 
 	p2p_go_params(wpa_s->global->p2p, &params);
@@ -6422,7 +6387,7 @@
 				  struct wpa_ssid *ssid, int addr_allocated,
 				  int force_freq, int neg_freq,
 				  int vht_center_freq2, int ht40,
-				  int vht, int max_oper_chwidth, int he,
+				  int vht, int max_oper_chwidth,
 				  const struct p2p_channels *channels,
 				  int connection_timeout, int force_scan)
 {
@@ -6498,7 +6463,7 @@
 	}
 
 	if (wpas_p2p_init_go_params(wpa_s, &params, freq, vht_center_freq2,
-				    ht40, vht, max_oper_chwidth, he, channels))
+				    ht40, vht, max_oper_chwidth, channels))
 		return -1;
 
 	params.role_go = 1;
@@ -7050,7 +7015,7 @@
 int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
 		    struct wpa_ssid *ssid, const u8 *go_dev_addr, int freq,
 		    int vht_center_freq2, int ht40, int vht, int max_chwidth,
-		    int pref_freq, int he)
+		    int pref_freq)
 {
 	enum p2p_invite_role role;
 	u8 *bssid = NULL;
@@ -7068,7 +7033,6 @@
 	wpa_s->p2p_persistent_go_freq = freq;
 	wpa_s->p2p_go_ht40 = !!ht40;
 	wpa_s->p2p_go_vht = !!vht;
-	wpa_s->p2p_go_he = !!he;
 	wpa_s->p2p_go_max_oper_chwidth = max_chwidth;
 	wpa_s->p2p_go_vht_center_freq2 = vht_center_freq2;
 	if (ssid->mode == WPAS_MODE_P2P_GO) {
@@ -8091,8 +8055,7 @@
 			 wpa_s->p2p_pd_before_go_neg,
 			 wpa_s->p2p_go_ht40,
 			 wpa_s->p2p_go_vht,
-			 wpa_s->p2p_go_max_oper_chwidth,
-			 wpa_s->p2p_go_he, NULL, 0);
+			 wpa_s->p2p_go_max_oper_chwidth, NULL, 0);
 	return ret;
 }
 
@@ -8628,7 +8591,6 @@
 				WPS_NFC, 0, 0, 1, 0, wpa_s->conf->p2p_go_intent,
 				params->go_freq, wpa_s->p2p_go_vht_center_freq2,
 				-1, 0, 1, 1, wpa_s->p2p_go_max_oper_chwidth,
-				wpa_s->p2p_go_he,
 				params->go_ssid_len ? params->go_ssid : NULL,
 				params->go_ssid_len);
 }
@@ -8708,7 +8670,7 @@
 				WPS_NFC, 0, 0, 0, 0, wpa_s->conf->p2p_go_intent,
 				forced_freq, wpa_s->p2p_go_vht_center_freq2,
 				-1, 0, 1, 1, wpa_s->p2p_go_max_oper_chwidth,
-				wpa_s->p2p_go_he, NULL, 0);
+				NULL, 0);
 }
 
 
@@ -8724,7 +8686,7 @@
 			       WPS_NFC, 0, 0, 0, 1, wpa_s->conf->p2p_go_intent,
 			       forced_freq, wpa_s->p2p_go_vht_center_freq2,
 			       -1, 0, 1, 1, wpa_s->p2p_go_max_oper_chwidth,
-			       wpa_s->p2p_go_he, NULL, 0);
+			       NULL, 0);
 	if (res)
 		return res;
 
@@ -9109,7 +9071,7 @@
 	 * TODO: This function may not always work correctly. For example,
 	 * when we have a running GO and a BSS on a DFS channel.
 	 */
-	if (wpas_p2p_init_go_params(wpa_s, &params, 0, 0, 0, 0, 0, 0, NULL)) {
+	if (wpas_p2p_init_go_params(wpa_s, &params, 0, 0, 0, 0, 0, NULL)) {
 		wpa_dbg(wpa_s, MSG_DEBUG,
 			"P2P CSA: Failed to select new frequency for GO");
 		return -1;
@@ -9221,7 +9183,7 @@
 	wpa_supplicant_ap_deinit(wpa_s);
 
 	/* Reselect the GO frequency */
-	if (wpas_p2p_init_go_params(wpa_s, &params, 0, 0, 0, 0, 0, 0, NULL)) {
+	if (wpas_p2p_init_go_params(wpa_s, &params, 0, 0, 0, 0, 0, NULL)) {
 		wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Failed to reselect freq");
 		wpas_p2p_group_delete(wpa_s,
 				      P2P_GROUP_REMOVAL_GO_LEAVE_CHANNEL);
diff --git a/wpa_supplicant/p2p_supplicant.h b/wpa_supplicant/p2p_supplicant.h
index 24ec2ca..0a08a88 100644
--- a/wpa_supplicant/p2p_supplicant.h
+++ b/wpa_supplicant/p2p_supplicant.h
@@ -37,18 +37,18 @@
 		     int persistent_group, int auto_join, int join, int auth,
 		     int go_intent, int freq, unsigned int vht_center_freq2,
 		     int persistent_id, int pd, int ht40, int vht,
-		     unsigned int vht_chwidth, int he, const u8 *group_ssid,
+		     unsigned int vht_chwidth, const u8 *group_ssid,
 		     size_t group_ssid_len);
 int wpas_p2p_handle_frequency_conflicts(struct wpa_supplicant *wpa_s,
                                           int freq, struct wpa_ssid *ssid);
 int wpas_p2p_group_add(struct wpa_supplicant *wpa_s, int persistent_group,
 		       int freq, int vht_center_freq2, int ht40, int vht,
-		       int max_oper_chwidth, int he);
+		       int max_oper_chwidth);
 int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s,
 				  struct wpa_ssid *ssid, int addr_allocated,
 				  int force_freq, int neg_freq,
 				  int vht_center_freq2, int ht40,
-				  int vht, int max_oper_chwidth, int he,
+				  int vht, int max_oper_chwidth,
 				  const struct p2p_channels *channels,
 				  int connection_timeout, int force_scan);
 struct p2p_group * wpas_p2p_group_init(struct wpa_supplicant *wpa_s,
@@ -117,7 +117,7 @@
 int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
 		    struct wpa_ssid *ssid, const u8 *go_dev_addr, int freq,
 		    int vht_center_freq2, int ht40, int vht,
-		    int max_oper_chwidth, int pref_freq, int he);
+		    int max_oper_chwidth, int pref_freq);
 int wpas_p2p_invite_group(struct wpa_supplicant *wpa_s, const char *ifname,
 			  const u8 *peer_addr, const u8 *go_dev_addr);
 int wpas_p2p_presence_req(struct wpa_supplicant *wpa_s, u32 duration1,
diff --git a/wpa_supplicant/rrm.c b/wpa_supplicant/rrm.c
index ab5e6db..f4fbfa7 100644
--- a/wpa_supplicant/rrm.c
+++ b/wpa_supplicant/rrm.c
@@ -392,66 +392,17 @@
 }
 
 
-static int wpas_rrm_beacon_rep_update_last_frame(u8 *pos, size_t len)
-{
-	struct rrm_measurement_report_element *msr_rep;
-	u8 *end = pos + len;
-	u8 *msr_rep_end;
-
-	while (end - pos >= (int) sizeof(*msr_rep)) {
-		msr_rep = (struct rrm_measurement_report_element *) pos;
-		msr_rep_end = pos + msr_rep->len + 2;
-
-		if (msr_rep->eid != WLAN_EID_MEASURE_REPORT ||
-		    msr_rep_end > end) {
-			/* Should not happen. This indicates a bug. */
-			wpa_printf(MSG_ERROR,
-				   "RRM: non-measurement report element in measurement report frame");
-			return -1;
-		}
-
-		if (msr_rep->type == MEASURE_TYPE_BEACON) {
-			struct rrm_measurement_beacon_report *rep;
-			u8 *subelem;
-
-			rep = (struct rrm_measurement_beacon_report *)
-				msr_rep->variable;
-			subelem = rep->variable;
-			while (subelem + 2 < msr_rep_end &&
-			       subelem[0] !=
-			       WLAN_BEACON_REPORT_SUBELEM_LAST_INDICATION)
-				subelem += 2 + subelem[1];
-
-			if (subelem + 2 < msr_rep_end &&
-			    subelem[0] ==
-			    WLAN_BEACON_REPORT_SUBELEM_LAST_INDICATION &&
-			    subelem[1] == 1 &&
-			    subelem +
-			    BEACON_REPORT_LAST_INDICATION_SUBELEM_LEN <= end)
-				subelem[2] = 1;
-		}
-
-		pos += pos[1] + 2;
-	}
-
-	return 0;
-}
-
-
 static void wpas_rrm_send_msr_report(struct wpa_supplicant *wpa_s,
 				     struct wpabuf *buf)
 {
 	int len = wpabuf_len(buf);
-	u8 *pos = wpabuf_mhead_u8(buf), *next = pos;
+	const u8 *pos = wpabuf_head_u8(buf), *next = pos;
 
 #define MPDU_REPORT_LEN (int) (IEEE80211_MAX_MMPDU_SIZE - IEEE80211_HDRLEN - 3)
 
 	while (len) {
 		int send_len = (len > MPDU_REPORT_LEN) ? next - pos : len;
 
-		if (send_len == len)
-			wpas_rrm_beacon_rep_update_last_frame(pos, len);
-
 		if (send_len == len ||
 		    (send_len + next[1] + 2) > MPDU_REPORT_LEN) {
 			wpas_rrm_send_msr_report_mpdu(wpa_s, pos, send_len);
@@ -756,17 +707,15 @@
 static int wpas_beacon_rep_add_frame_body(struct bitfield *eids,
 					  enum beacon_report_detail detail,
 					  struct wpa_bss *bss, u8 *buf,
-					  size_t buf_len, u8 **ies_buf,
-					  size_t *ie_len, int add_fixed)
+					  size_t buf_len)
 {
-	u8 *ies = *ies_buf;
-	size_t ies_len = *ie_len;
+	u8 *ies = (u8 *) (bss + 1);
+	size_t ies_len = bss->ie_len ? bss->ie_len : bss->beacon_ie_len;
 	u8 *pos = buf;
 	int rem_len;
 
 	rem_len = 255 - sizeof(struct rrm_measurement_beacon_report) -
-		sizeof(struct rrm_measurement_report_element) - 2 -
-		REPORTED_FRAME_BODY_SUBELEM_LEN;
+		sizeof(struct rrm_measurement_report_element) - 2;
 
 	if (detail > BEACON_REPORT_DETAIL_ALL_FIELDS_AND_ELEMENTS) {
 		wpa_printf(MSG_DEBUG,
@@ -782,21 +731,18 @@
 	 * Minimal frame body subelement size: EID(1) + length(1) + TSF(8) +
 	 * beacon interval(2) + capabilities(2) = 14 bytes
 	 */
-	if (add_fixed && buf_len < 14)
-		return -1;
+	if (buf_len < 14)
+		return 0;
 
 	*pos++ = WLAN_BEACON_REPORT_SUBELEM_FRAME_BODY;
 	/* The length will be filled later */
 	pos++;
-
-	if (add_fixed) {
-		WPA_PUT_LE64(pos, bss->tsf);
-		pos += sizeof(bss->tsf);
-		WPA_PUT_LE16(pos, bss->beacon_int);
-		pos += 2;
-		WPA_PUT_LE16(pos, bss->caps);
-		pos += 2;
-	}
+	WPA_PUT_LE64(pos, bss->tsf);
+	pos += sizeof(bss->tsf);
+	WPA_PUT_LE16(pos, bss->beacon_int);
+	pos += 2;
+	WPA_PUT_LE16(pos, bss->caps);
+	pos += 2;
 
 	rem_len -= pos - buf;
 
@@ -811,7 +757,15 @@
 	while (ies_len > 2 && 2U + ies[1] <= ies_len && rem_len > 0) {
 		if (detail == BEACON_REPORT_DETAIL_ALL_FIELDS_AND_ELEMENTS ||
 		    (eids && bitfield_is_set(eids, ies[0]))) {
-			u8 elen = ies[1];
+			u8 eid = ies[0], elen = ies[1];
+
+			if ((eid == WLAN_EID_TIM || eid == WLAN_EID_RSN) &&
+			    elen > 4)
+				elen = 4;
+			/*
+			 * TODO: Truncate IBSS DFS element as described in
+			 * IEEE Std 802.11-2016, 9.4.2.22.7.
+			 */
 
 			if (2 + elen > buf + buf_len - pos ||
 			    2 + elen > rem_len)
@@ -828,91 +782,22 @@
 		ies += 2 + ies[1];
 	}
 
-	*ie_len = ies_len;
-	*ies_buf = ies;
-
 	/* Now the length is known */
 	buf[1] = pos - buf - 2;
 	return pos - buf;
 }
 
 
-static int wpas_add_beacon_rep_elem(struct beacon_rep_data *data,
-				    struct wpa_bss *bss,
-				    struct wpabuf **wpa_buf,
-				    struct rrm_measurement_beacon_report *rep,
-				    u8 **ie, size_t *ie_len, u8 idx)
-{
-	int ret;
-	u8 *buf, *pos;
-	u32 subelems_len = REPORTED_FRAME_BODY_SUBELEM_LEN +
-		(data->last_indication ?
-		 BEACON_REPORT_LAST_INDICATION_SUBELEM_LEN : 0);
-
-	/* Maximum element length: Beacon Report element + Reported Frame Body
-	 * subelement + all IEs of the reported Beacon frame + Reported Frame
-	 * Body Fragment ID subelement */
-	buf = os_malloc(sizeof(*rep) + 14 + *ie_len + subelems_len);
-	if (!buf)
-		return -1;
-
-	os_memcpy(buf, rep, sizeof(*rep));
-
-	ret = wpas_beacon_rep_add_frame_body(data->eids, data->report_detail,
-					     bss, buf + sizeof(*rep),
-					     14 + *ie_len, ie, ie_len,
-					     idx == 0);
-	if (ret < 0)
-		goto out;
-
-	pos = buf + ret + sizeof(*rep);
-	pos[0] = WLAN_BEACON_REPORT_SUBELEM_FRAME_BODY_FRAGMENT_ID;
-	pos[1] = 2;
-
-	/*
-	 * Only one Beacon Report Measurement is supported at a time, so
-	 * the Beacon Report ID can always be set to 1.
-	 */
-	pos[2] = 1;
-
-	/* Fragment ID Number (bits 0..6) and More Frame Body Fragments (bit 7)
- */
-	pos[3] = idx;
-	if (data->report_detail != BEACON_REPORT_DETAIL_NONE && *ie_len)
-		pos[3] |= REPORTED_FRAME_BODY_MORE_FRAGMENTS;
-	else
-		pos[3] &= ~REPORTED_FRAME_BODY_MORE_FRAGMENTS;
-
-	pos += REPORTED_FRAME_BODY_SUBELEM_LEN;
-
-	if (data->last_indication) {
-		pos[0] = WLAN_BEACON_REPORT_SUBELEM_LAST_INDICATION;
-		pos[1] = 1;
-
-		/* This field will be updated later if this is the last frame */
-		pos[2] = 0;
-	}
-
-	ret = wpas_rrm_report_elem(wpa_buf, data->token,
-				   MEASUREMENT_REPORT_MODE_ACCEPT,
-				   MEASURE_TYPE_BEACON, buf,
-				   ret + sizeof(*rep) + subelems_len);
-out:
-	os_free(buf);
-	return ret;
-}
-
-
 static int wpas_add_beacon_rep(struct wpa_supplicant *wpa_s,
 			       struct wpabuf **wpa_buf, struct wpa_bss *bss,
 			       u64 start, u64 parent_tsf)
 {
 	struct beacon_rep_data *data = &wpa_s->beacon_rep_data;
-	u8 *ies = (u8 *) (bss + 1);
-	u8 *pos = ies;
-	size_t ies_len = bss->ie_len ? bss->ie_len : bss->beacon_ie_len;
-	struct rrm_measurement_beacon_report rep;
-	u8 idx = 0;
+	u8 *ie = (u8 *) (bss + 1);
+	size_t ie_len = bss->ie_len + bss->beacon_ie_len;
+	int ret;
+	u8 *buf;
+	struct rrm_measurement_beacon_report *rep;
 
 	if (os_memcmp(data->bssid, broadcast_ether_addr, ETH_ALEN) != 0 &&
 	    os_memcmp(data->bssid, bss->bssid, ETH_ALEN) != 0)
@@ -923,29 +808,39 @@
 	     os_memcmp(data->ssid, bss->ssid, bss->ssid_len) != 0))
 		return 0;
 
-	if (wpas_get_op_chan_phy(bss->freq, ies, ies_len, &rep.op_class,
-				 &rep.channel, &rep.report_info) < 0)
-		return 0;
+	/* Maximum element length: beacon report element + reported frame body
+	 * subelement + all IEs of the reported beacon */
+	buf = os_malloc(sizeof(*rep) + 14 + ie_len);
+	if (!buf)
+		return -1;
 
-	rep.start_time = host_to_le64(start);
-	rep.duration = host_to_le16(data->scan_params.duration);
-	rep.rcpi = rssi_to_rcpi(bss->level);
-	rep.rsni = 255; /* 255 indicates that RSNI is not available */
-	os_memcpy(rep.bssid, bss->bssid, ETH_ALEN);
-	rep.antenna_id = 0; /* unknown */
-	rep.parent_tsf = host_to_le32(parent_tsf);
+	rep = (struct rrm_measurement_beacon_report *) buf;
+	if (wpas_get_op_chan_phy(bss->freq, ie, ie_len, &rep->op_class,
+				 &rep->channel, &rep->report_info) < 0) {
+		ret = 0;
+		goto out;
+	}
 
-	do {
-		int ret;
+	rep->start_time = host_to_le64(start);
+	rep->duration = host_to_le16(data->scan_params.duration);
+	rep->rcpi = rssi_to_rcpi(bss->level);
+	rep->rsni = 255; /* 255 indicates that RSNI is not available */
+	os_memcpy(rep->bssid, bss->bssid, ETH_ALEN);
+	rep->antenna_id = 0; /* unknown */
+	rep->parent_tsf = host_to_le32(parent_tsf);
 
-		ret = wpas_add_beacon_rep_elem(data, bss, wpa_buf, &rep,
-					       &pos, &ies_len, idx++);
-		if (ret)
-			return ret;
-	} while (data->report_detail != BEACON_REPORT_DETAIL_NONE &&
-		 ies_len >= 2);
+	ret = wpas_beacon_rep_add_frame_body(data->eids, data->report_detail,
+					     bss, rep->variable, 14 + ie_len);
+	if (ret < 0)
+		goto out;
 
-	return 0;
+	ret = wpas_rrm_report_elem(wpa_buf, wpa_s->beacon_rep_data.token,
+				   MEASUREMENT_REPORT_MODE_ACCEPT,
+				   MEASURE_TYPE_BEACON, buf,
+				   ret + sizeof(*rep));
+out:
+	os_free(buf);
+	return ret;
 }
 
 
@@ -1111,16 +1006,6 @@
 	case WLAN_BEACON_REQUEST_SUBELEM_AP_CHANNEL:
 		/* Skip - it will be processed when freqs are added */
 		break;
-	case WLAN_BEACON_REQUEST_SUBELEM_LAST_INDICATION:
-		if (slen != 1) {
-			wpa_printf(MSG_DEBUG,
-				   "Beacon request: Invalid last indication request subelement length: %u",
-				   slen);
-			return -1;
-		}
-
-		data->last_indication = subelem[0];
-		break;
 	default:
 		wpa_printf(MSG_DEBUG,
 			   "Beacon request: Unknown subelement id %u", sid);
diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c
index 727c49a..ee39e0c 100644
--- a/wpa_supplicant/scan.c
+++ b/wpa_supplicant/scan.c
@@ -581,8 +581,8 @@
 #endif /* CONFIG_WPS */
 
 #ifdef CONFIG_HS20
-	if (wpa_s->conf->hs20 && wpabuf_resize(&extra_ie, 9) == 0)
-		wpas_hs20_add_indication(extra_ie, -1, 0);
+	if (wpa_s->conf->hs20 && wpabuf_resize(&extra_ie, 7) == 0)
+		wpas_hs20_add_indication(extra_ie, -1);
 #endif /* CONFIG_HS20 */
 
 #ifdef CONFIG_FST
@@ -2806,13 +2806,6 @@
 {
 	u8 *tmp = NULL;
 
-	if ((wpa_s->mac_addr_rand_supported & type) != type ) {
-		wpa_printf(MSG_INFO,
-			   "scan: MAC randomization type %u != supported=%u",
-			   type, wpa_s->mac_addr_rand_supported);
-		return -1;
-	}
-
 	wpas_mac_addr_rand_scan_clear(wpa_s, type);
 
 	if (addr) {
diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
index ba22a93..d23dc06 100644
--- a/wpa_supplicant/sme.c
+++ b/wpa_supplicant/sme.c
@@ -12,7 +12,6 @@
 #include "utils/eloop.h"
 #include "common/ieee802_11_defs.h"
 #include "common/ieee802_11_common.h"
-#include "common/ocv.h"
 #include "eapol_supp/eapol_supp_sm.h"
 #include "common/wpa_common.h"
 #include "common/sae.h"
@@ -73,7 +72,7 @@
 		if (sae_set_group(&wpa_s->sme.sae, group) == 0) {
 			wpa_dbg(wpa_s, MSG_DEBUG, "SME: Selected SAE group %d",
 				wpa_s->sme.sae.group);
-			return 0;
+		       return 0;
 		}
 		wpa_s->sme.sae_group_index++;
 	}
@@ -355,20 +354,6 @@
 			wpas_connect_work_done(wpa_s);
 			return;
 		}
-#ifdef CONFIG_HS20
-	} else if (wpa_bss_get_vendor_ie(bss, OSEN_IE_VENDOR_TYPE) &&
-		   (ssid->key_mgmt & WPA_KEY_MGMT_OSEN)) {
-		/* No PMKSA caching, but otherwise similar to RSN/WPA */
-		wpa_s->sme.assoc_req_ie_len = sizeof(wpa_s->sme.assoc_req_ie);
-		if (wpa_supplicant_set_suites(wpa_s, bss, ssid,
-					      wpa_s->sme.assoc_req_ie,
-					      &wpa_s->sme.assoc_req_ie_len)) {
-			wpa_msg(wpa_s, MSG_WARNING, "SME: Failed to set WPA "
-				"key management and encryption suites");
-			wpas_connect_work_done(wpa_s);
-			return;
-		}
-#endif /* CONFIG_HS20 */
 	} else if ((ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA) &&
 		   wpa_key_mgmt_wpa_ieee8021x(ssid->key_mgmt)) {
 		/*
@@ -460,7 +445,7 @@
 			wpa_s->sme.assoc_req_ie_len += 5;
 		}
 
-		if (wpa_s->sme.prev_bssid_set && wpa_s->sme.ft_used &&
+		if (wpa_s->sme.ft_used &&
 		    os_memcmp(md, wpa_s->sme.mobility_domain, 2) == 0 &&
 		    wpa_sm_has_ptk(wpa_s->wpa)) {
 			wpa_dbg(wpa_s, MSG_DEBUG, "SME: Trying to use FT "
@@ -520,7 +505,7 @@
 	sme_auth_handle_rrm(wpa_s, bss);
 
 	wpa_s->sme.assoc_req_ie_len += wpas_supp_op_class_ie(
-		wpa_s, ssid, bss->freq,
+		wpa_s, bss->freq,
 		wpa_s->sme.assoc_req_ie + wpa_s->sme.assoc_req_ie_len,
 		sizeof(wpa_s->sme.assoc_req_ie) - wpa_s->sme.assoc_req_ie_len);
 
@@ -551,8 +536,7 @@
 			int pps_mo_id = hs20_get_pps_mo_id(wpa_s, ssid);
 			size_t len;
 
-			wpas_hs20_add_indication(hs20, pps_mo_id,
-						 get_hs20_version(bss));
+			wpas_hs20_add_indication(hs20, pps_mo_id);
 			wpas_hs20_add_roam_cons_sel(hs20, ssid);
 			len = sizeof(wpa_s->sme.assoc_req_ie) -
 				wpa_s->sme.assoc_req_ie_len;
@@ -897,10 +881,10 @@
 	os_memcpy(resp->da, da, ETH_ALEN);
 	os_memcpy(resp->sa, sa, ETH_ALEN);
 	os_memcpy(resp->bssid, da, ETH_ALEN);
-	resp->u.auth.auth_alg = host_to_le16(WLAN_AUTH_SAE);
-	resp->seq_ctrl = host_to_le16(seq_num << 4);
-	resp->u.auth.auth_transaction = host_to_le16(auth_transaction);
-	resp->u.auth.status_code = host_to_le16(WLAN_STATUS_SUCCESS);
+	resp->u.auth.auth_alg = WLAN_AUTH_SAE;
+	resp->seq_ctrl = seq_num << 4;
+	resp->u.auth.auth_transaction = auth_transaction;
+	resp->u.auth.status_code = WLAN_STATUS_SUCCESS;
 	if (params)
 		wpabuf_put_buf(buf, params);
 
@@ -960,8 +944,7 @@
 	for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next) {
 		if (!wpas_network_disabled(wpa_s, ssid) &&
 		    ssid_str_len == ssid->ssid_len &&
-		    os_memcmp(ssid_str, ssid->ssid, ssid_str_len) == 0 &&
-		    (ssid->key_mgmt & WPA_KEY_MGMT_SAE))
+		    os_memcmp(ssid_str, ssid->ssid, ssid_str_len) == 0)
 			break;
 	}
 	if (ssid)
@@ -1180,14 +1163,13 @@
 		return;
 	}
 
-	if (le_to_host16(header->u.auth.auth_alg) == WLAN_AUTH_SAE) {
+	if (header->u.auth.auth_alg == WLAN_AUTH_SAE) {
 		int res;
 
-		res = sme_sae_auth(
-			wpa_s, le_to_host16(header->u.auth.auth_transaction),
-			le_to_host16(header->u.auth.status_code),
-			header->u.auth.variable,
-			len - auth_length, 1, header->sa);
+		res = sme_sae_auth(wpa_s, header->u.auth.auth_transaction,
+				   header->u.auth.status_code,
+				   header->u.auth.variable,
+				   len - auth_length, 1, header->sa);
 		if (res < 0) {
 			/* Notify failure to the driver */
 			sme_send_external_auth_status(
@@ -1388,6 +1370,7 @@
 }
 
 
+#ifdef CONFIG_FILS
 #ifdef CONFIG_IEEE80211R
 static void remove_ie(u8 *buf, size_t *len, u8 eid)
 {
@@ -1402,6 +1385,7 @@
 	}
 }
 #endif /* CONFIG_IEEE80211R */
+#endif /* CONFIG_FILS */
 
 
 void sme_associate(struct wpa_supplicant *wpa_s, enum wpas_mode mode,
@@ -1520,18 +1504,14 @@
 
 		if (wpa_s->current_ssid && wpa_s->current_ssid->owe_group) {
 			group = wpa_s->current_ssid->owe_group;
-		} else if (wpa_s->assoc_status_code ==
-			   WLAN_STATUS_FINITE_CYCLIC_GROUP_NOT_SUPPORTED) {
+		} else {
 			if (wpa_s->last_owe_group == 19)
 				group = 20;
 			else if (wpa_s->last_owe_group == 20)
 				group = 21;
 			else
 				group = OWE_DH_GROUP;
-		} else {
-			group = OWE_DH_GROUP;
 		}
-
 		wpa_s->last_owe_group = group;
 		wpa_printf(MSG_DEBUG, "OWE: Try to use group %u", group);
 		owe_ie = owe_build_assoc_req(wpa_s->wpa, group);
@@ -1554,22 +1534,6 @@
 	}
 #endif /* CONFIG_OWE */
 
-	if (wpa_s->current_ssid && wpa_s->current_ssid->multi_ap_backhaul_sta) {
-		size_t multi_ap_ie_len;
-
-		multi_ap_ie_len = add_multi_ap_ie(
-			wpa_s->sme.assoc_req_ie + wpa_s->sme.assoc_req_ie_len,
-			sizeof(wpa_s->sme.assoc_req_ie) -
-			wpa_s->sme.assoc_req_ie_len,
-			MULTI_AP_BACKHAUL_STA);
-		if (multi_ap_ie_len == 0) {
-			wpa_printf(MSG_ERROR,
-				   "Multi-AP: Failed to build Multi-AP IE");
-			return;
-		}
-		wpa_s->sme.assoc_req_ie_len += multi_ap_ie_len;
-	}
-
 	params.bssid = bssid;
 	params.ssid = wpa_s->sme.ssid;
 	params.ssid_len = wpa_s->sme.ssid_len;
@@ -1579,8 +1543,6 @@
 	params.wpa_ie = wpa_s->sme.assoc_req_ie_len ?
 		wpa_s->sme.assoc_req_ie : NULL;
 	params.wpa_ie_len = wpa_s->sme.assoc_req_ie_len;
-	wpa_hexdump(MSG_DEBUG, "SME: Association Request IEs",
-		    params.wpa_ie, params.wpa_ie_len);
 	params.pairwise_suite = wpa_s->pairwise_cipher;
 	params.group_suite = wpa_s->group_cipher;
 	params.mgmt_group_suite = wpa_s->mgmt_group_cipher;
@@ -1601,85 +1563,9 @@
 	wpa_supplicant_apply_vht_overrides(wpa_s, wpa_s->current_ssid, &params);
 #endif /* CONFIG_VHT_OVERRIDES */
 #ifdef CONFIG_IEEE80211R
-	if (auth_type == WLAN_AUTH_FT && wpa_s->sme.ft_ies &&
-	    get_ie(wpa_s->sme.ft_ies, wpa_s->sme.ft_ies_len,
-		   WLAN_EID_RIC_DATA)) {
-		/* There seems to be a pretty inconvenient bug in the Linux
-		 * kernel IE splitting functionality when RIC is used. For now,
-		 * skip correct behavior in IE construction here (i.e., drop the
-		 * additional non-FT-specific IEs) to avoid kernel issues. This
-		 * is fine since RIC is used only for testing purposes in the
-		 * current implementation. */
-		wpa_printf(MSG_INFO,
-			   "SME: Linux kernel workaround - do not try to include additional IEs with RIC");
+	if (auth_type == WLAN_AUTH_FT && wpa_s->sme.ft_ies) {
 		params.wpa_ie = wpa_s->sme.ft_ies;
 		params.wpa_ie_len = wpa_s->sme.ft_ies_len;
-	} else if (auth_type == WLAN_AUTH_FT && wpa_s->sme.ft_ies) {
-		const u8 *rm_en, *pos, *end;
-		size_t rm_en_len = 0;
-		u8 *rm_en_dup = NULL, *wpos;
-
-		/* Remove RSNE, MDE, FTE to allow them to be overridden with
-		 * FT specific values */
-		remove_ie(wpa_s->sme.assoc_req_ie,
-			  &wpa_s->sme.assoc_req_ie_len,
-			  WLAN_EID_RSN);
-		remove_ie(wpa_s->sme.assoc_req_ie,
-			  &wpa_s->sme.assoc_req_ie_len,
-			  WLAN_EID_MOBILITY_DOMAIN);
-		remove_ie(wpa_s->sme.assoc_req_ie,
-			  &wpa_s->sme.assoc_req_ie_len,
-			  WLAN_EID_FAST_BSS_TRANSITION);
-		rm_en = get_ie(wpa_s->sme.assoc_req_ie,
-			       wpa_s->sme.assoc_req_ie_len,
-			       WLAN_EID_RRM_ENABLED_CAPABILITIES);
-		if (rm_en) {
-			/* Need to remove RM Enabled Capabilities element as
-			 * well temporarily, so that it can be placed between
-			 * RSNE and MDE. */
-			rm_en_len = 2 + rm_en[1];
-			rm_en_dup = os_memdup(rm_en, rm_en_len);
-			remove_ie(wpa_s->sme.assoc_req_ie,
-				  &wpa_s->sme.assoc_req_ie_len,
-				  WLAN_EID_RRM_ENABLED_CAPABILITIES);
-		}
-		wpa_hexdump(MSG_DEBUG,
-			    "SME: Association Request IEs after FT IE removal",
-			    wpa_s->sme.assoc_req_ie,
-			    wpa_s->sme.assoc_req_ie_len);
-		if (wpa_s->sme.assoc_req_ie_len + wpa_s->sme.ft_ies_len +
-		    rm_en_len > sizeof(wpa_s->sme.assoc_req_ie)) {
-			wpa_printf(MSG_ERROR,
-				   "SME: Not enough buffer room for FT IEs in Association Request frame");
-			os_free(rm_en_dup);
-			return;
-		}
-
-		os_memmove(wpa_s->sme.assoc_req_ie + wpa_s->sme.ft_ies_len +
-			   rm_en_len,
-			   wpa_s->sme.assoc_req_ie,
-			   wpa_s->sme.assoc_req_ie_len);
-		pos = wpa_s->sme.ft_ies;
-		end = pos + wpa_s->sme.ft_ies_len;
-		wpos = wpa_s->sme.assoc_req_ie;
-		if (*pos == WLAN_EID_RSN) {
-			os_memcpy(wpos, pos, 2 + pos[1]);
-			wpos += 2 + pos[1];
-			pos += 2 + pos[1];
-		}
-		if (rm_en_dup) {
-			os_memcpy(wpos, rm_en_dup, rm_en_len);
-			wpos += rm_en_len;
-			os_free(rm_en_dup);
-		}
-		os_memcpy(wpos, pos, end - pos);
-		wpa_s->sme.assoc_req_ie_len += wpa_s->sme.ft_ies_len +
-			rm_en_len;
-		params.wpa_ie = wpa_s->sme.assoc_req_ie;
-		params.wpa_ie_len = wpa_s->sme.assoc_req_ie_len;
-		wpa_hexdump(MSG_DEBUG,
-			    "SME: Association Request IEs after FT override",
-			    params.wpa_ie, params.wpa_ie_len);
 	}
 #endif /* CONFIG_IEEE80211R */
 	params.mode = mode;
@@ -2236,7 +2122,6 @@
 
 static const unsigned int sa_query_max_timeout = 1000;
 static const unsigned int sa_query_retry_timeout = 201;
-static const unsigned int sa_query_ch_switch_max_delay = 5000; /* in usec */
 
 static int sme_check_sa_query_timeout(struct wpa_supplicant *wpa_s)
 {
@@ -2260,9 +2145,7 @@
 static void sme_send_sa_query_req(struct wpa_supplicant *wpa_s,
 				  const u8 *trans_id)
 {
-	u8 req[2 + WLAN_SA_QUERY_TR_ID_LEN + OCV_OCI_EXTENDED_LEN];
-	u8 req_len = 2 + WLAN_SA_QUERY_TR_ID_LEN;
-
+	u8 req[2 + WLAN_SA_QUERY_TR_ID_LEN];
 	wpa_dbg(wpa_s, MSG_DEBUG, "SME: Sending SA Query Request to "
 		MACSTR, MAC2STR(wpa_s->bssid));
 	wpa_hexdump(MSG_DEBUG, "SME: SA Query Transaction ID",
@@ -2270,27 +2153,9 @@
 	req[0] = WLAN_ACTION_SA_QUERY;
 	req[1] = WLAN_SA_QUERY_REQUEST;
 	os_memcpy(req + 2, trans_id, WLAN_SA_QUERY_TR_ID_LEN);
-
-#ifdef CONFIG_OCV
-	if (wpa_sm_ocv_enabled(wpa_s->wpa)) {
-		struct wpa_channel_info ci;
-
-		if (wpa_drv_channel_info(wpa_s, &ci) != 0) {
-			wpa_printf(MSG_WARNING,
-				   "Failed to get channel info for OCI element in SA Query Request frame");
-			return;
-		}
-
-		if (ocv_insert_extended_oci(&ci, req + req_len) < 0)
-			return;
-
-		req_len += OCV_OCI_EXTENDED_LEN;
-	}
-#endif /* CONFIG_OCV */
-
 	if (wpa_drv_send_action(wpa_s, wpa_s->assoc_freq, 0, wpa_s->bssid,
 				wpa_s->own_addr, wpa_s->bssid,
-				req, req_len, 0) < 0)
+				req, sizeof(req), 0) < 0)
 		wpa_msg(wpa_s, MSG_INFO, "SME: Failed to send SA Query "
 			"Request");
 }
@@ -2385,74 +2250,15 @@
 }
 
 
-void sme_event_ch_switch(struct wpa_supplicant *wpa_s)
-{
-	unsigned int usec;
-	u32 _rand;
-
-	if (wpa_s->wpa_state != WPA_COMPLETED ||
-	    !wpa_sm_ocv_enabled(wpa_s->wpa))
-		return;
-
-	wpa_dbg(wpa_s, MSG_DEBUG,
-		"SME: Channel switch completed - trigger new SA Query to verify new operating channel");
-	sme_stop_sa_query(wpa_s);
-
-	if (os_get_random((u8 *) &_rand, sizeof(_rand)) < 0)
-		_rand = os_random();
-	usec = _rand % (sa_query_ch_switch_max_delay + 1);
-	eloop_register_timeout(0, usec, sme_sa_query_timer, wpa_s, NULL);
-}
-
-
-static void sme_process_sa_query_request(struct wpa_supplicant *wpa_s,
-					 const u8 *sa, const u8 *data,
-					 size_t len)
-{
-	u8 resp[2 + WLAN_SA_QUERY_TR_ID_LEN + OCV_OCI_EXTENDED_LEN];
-	u8 resp_len = 2 + WLAN_SA_QUERY_TR_ID_LEN;
-
-	wpa_dbg(wpa_s, MSG_DEBUG, "SME: Sending SA Query Response to "
-		MACSTR, MAC2STR(wpa_s->bssid));
-
-	resp[0] = WLAN_ACTION_SA_QUERY;
-	resp[1] = WLAN_SA_QUERY_RESPONSE;
-	os_memcpy(resp + 2, data + 1, WLAN_SA_QUERY_TR_ID_LEN);
-
-#ifdef CONFIG_OCV
-	if (wpa_sm_ocv_enabled(wpa_s->wpa)) {
-		struct wpa_channel_info ci;
-
-		if (wpa_drv_channel_info(wpa_s, &ci) != 0) {
-			wpa_printf(MSG_WARNING,
-				   "Failed to get channel info for OCI element in SA Query Response frame");
-			return;
-		}
-
-		if (ocv_insert_extended_oci(&ci, resp + resp_len) < 0)
-			return;
-
-		resp_len += OCV_OCI_EXTENDED_LEN;
-	}
-#endif /* CONFIG_OCV */
-
-	if (wpa_drv_send_action(wpa_s, wpa_s->assoc_freq, 0, wpa_s->bssid,
-				wpa_s->own_addr, wpa_s->bssid,
-				resp, resp_len, 0) < 0)
-		wpa_msg(wpa_s, MSG_INFO,
-			"SME: Failed to send SA Query Response");
-}
-
-
-static void sme_process_sa_query_response(struct wpa_supplicant *wpa_s,
-					  const u8 *sa, const u8 *data,
-					  size_t len)
+void sme_sa_query_rx(struct wpa_supplicant *wpa_s, const u8 *sa,
+		     const u8 *data, size_t len)
 {
 	int i;
 
-	if (!wpa_s->sme.sa_query_trans_id)
+	if (wpa_s->sme.sa_query_trans_id == NULL ||
+	    len < 1 + WLAN_SA_QUERY_TR_ID_LEN ||
+	    data[0] != WLAN_SA_QUERY_RESPONSE)
 		return;
-
 	wpa_dbg(wpa_s, MSG_DEBUG, "SME: Received SA Query response from "
 		MACSTR " (trans_id %02x%02x)", MAC2STR(sa), data[1], data[2]);
 
@@ -2477,48 +2283,4 @@
 	sme_stop_sa_query(wpa_s);
 }
 
-
-void sme_sa_query_rx(struct wpa_supplicant *wpa_s, const u8 *sa,
-		     const u8 *data, size_t len)
-{
-	if (len < 1 + WLAN_SA_QUERY_TR_ID_LEN)
-		return;
-
-	wpa_dbg(wpa_s, MSG_DEBUG, "SME: Received SA Query frame from "
-		MACSTR " (trans_id %02x%02x)", MAC2STR(sa), data[1], data[2]);
-
-#ifdef CONFIG_OCV
-	if (wpa_sm_ocv_enabled(wpa_s->wpa)) {
-		struct ieee802_11_elems elems;
-		struct wpa_channel_info ci;
-
-		if (ieee802_11_parse_elems(data + 1 + WLAN_SA_QUERY_TR_ID_LEN,
-					   len - 1 - WLAN_SA_QUERY_TR_ID_LEN,
-					   &elems, 1) == ParseFailed) {
-			wpa_printf(MSG_DEBUG,
-				   "SA Query: Failed to parse elements");
-			return;
-		}
-
-		if (wpa_drv_channel_info(wpa_s, &ci) != 0) {
-			wpa_printf(MSG_WARNING,
-				   "Failed to get channel info to validate received OCI in SA Query Action frame");
-			return;
-		}
-
-		if (ocv_verify_tx_params(elems.oci, elems.oci_len, &ci,
-					 channel_width_to_int(ci.chanwidth),
-					 ci.seg1_idx) != 0) {
-			wpa_printf(MSG_WARNING, "%s", ocv_errorstr);
-			return;
-		}
-	}
-#endif /* CONFIG_OCV */
-
-	if (data[0] == WLAN_SA_QUERY_REQUEST)
-		sme_process_sa_query_request(wpa_s, sa, data, len);
-	else if (data[0] == WLAN_SA_QUERY_RESPONSE)
-		sme_process_sa_query_response(wpa_s, sa, data, len);
-}
-
 #endif /* CONFIG_IEEE80211W */
diff --git a/wpa_supplicant/sme.h b/wpa_supplicant/sme.h
index 1a7f9e8..f3c8220 100644
--- a/wpa_supplicant/sme.h
+++ b/wpa_supplicant/sme.h
@@ -28,7 +28,6 @@
 			struct disassoc_info *info);
 void sme_event_unprot_disconnect(struct wpa_supplicant *wpa_s, const u8 *sa,
 				 const u8 *da, u16 reason_code);
-void sme_event_ch_switch(struct wpa_supplicant *wpa_s);
 void sme_sa_query_rx(struct wpa_supplicant *wpa_s, const u8 *sa,
 		     const u8 *data, size_t len);
 void sme_state_changed(struct wpa_supplicant *wpa_s);
@@ -90,10 +89,6 @@
 {
 }
 
-static inline void sme_event_ch_switch(struct wpa_supplicant *wpa_s)
-{
-}
-
 static inline void sme_state_changed(struct wpa_supplicant *wpa_s)
 {
 }
diff --git a/wpa_supplicant/utils/log2pcap.py b/wpa_supplicant/utils/log2pcap.py
index 141aecb..65e2fa1 100755
--- a/wpa_supplicant/utils/log2pcap.py
+++ b/wpa_supplicant/utils/log2pcap.py
@@ -28,7 +28,7 @@
         input = sys.argv[1]
         pcap = sys.argv[2]
     except IndexError:
-        print("Usage: %s <log file> <pcap file>" % sys.argv[0])
+        print "Usage: %s <log file> <pcap file>" % sys.argv[0]
         sys.exit(2)
 
     input_file = open(input, 'r')
diff --git a/wpa_supplicant/wmm_ac.c b/wpa_supplicant/wmm_ac.c
index 38800cc..a88cc46 100644
--- a/wpa_supplicant/wmm_ac.c
+++ b/wpa_supplicant/wmm_ac.c
@@ -471,8 +471,13 @@
 		return -1;
 	}
 
-	if (!ies || !(wmm_params->info_bitmap & WMM_PARAMS_UAPSD_QUEUES_INFO)) {
-		/* WMM AC not in use for this connection */
+	if (!ies) {
+		wpa_printf(MSG_ERROR, "WMM AC: Missing IEs");
+		return -1;
+	}
+
+	if (!(wmm_params->info_bitmap & WMM_PARAMS_UAPSD_QUEUES_INFO)) {
+		wpa_printf(MSG_DEBUG, "WMM AC: Missing U-APSD configuration");
 		return -1;
 	}
 
@@ -517,7 +522,7 @@
 	for (i = 0; i < WMM_AC_NUM; i++)
 		wmm_ac_del_ts(wpa_s, i, TS_DIR_IDX_ALL);
 
-	/* delete pending add_ts request */
+	/* delete pending add_ts requset */
 	wmm_ac_del_req(wpa_s, 1);
 
 	os_free(wpa_s->wmm_ac_assoc_info);
diff --git a/wpa_supplicant/wnm_sta.c b/wpa_supplicant/wnm_sta.c
index 39cd163..912f4c4 100644
--- a/wpa_supplicant/wnm_sta.c
+++ b/wpa_supplicant/wnm_sta.c
@@ -12,7 +12,6 @@
 #include "common/ieee802_11_defs.h"
 #include "common/ieee802_11_common.h"
 #include "common/wpa_ctrl.h"
-#include "common/ocv.h"
 #include "rsn_supp/wpa.h"
 #include "config.h"
 #include "wpa_supplicant_i.h"
@@ -21,7 +20,6 @@
 #include "ctrl_iface.h"
 #include "bss.h"
 #include "wnm_sta.h"
-#include "notify.h"
 #include "hs20_supplicant.h"
 
 #define MAX_TFS_IE_LEN  1024
@@ -60,8 +58,8 @@
 	int res;
 	size_t len;
 	struct wnm_sleep_element *wnmsleep_ie;
-	u8 *wnmtfs_ie, *oci_ie;
-	u8 wnmsleep_ie_len, oci_ie_len;
+	u8 *wnmtfs_ie;
+	u8 wnmsleep_ie_len;
 	u16 wnmtfs_ie_len;  /* possibly multiple IE(s) */
 	enum wnm_oper tfs_oper = action == 0 ? WNM_SLEEP_TFS_REQ_IE_ADD :
 		WNM_SLEEP_TFS_REQ_IE_NONE;
@@ -108,41 +106,7 @@
 	wpa_hexdump(MSG_DEBUG, "WNM: TFS Request element",
 		    (u8 *) wnmtfs_ie, wnmtfs_ie_len);
 
-	oci_ie = NULL;
-	oci_ie_len = 0;
-#ifdef CONFIG_OCV
-	if (action == WNM_SLEEP_MODE_EXIT && wpa_sm_ocv_enabled(wpa_s->wpa)) {
-		struct wpa_channel_info ci;
-
-		if (wpa_drv_channel_info(wpa_s, &ci) != 0) {
-			wpa_printf(MSG_WARNING,
-				   "Failed to get channel info for OCI element in WNM-Sleep Mode frame");
-			os_free(wnmsleep_ie);
-			os_free(wnmtfs_ie);
-			return -1;
-		}
-
-		oci_ie_len = OCV_OCI_EXTENDED_LEN;
-		oci_ie = os_zalloc(oci_ie_len);
-		if (!oci_ie) {
-			wpa_printf(MSG_WARNING,
-				   "Failed to allocate buffer for for OCI element in WNM-Sleep Mode frame");
-			os_free(wnmsleep_ie);
-			os_free(wnmtfs_ie);
-			return -1;
-		}
-
-		if (ocv_insert_extended_oci(&ci, oci_ie) < 0) {
-			os_free(wnmsleep_ie);
-			os_free(wnmtfs_ie);
-			os_free(oci_ie);
-			return -1;
-		}
-	}
-#endif /* CONFIG_OCV */
-
-	mgmt = os_zalloc(sizeof(*mgmt) + wnmsleep_ie_len + wnmtfs_ie_len +
-			 oci_ie_len);
+	mgmt = os_zalloc(sizeof(*mgmt) + wnmsleep_ie_len + wnmtfs_ie_len);
 	if (mgmt == NULL) {
 		wpa_printf(MSG_DEBUG, "MLME: Failed to allocate buffer for "
 			   "WNM-Sleep Request action frame");
@@ -167,16 +131,8 @@
 			  wnmsleep_ie_len, wnmtfs_ie, wnmtfs_ie_len);
 	}
 
-#ifdef CONFIG_OCV
-	/* copy OCV OCI here */
-	if (oci_ie_len > 0) {
-		os_memcpy(mgmt->u.action.u.wnm_sleep_req.variable +
-			  wnmsleep_ie_len + wnmtfs_ie_len, oci_ie, oci_ie_len);
-	}
-#endif /* CONFIG_OCV */
-
 	len = 1 + sizeof(mgmt->u.action.u.wnm_sleep_req) + wnmsleep_ie_len +
-		wnmtfs_ie_len + oci_ie_len;
+		wnmtfs_ie_len;
 
 	res = wpa_drv_send_action(wpa_s, wpa_s->assoc_freq, 0, wpa_s->bssid,
 				  wpa_s->own_addr, wpa_s->bssid,
@@ -189,7 +145,6 @@
 
 	os_free(wnmsleep_ie);
 	os_free(wnmtfs_ie);
-	os_free(oci_ie);
 	os_free(mgmt);
 
 	return res;
@@ -301,10 +256,6 @@
 	/* multiple TFS Resp IE (assuming consecutive) */
 	const u8 *tfsresp_ie_start = NULL;
 	const u8 *tfsresp_ie_end = NULL;
-#ifdef CONFIG_OCV
-	const u8 *oci_ie = NULL;
-	u8 oci_ie_len = 0;
-#endif /* CONFIG_OCV */
 	size_t left;
 
 	if (!wpa_s->wnmsleep_used) {
@@ -338,12 +289,6 @@
 			if (!tfsresp_ie_start)
 				tfsresp_ie_start = pos;
 			tfsresp_ie_end = pos;
-#ifdef CONFIG_OCV
-		} else if (*pos == WLAN_EID_EXTENSION && ie_len >= 1 &&
-			   pos[2] == WLAN_EID_EXT_OCV_OCI) {
-			oci_ie = pos + 3;
-			oci_ie_len = ie_len - 1;
-#endif /* CONFIG_OCV */
 		} else
 			wpa_printf(MSG_DEBUG, "EID %d not recognized", *pos);
 		pos += ie_len + 2;
@@ -354,26 +299,6 @@
 		return;
 	}
 
-#ifdef CONFIG_OCV
-	if (wnmsleep_ie->action_type == WNM_SLEEP_MODE_EXIT &&
-	    wpa_sm_ocv_enabled(wpa_s->wpa)) {
-		struct wpa_channel_info ci;
-
-		if (wpa_drv_channel_info(wpa_s, &ci) != 0) {
-			wpa_msg(wpa_s, MSG_WARNING,
-				"Failed to get channel info to validate received OCI in WNM-Sleep Mode frame");
-			return;
-		}
-
-		if (ocv_verify_tx_params(oci_ie, oci_ie_len, &ci,
-					 channel_width_to_int(ci.chanwidth),
-					 ci.seg1_idx) != 0) {
-			wpa_msg(wpa_s, MSG_WARNING, "WNM: %s", ocv_errorstr);
-			return;
-		}
-	}
-#endif /* CONFIG_OCV */
-
 	wpa_s->wnmsleep_used = 0;
 
 	if (wnmsleep_ie->status == WNM_STATUS_SLEEP_ACCEPT ||
@@ -775,7 +700,7 @@
 			continue;
 		}
 
-		if (wpa_is_bss_tmp_disallowed(wpa_s, target)) {
+		if (wpa_is_bss_tmp_disallowed(wpa_s, target->bssid)) {
 			wpa_printf(MSG_DEBUG,
 				   "MBO: Candidate BSS " MACSTR
 				   " retry delay is not over yet",
@@ -1020,9 +945,6 @@
 		return;
 	}
 
-	wpa_s->bss_tm_status = status;
-	wpas_notify_bss_tm_status(wpa_s);
-
 	wpabuf_put_u8(buf, WLAN_ACTION_WNM);
 	wpabuf_put_u8(buf, WNM_BSS_TRANS_MGMT_RESP);
 	wpabuf_put_u8(buf, dialog_token);
diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c
index 9881021..05e3ebf 100644
--- a/wpa_supplicant/wpa_cli.c
+++ b/wpa_supplicant/wpa_cli.c
@@ -1,6 +1,6 @@
 /*
  * WPA Supplicant - command line interface for wpa_supplicant daemon
- * Copyright (c) 2004-2019, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2004-2017, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -29,7 +29,7 @@
 
 static const char *const wpa_cli_version =
 "wpa_cli v" VERSION_STR "\n"
-"Copyright (c) 2004-2019, Jouni Malinen <j@w1.fi> and contributors";
+"Copyright (c) 2004-2017, Jouni Malinen <j@w1.fi> and contributors";
 
 #define VENDOR_ELEM_FRAME_ID \
 	"  0: Probe Req (P2P), 1: Probe Resp (P2P) , 2: Probe Resp (GO), " \
@@ -49,7 +49,6 @@
 static const char *ctrl_iface_dir = CONFIG_CTRL_IFACE_DIR;
 static const char *client_socket_dir = NULL;
 static char *ctrl_ifname = NULL;
-static const char *global = NULL;
 static const char *pid_file = NULL;
 static const char *action_file = NULL;
 static int ping_interval = 5;
@@ -75,7 +74,6 @@
 static void update_creds(struct wpa_ctrl *ctrl);
 static void update_networks(struct wpa_ctrl *ctrl);
 static void update_stations(struct wpa_ctrl *ctrl);
-static void update_ifnames(struct wpa_ctrl *ctrl);
 
 
 static void usage(void)
@@ -1205,39 +1203,6 @@
 }
 
 
-static int wpa_cli_cmd_psk_passphrase(struct wpa_ctrl *ctrl, int argc,
-				      char *argv[])
-{
-	char cmd[256], *pos, *end;
-	int i, ret;
-
-	if (argc < 2) {
-		printf("Invalid PSK_PASSPHRASE command: needs two arguments (network id and PSK/passphrase)\n");
-		return -1;
-	}
-
-	end = cmd + sizeof(cmd);
-	pos = cmd;
-	ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "PSK_PASSPHRASE-%s:%s",
-			  argv[0], argv[1]);
-	if (os_snprintf_error(end - pos, ret)) {
-		printf("Too long PSK_PASSPHRASE command.\n");
-		return -1;
-	}
-	pos += ret;
-	for (i = 2; i < argc; i++) {
-		ret = os_snprintf(pos, end - pos, " %s", argv[i]);
-		if (os_snprintf_error(end - pos, ret)) {
-			printf("Too long PSK_PASSPHRASE command.\n");
-			return -1;
-		}
-		pos += ret;
-	}
-
-	return wpa_ctrl_command(ctrl, cmd);
-}
-
-
 static int wpa_cli_cmd_passphrase(struct wpa_ctrl *ctrl, int argc,
 				  char *argv[])
 {
@@ -1447,7 +1412,7 @@
 #ifdef CONFIG_HT_OVERRIDES
 	"disable_ht", "disable_ht40", "disable_sgi", "disable_ldpc",
 	"ht40_intolerant", "disable_max_amsdu", "ampdu_factor",
-	"ampdu_density", "ht_mcs", "rx_stbc", "tx_stbc",
+	"ampdu_density", "ht_mcs",
 #endif /* CONFIG_HT_OVERRIDES */
 #ifdef CONFIG_VHT_OVERRIDES
 	"disable_vht", "vht_capa", "vht_capa_mask", "vht_rx_mcs_nss_1",
@@ -1461,8 +1426,6 @@
 #ifdef CONFIG_MACSEC
 	"macsec_policy",
 	"macsec_integ_only",
-	"macsec_replay_protect",
-	"macsec_replay_window",
 	"macsec_port",
 	"mka_priority",
 #endif /* CONFIG_MACSEC */
@@ -2992,13 +2955,6 @@
 }
 
 
-static int wpa_cli_cmd_dpp_configurator_sign(struct wpa_ctrl *ctrl, int argc,
-					     char *argv[])
-{
-	return wpa_cli_cmd(ctrl, "DPP_CONFIGURATOR_SIGN", 1, argc, argv);
-}
-
-
 static int wpa_cli_cmd_dpp_pkex_add(struct wpa_ctrl *ctrl, int argc,
 				    char *argv[])
 {
@@ -3128,9 +3084,6 @@
 	  cli_cmd_flag_sensitive,
 	  "<network id> <password> = configure one-time-password for an SSID"
 	},
-	{ "psk_passphrase", wpa_cli_cmd_psk_passphrase,
-	  wpa_cli_complete_network_id, cli_cmd_flag_sensitive,
-	  "<network id> <PSK/passphrase> = configure PSK/passphrase for an SSID" },
 	{ "passphrase", wpa_cli_cmd_passphrase, wpa_cli_complete_network_id,
 	  cli_cmd_flag_sensitive,
 	  "<network id> <passphrase> = configure private key passphrase\n"
@@ -3661,9 +3614,6 @@
 	{ "dpp_configurator_get_key", wpa_cli_cmd_dpp_configurator_get_key,
 	  NULL, cli_cmd_flag_none,
 	  "<id> = Get DPP configurator's private key" },
-	{ "dpp_configurator_sign", wpa_cli_cmd_dpp_configurator_sign, NULL,
-	  cli_cmd_flag_none,
-	  "conf=<role> configurator=<id> = generate self DPP configuration" },
 	{ "dpp_pkex_add", wpa_cli_cmd_dpp_pkex_add, NULL,
 	  cli_cmd_flag_sensitive,
 	  "add PKEX code" },
@@ -4022,46 +3972,10 @@
 #endif /* CONFIG_ANSI_C_EXTRA */
 
 
-static int wpa_cli_open_global_ctrl(void)
-{
-#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE
-	ctrl_conn = wpa_ctrl_open(NULL);
-#else /* CONFIG_CTRL_IFACE_NAMED_PIPE */
-	ctrl_conn = wpa_ctrl_open(global);
-#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */
-	if (!ctrl_conn) {
-		fprintf(stderr,
-			"Failed to connect to wpa_supplicant global interface: %s  error: %s\n",
-			global, strerror(errno));
-		return -1;
-	}
-
-	if (interactive) {
-		update_ifnames(ctrl_conn);
-		mon_conn = wpa_ctrl_open(global);
-		if (mon_conn) {
-			if (wpa_ctrl_attach(mon_conn) == 0) {
-				wpa_cli_attached = 1;
-				eloop_register_read_sock(
-					wpa_ctrl_get_fd(mon_conn),
-					wpa_cli_mon_receive,
-					NULL, NULL);
-			} else {
-				printf("Failed to open monitor connection through global control interface\n");
-			}
-		}
-		update_stations(ctrl_conn);
-	}
-
-	return 0;
-}
-
-
 static void wpa_cli_reconnect(void)
 {
 	wpa_cli_close_connection();
-	if ((global && wpa_cli_open_global_ctrl() < 0) ||
-	    (!global && wpa_cli_open_connection(ctrl_ifname, 1) < 0))
+	if (wpa_cli_open_connection(ctrl_ifname, 1) < 0)
 		return;
 
 	if (interactive) {
@@ -4620,6 +4534,7 @@
 	int c;
 	int daemonize = 0;
 	int ret = 0;
+	const char *global = NULL;
 
 	if (os_program_init())
 		return -1;
@@ -4674,8 +4589,38 @@
 	if (eloop_init())
 		return -1;
 
-	if (global && wpa_cli_open_global_ctrl() < 0)
-		return -1;
+	if (global) {
+#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE
+		ctrl_conn = wpa_ctrl_open(NULL);
+#else /* CONFIG_CTRL_IFACE_NAMED_PIPE */
+		ctrl_conn = wpa_ctrl_open(global);
+#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */
+		if (ctrl_conn == NULL) {
+			fprintf(stderr, "Failed to connect to wpa_supplicant "
+				"global interface: %s  error: %s\n",
+				global, strerror(errno));
+			return -1;
+		}
+
+		if (interactive) {
+			update_ifnames(ctrl_conn);
+			mon_conn = wpa_ctrl_open(global);
+			if (mon_conn) {
+				if (wpa_ctrl_attach(mon_conn) == 0) {
+					wpa_cli_attached = 1;
+					eloop_register_read_sock(
+						wpa_ctrl_get_fd(mon_conn),
+						wpa_cli_mon_receive,
+						NULL, NULL);
+				} else {
+					printf("Failed to open monitor "
+					       "connection through global "
+					       "control interface\n");
+				}
+			}
+			update_stations(ctrl_conn);
+		}
+	}
 
 	eloop_register_signal_terminate(wpa_cli_terminate, NULL);
 
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index a2f0b31..4432ec3 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -1,6 +1,6 @@
 /*
  * WPA Supplicant
- * Copyright (c) 2003-2019, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2003-2018, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -68,7 +68,7 @@
 
 const char *const wpa_supplicant_version =
 "wpa_supplicant v" VERSION_STR "\n"
-"Copyright (c) 2003-2019, Jouni Malinen <j@w1.fi> and contributors";
+"Copyright (c) 2003-2017, Jouni Malinen <j@w1.fi> and contributors";
 
 const char *const wpa_supplicant_license =
 "This software may be distributed under the terms of the BSD license.\n"
@@ -445,7 +445,7 @@
 }
 
 
-void free_bss_tmp_disallowed(struct wpa_supplicant *wpa_s)
+static void free_bss_tmp_disallowed(struct wpa_supplicant *wpa_s)
 {
 	struct wpa_bss_tmp_disallowed *bss, *prev;
 
@@ -847,23 +847,6 @@
 		wpa_supplicant_state_txt(wpa_s->wpa_state),
 		wpa_supplicant_state_txt(state));
 
-	if (state == WPA_COMPLETED &&
-	    os_reltime_initialized(&wpa_s->roam_start)) {
-		os_reltime_age(&wpa_s->roam_start, &wpa_s->roam_time);
-		wpa_s->roam_start.sec = 0;
-		wpa_s->roam_start.usec = 0;
-		wpas_notify_auth_changed(wpa_s);
-		wpas_notify_roam_time(wpa_s);
-		wpas_notify_roam_complete(wpa_s);
-	} else if (state == WPA_DISCONNECTED &&
-		   os_reltime_initialized(&wpa_s->roam_start)) {
-		wpa_s->roam_start.sec = 0;
-		wpa_s->roam_start.usec = 0;
-		wpa_s->roam_time.sec = 0;
-		wpa_s->roam_time.usec = 0;
-		wpas_notify_roam_complete(wpa_s);
-	}
-
 	if (state == WPA_INTERFACE_DISABLED) {
 		/* Assure normal scan when interface is restored */
 		wpa_s->normal_scans = 0;
@@ -1234,12 +1217,13 @@
 		wpa_dbg(wpa_s, MSG_DEBUG, "WPA: using IEEE 802.11i/D3.0");
 		proto = WPA_PROTO_WPA;
 #ifdef CONFIG_HS20
-	} else if (bss_osen && (ssid->proto & WPA_PROTO_OSEN) &&
-		   wpa_parse_wpa_ie(bss_osen, 2 + bss_osen[1], &ie) == 0 &&
-		   (ie.group_cipher & ssid->group_cipher) &&
-		   (ie.pairwise_cipher & ssid->pairwise_cipher) &&
-		   (ie.key_mgmt & ssid->key_mgmt)) {
+	} else if (bss_osen && (ssid->proto & WPA_PROTO_OSEN)) {
 		wpa_dbg(wpa_s, MSG_DEBUG, "HS 2.0: using OSEN");
+		/* TODO: parse OSEN element */
+		os_memset(&ie, 0, sizeof(ie));
+		ie.group_cipher = WPA_CIPHER_CCMP;
+		ie.pairwise_cipher = WPA_CIPHER_CCMP;
+		ie.key_mgmt = WPA_KEY_MGMT_OSEN;
 		proto = WPA_PROTO_OSEN;
 	} else if (bss_rsn && (ssid->proto & WPA_PROTO_OSEN) &&
 	    wpa_parse_wpa_ie(bss_rsn, 2 + bss_rsn[1], &ie) == 0 &&
@@ -1529,9 +1513,6 @@
 	wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_MFP,
 			 wpas_get_ssid_pmf(wpa_s, ssid));
 #endif /* CONFIG_IEEE80211W */
-#ifdef CONFIG_OCV
-	wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_OCV, ssid->ocv);
-#endif /* CONFIG_OCV */
 
 	if (wpa_sm_set_assoc_wpa_ie_default(wpa_s->wpa, wpa_ie, wpa_ie_len)) {
 		wpa_msg(wpa_s, MSG_WARNING, "WPA: Failed to generate WPA IE");
@@ -1922,8 +1903,6 @@
 		if (wpa_s->current_bss && wpa_s->current_bss == bss) {
 			wmm_ac_save_tspecs(wpa_s);
 			wpa_s->reassoc_same_bss = 1;
-		} else if (wpa_s->current_bss && wpa_s->current_bss != bss) {
-			os_get_reltime(&wpa_s->roam_start);
 		}
 	}
 
@@ -2192,14 +2171,9 @@
 	if (pri_chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_NO_IR))
 		return;
 
-	freq->channel = pri_chan->chan;
-
 #ifdef CONFIG_HT_OVERRIDES
-	if (ssid->disable_ht40) {
-		if (ssid->disable_vht)
-			return;
-		goto skip_ht40;
-	}
+	if (ssid->disable_ht40)
+		return;
 #endif /* CONFIG_HT_OVERRIDES */
 
 	/* Check/setup HT40+/HT40- */
@@ -2224,6 +2198,8 @@
 	if (sec_chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_NO_IR))
 		return;
 
+	freq->channel = pri_chan->chan;
+
 	if (ht40 == -1) {
 		if (!(pri_chan->flag & HOSTAPD_CHAN_HT40MINUS))
 			return;
@@ -2267,9 +2243,6 @@
 		wpa_scan_results_free(scan_res);
 	}
 
-#ifdef CONFIG_HT_OVERRIDES
-skip_ht40:
-#endif /* CONFIG_HT_OVERRIDES */
 	wpa_printf(MSG_DEBUG,
 		   "IBSS/mesh: setup freq channel %d, sec_channel_offset %d",
 		   freq->channel, freq->sec_channel_offset);
@@ -2359,13 +2332,6 @@
 			vht_caps |= VHT_CAP_SUPP_CHAN_WIDTH_160MHZ;
 			seg0 = 114;
 		}
-	} else if (ssid->max_oper_chwidth == VHT_CHANWIDTH_USE_HT) {
-		chwidth = VHT_CHANWIDTH_USE_HT;
-		seg0 = vht80[j] + 2;
-#ifdef CONFIG_HT_OVERRIDES
-		if (ssid->disable_ht40)
-			seg0 = 0;
-#endif /* CONFIG_HT_OVERRIDES */
 	}
 
 	if (hostapd_set_freq_params(&vht_freq, mode->mode, freq->freq,
@@ -2533,19 +2499,6 @@
 			os_free(wpa_ie);
 			return NULL;
 		}
-#ifdef CONFIG_HS20
-	} else if (bss && wpa_bss_get_vendor_ie(bss, OSEN_IE_VENDOR_TYPE) &&
-		   (ssid->key_mgmt & WPA_KEY_MGMT_OSEN)) {
-		/* No PMKSA caching, but otherwise similar to RSN/WPA */
-		wpa_ie_len = max_wpa_ie_len;
-		if (wpa_supplicant_set_suites(wpa_s, bss, ssid,
-					      wpa_ie, &wpa_ie_len)) {
-			wpa_msg(wpa_s, MSG_WARNING, "WPA: Failed to set WPA "
-				"key management and encryption suites");
-			os_free(wpa_ie);
-			return NULL;
-		}
-#endif /* CONFIG_HS20 */
 	} else if ((ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA) && bss &&
 		   wpa_key_mgmt_wpa_ieee8021x(ssid->key_mgmt)) {
 		/*
@@ -2669,7 +2622,7 @@
 #endif /* CONFIG_P2P */
 
 	if (bss) {
-		wpa_ie_len += wpas_supp_op_class_ie(wpa_s, ssid, bss->freq,
+		wpa_ie_len += wpas_supp_op_class_ie(wpa_s, bss->freq,
 						    wpa_ie + wpa_ie_len,
 						    max_wpa_ie_len -
 						    wpa_ie_len);
@@ -2714,8 +2667,7 @@
 			int pps_mo_id = hs20_get_pps_mo_id(wpa_s, ssid);
 			size_t len;
 
-			wpas_hs20_add_indication(hs20, pps_mo_id,
-						 get_hs20_version(bss));
+			wpas_hs20_add_indication(hs20, pps_mo_id);
 			wpas_hs20_add_roam_cons_sel(hs20, ssid);
 			len = max_wpa_ie_len - wpa_ie_len;
 			if (wpabuf_len(hs20) <= len) {
@@ -2791,18 +2743,14 @@
 
 		if (ssid->owe_group) {
 			group = ssid->owe_group;
-		} else if (wpa_s->assoc_status_code ==
-			   WLAN_STATUS_FINITE_CYCLIC_GROUP_NOT_SUPPORTED) {
+		} else {
 			if (wpa_s->last_owe_group == 19)
 				group = 20;
 			else if (wpa_s->last_owe_group == 20)
 				group = 21;
 			else
 				group = OWE_DH_GROUP;
-		} else {
-			group = OWE_DH_GROUP;
 		}
-
 		wpa_s->last_owe_group = group;
 		wpa_printf(MSG_DEBUG, "OWE: Try to use group %u", group);
 		owe_ie = owe_build_assoc_req(wpa_s->wpa, group);
@@ -2849,21 +2797,6 @@
 	}
 #endif /* CONFIG_IEEE80211R */
 
-	if (ssid->multi_ap_backhaul_sta) {
-		size_t multi_ap_ie_len;
-
-		multi_ap_ie_len = add_multi_ap_ie(wpa_ie + wpa_ie_len,
-						  max_wpa_ie_len - wpa_ie_len,
-						  MULTI_AP_BACKHAUL_STA);
-		if (multi_ap_ie_len == 0) {
-			wpa_printf(MSG_ERROR,
-				   "Multi-AP: Failed to build Multi-AP IE");
-			os_free(wpa_ie);
-			return NULL;
-		}
-		wpa_ie_len += multi_ap_ie_len;
-	}
-
 	params->wpa_ie = wpa_ie;
 	params->wpa_ie_len = wpa_ie_len;
 	params->auth_alg = algs;
@@ -3107,7 +3040,7 @@
 	}
 	params.wep_tx_keyidx = ssid->wep_tx_keyidx;
 
-	if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK) &&
+	if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE) &&
 	    (params.key_mgmt_suite == WPA_KEY_MGMT_PSK ||
 	     params.key_mgmt_suite == WPA_KEY_MGMT_FT_PSK)) {
 		params.passphrase = ssid->passphrase;
@@ -3115,13 +3048,6 @@
 			params.psk = ssid->psk;
 	}
 
-	if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X) &&
-	    (params.key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X ||
-	     params.key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_SHA256 ||
-	     params.key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_SUITE_B ||
-	     params.key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_SUITE_B_192))
-		params.req_key_mgmt_offload = 1;
-
 	if (wpa_s->conf->key_mgmt_offload) {
 		if (params.key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X ||
 		    params.key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_SHA256 ||
@@ -3349,9 +3275,6 @@
 		zero_addr = 1;
 	}
 
-	if (wpa_s->enabled_4addr_mode && wpa_drv_set_4addr_mode(wpa_s, 0) == 0)
-		wpa_s->enabled_4addr_mode = 0;
-
 #ifdef CONFIG_TDLS
 	wpa_tdls_teardown_peers(wpa_s->wpa);
 #endif /* CONFIG_TDLS */
@@ -4121,7 +4044,7 @@
 	}
 
 	if (wpa_s->eapol_received == 0 &&
-	    (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK) ||
+	    (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE) ||
 	     !wpa_key_mgmt_wpa_psk(wpa_s->key_mgmt) ||
 	     wpa_s->wpa_state != WPA_COMPLETED) &&
 	    (wpa_s->current_ssid == NULL ||
@@ -4187,7 +4110,7 @@
 	    eapol_sm_rx_eapol(wpa_s->eapol, src_addr, buf, len) > 0)
 		return;
 	wpa_drv_poll(wpa_s);
-	if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK))
+	if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE))
 		wpa_sm_rx_eapol(wpa_s->wpa, src_addr, buf, len);
 	else if (wpa_key_mgmt_wpa_ieee8021x(wpa_s->key_mgmt)) {
 		/*
@@ -4551,58 +4474,6 @@
 }
 
 
-static int wpa_set_tx_stbc(struct wpa_supplicant *wpa_s,
-			   struct ieee80211_ht_capabilities *htcaps,
-			   struct ieee80211_ht_capabilities *htcaps_mask,
-			   int tx_stbc)
-{
-	le16 msk = host_to_le16(HT_CAP_INFO_TX_STBC);
-
-	wpa_msg(wpa_s, MSG_DEBUG, "set_tx_stbc: %d", tx_stbc);
-
-	if (tx_stbc == -1)
-		return 0;
-
-	if (tx_stbc < 0 || tx_stbc > 1) {
-		wpa_msg(wpa_s, MSG_ERROR,
-			"tx_stbc: %d out of range. Must be 0-1 or -1", tx_stbc);
-		return -EINVAL;
-	}
-
-	htcaps_mask->ht_capabilities_info |= msk;
-	htcaps->ht_capabilities_info &= ~msk;
-	htcaps->ht_capabilities_info |= (tx_stbc << 7) & msk;
-
-	return 0;
-}
-
-
-static int wpa_set_rx_stbc(struct wpa_supplicant *wpa_s,
-			   struct ieee80211_ht_capabilities *htcaps,
-			   struct ieee80211_ht_capabilities *htcaps_mask,
-			   int rx_stbc)
-{
-	le16 msk = host_to_le16(HT_CAP_INFO_RX_STBC_MASK);
-
-	wpa_msg(wpa_s, MSG_DEBUG, "set_rx_stbc: %d", rx_stbc);
-
-	if (rx_stbc == -1)
-		return 0;
-
-	if (rx_stbc < 0 || rx_stbc > 3) {
-		wpa_msg(wpa_s, MSG_ERROR,
-			"rx_stbc: %d out of range. Must be 0-3 or -1", rx_stbc);
-		return -EINVAL;
-	}
-
-	htcaps_mask->ht_capabilities_info |= msk;
-	htcaps->ht_capabilities_info &= ~msk;
-	htcaps->ht_capabilities_info |= (rx_stbc << 8) & msk;
-
-	return 0;
-}
-
-
 void wpa_supplicant_apply_ht_overrides(
 	struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
 	struct wpa_driver_associate_params *params)
@@ -4627,8 +4498,6 @@
 	wpa_set_disable_ht40(wpa_s, htcaps, htcaps_mask, ssid->disable_ht40);
 	wpa_set_disable_sgi(wpa_s, htcaps, htcaps_mask, ssid->disable_sgi);
 	wpa_set_disable_ldpc(wpa_s, htcaps, htcaps_mask, ssid->disable_ldpc);
-	wpa_set_rx_stbc(wpa_s, htcaps, htcaps_mask, ssid->rx_stbc);
-	wpa_set_tx_stbc(wpa_s, htcaps, htcaps_mask, ssid->tx_stbc);
 
 	if (ssid->ht40_intolerant) {
 		le16 bit = host_to_le16(HT_CAP_INFO_40MHZ_INTOLERANT);
@@ -4663,16 +4532,6 @@
 	vhtcaps_mask->vht_capabilities_info = host_to_le32(ssid->vht_capa_mask);
 
 #ifdef CONFIG_HT_OVERRIDES
-	if (ssid->disable_sgi) {
-		vhtcaps_mask->vht_capabilities_info |= (VHT_CAP_SHORT_GI_80 |
-							VHT_CAP_SHORT_GI_160);
-		vhtcaps->vht_capabilities_info &= ~(VHT_CAP_SHORT_GI_80 |
-						    VHT_CAP_SHORT_GI_160);
-		wpa_msg(wpa_s, MSG_DEBUG,
-			"disable-sgi override specified, vht-caps: 0x%x",
-			vhtcaps->vht_capabilities_info);
-	}
-
 	/* if max ampdu is <= 3, we have to make the HT cap the same */
 	if (ssid->vht_capa_mask & VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MAX) {
 		int max_ampdu;
@@ -5686,12 +5545,6 @@
 		    capa.mac_addr_rand_sched_scan_supported)
 			wpa_s->mac_addr_rand_supported |=
 				(MAC_ADDR_RAND_SCHED_SCAN | MAC_ADDR_RAND_PNO);
-
-		wpa_drv_get_ext_capa(wpa_s, WPA_IF_STATION);
-		if (wpa_s->extended_capa &&
-		    wpa_s->extended_capa_len >= 3 &&
-		    wpa_s->extended_capa[2] & 0x40)
-			wpa_s->multi_bss_support = 1;
 	}
 	if (wpa_s->max_remain_on_chan == 0)
 		wpa_s->max_remain_on_chan = 1000;
@@ -7351,14 +7204,16 @@
 
 
 void wpa_bss_tmp_disallow(struct wpa_supplicant *wpa_s, const u8 *bssid,
-			  unsigned int sec, int rssi_threshold)
+			  unsigned int sec)
 {
 	struct wpa_bss_tmp_disallowed *bss;
 
 	bss = wpas_get_disallowed_bss(wpa_s, bssid);
 	if (bss) {
 		eloop_cancel_timeout(wpa_bss_tmp_disallow_timeout, wpa_s, bss);
-		goto finish;
+		eloop_register_timeout(sec, 0, wpa_bss_tmp_disallow_timeout,
+				       wpa_s, bss);
+		return;
 	}
 
 	bss = os_malloc(sizeof(*bss));
@@ -7371,31 +7226,23 @@
 	os_memcpy(bss->bssid, bssid, ETH_ALEN);
 	dl_list_add(&wpa_s->bss_tmp_disallowed, &bss->list);
 	wpa_set_driver_tmp_disallow_list(wpa_s);
-
-finish:
-	bss->rssi_threshold = rssi_threshold;
 	eloop_register_timeout(sec, 0, wpa_bss_tmp_disallow_timeout,
 			       wpa_s, bss);
 }
 
 
-int wpa_is_bss_tmp_disallowed(struct wpa_supplicant *wpa_s,
-			      struct wpa_bss *bss)
+int wpa_is_bss_tmp_disallowed(struct wpa_supplicant *wpa_s, const u8 *bssid)
 {
-	struct wpa_bss_tmp_disallowed *disallowed = NULL, *tmp, *prev;
+	struct wpa_bss_tmp_disallowed *bss = NULL, *tmp, *prev;
 
 	dl_list_for_each_safe(tmp, prev, &wpa_s->bss_tmp_disallowed,
 			 struct wpa_bss_tmp_disallowed, list) {
-		if (os_memcmp(bss->bssid, tmp->bssid, ETH_ALEN) == 0) {
-			disallowed = tmp;
+		if (os_memcmp(bssid, tmp->bssid, ETH_ALEN) == 0) {
+			bss = tmp;
 			break;
 		}
 	}
-	if (!disallowed)
-		return 0;
-
-	if (disallowed->rssi_threshold != 0 &&
-	    bss->level > disallowed->rssi_threshold)
+	if (!bss)
 		return 0;
 
 	return 1;
diff --git a/wpa_supplicant/wpa_supplicant.conf b/wpa_supplicant/wpa_supplicant.conf
index 1bd43b2..4f59160 100644
--- a/wpa_supplicant/wpa_supplicant.conf
+++ b/wpa_supplicant/wpa_supplicant.conf
@@ -907,13 +907,6 @@
 # PMF required: ieee80211w=2 and key_mgmt=WPA-EAP-SHA256
 # (and similarly for WPA-PSK and WPA-WPSK-SHA256 if WPA2-Personal is used)
 #
-# ocv: whether operating channel validation is enabled
-# This is a countermeasure against multi-channel man-in-the-middle attacks.
-# Enabling this automatically also enables ieee80211w, if not yet enabled.
-# 0 = disabled (default)
-# 1 = enabled
-#ocv=1
-#
 # auth_alg: list of allowed IEEE 802.11 authentication algorithms
 # OPEN = Open System authentication (required for WPA/WPA2)
 # SHARED = Shared Key authentication (requires static WEP keys)
@@ -994,22 +987,6 @@
 # 0: Encrypt traffic (default)
 # 1: Integrity only
 #
-# macsec_replay_protect: IEEE 802.1X/MACsec replay protection
-# This setting applies only when MACsec is in use, i.e.,
-#  - macsec_policy is enabled
-#  - the key server has decided to enable MACsec
-# 0: Replay protection disabled (default)
-# 1: Replay protection enabled
-#
-# macsec_replay_window: IEEE 802.1X/MACsec replay protection window
-# This determines a window in which replay is tolerated, to allow receipt
-# of frames that have been misordered by the network.
-# This setting applies only when MACsec replay protection active, i.e.,
-#  - macsec_replay_protect is enabled
-#  - the key server has decided to enable MACsec
-# 0: No replay window, strict check (default)
-# 1..2^32-1: number of packets that could be misordered
-#
 # macsec_port: IEEE 802.1X/MACsec port
 # Port component of the SCI
 # Range: 1-65534 (default: 1)
@@ -1018,10 +995,9 @@
 # This allows to configure MACsec with a pre-shared key using a (CAK,CKN) pair.
 # In this mode, instances of wpa_supplicant can act as MACsec peers. The peer
 # with lower priority will become the key server and start distributing SAKs.
-# mka_cak (CAK = Secure Connectivity Association Key) takes a 16-byte (128-bit)
-# hex-string (32 hex-digits) or a 32-byte (256-bit) hex-string (64 hex-digits)
-# mka_ckn (CKN = CAK Name) takes a 1..32-bytes (8..256 bit) hex-string
-# (2..64 hex-digits)
+# mka_cak (CAK = Secure Connectivity Association Key) takes a 16-bytes (128 bit)
+# hex-string (32 hex-digits)
+# mka_ckn (CKN = CAK Name) takes a 32-bytes (256 bit) hex-string (64 hex-digits)
 # mka_priority (Priority of MKA Actor) is in 0..255 range with 255 being
 # default priority
 #
@@ -1240,19 +1216,12 @@
 #	For EAP-FAST, this must be set to 0 (or left unconfigured for the
 #	default value to be used automatically).
 # tls_disable_tlsv1_0=1 - disable use of TLSv1.0
-# tls_disable_tlsv1_0=0 - explicitly enable use of TLSv1.0 (this allows
-#	systemwide TLS policies to be overridden)
 # tls_disable_tlsv1_1=1 - disable use of TLSv1.1 (a workaround for AAA servers
 #	that have issues interoperating with updated TLS version)
-# tls_disable_tlsv1_1=0 - explicitly enable use of TLSv1.1 (this allows
-#	systemwide TLS policies to be overridden)
 # tls_disable_tlsv1_2=1 - disable use of TLSv1.2 (a workaround for AAA servers
 #	that have issues interoperating with updated TLS version)
-# tls_disable_tlsv1_2=0 - explicitly enable use of TLSv1.2 (this allows
-#	systemwide TLS policies to be overridden)
 # tls_disable_tlsv1_3=1 - disable use of TLSv1.3 (a workaround for AAA servers
 #	that have issues interoperating with updated TLS version)
-# tls_disable_tlsv1_3=0 - enable TLSv1.3 (experimental - disabled by default)
 # tls_ext_cert_check=0 - No external server certificate validation (default)
 # tls_ext_cert_check=1 - External server certificate validation enabled; this
 #	requires an external program doing validation of server certificate
@@ -1412,20 +1381,6 @@
 #  Treated as hint by the kernel.
 # -1 = Do not make any changes.
 # 0-3 = Set AMPDU density (aka factor) to specified value.
-#
-# tx_stbc: Allow overriding STBC support for TX streams
-# Value: 0-1, see IEEE Std 802.11-2016, 9.4.2.56.2.
-# -1 = Do not make any changes (default)
-# 0 = Set if not supported
-# 1 = Set if supported
-#
-# rx_stbc: Allow overriding STBC support for RX streams
-# Value: 0-3, see IEEE Std 802.11-2016, 9.4.2.56.2.
-# -1 = Do not make any changes (default)
-# 0 = Set if not supported
-# 1 = Set for support of one spatial stream
-# 2 = Set for support of one and two spatial streams
-# 3 = Set for support of one, two and three spatial streams
 
 # disable_vht: Whether VHT should be disabled.
 # 0 = VHT enabled (if AP supports it)
@@ -1441,13 +1396,6 @@
 #  2: MCS 0-9
 #  3: not supported
 
-# multi_ap_backhaul_sta: Multi-AP backhaul STA functionality
-# 0 = normal STA (default)
-# 1 = backhaul STA
-# A backhaul STA sends the Multi-AP IE, fails to associate if the AP does not
-# support Multi-AP, and sets 4-address mode if it does. Thus, the netdev can be
-# added to a bridge to allow forwarding frames over this backhaul link.
-
 ##### Fast Session Transfer (FST) support #####################################
 #
 # The options in this section are only available when the build configuration
diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h
index 9cb4ad3..abacaa9 100644
--- a/wpa_supplicant/wpa_supplicant_i.h
+++ b/wpa_supplicant/wpa_supplicant_i.h
@@ -451,12 +451,10 @@
 struct wpa_bss_tmp_disallowed {
 	struct dl_list list;
 	u8 bssid[ETH_ALEN];
-	int rssi_threshold;
 };
 
 struct beacon_rep_data {
 	u8 token;
-	u8 last_indication;
 	struct wpa_driver_scan_params scan_params;
 	u8 ssid[SSID_MAX_LEN];
 	size_t ssid_len;
@@ -494,10 +492,6 @@
 	struct wpa_supplicant *next;
 	struct l2_packet_data *l2;
 	struct l2_packet_data *l2_br;
-	struct os_reltime roam_start;
-	struct os_reltime roam_time;
-	struct os_reltime session_start;
-	struct os_reltime session_length;
 	unsigned char own_addr[ETH_ALEN];
 	unsigned char perm_addr[ETH_ALEN];
 	char ifname[100];
@@ -820,7 +814,6 @@
 	unsigned int mesh_if_created:1;
 	unsigned int mesh_ht_enabled:1;
 	unsigned int mesh_vht_enabled:1;
-	struct wpa_driver_mesh_join_params *mesh_params;
 #ifdef CONFIG_PMKSA_CACHE_EXTERNAL
 	/* struct external_pmksa_cache::list */
 	struct dl_list mesh_external_pmksa_cache;
@@ -918,7 +911,6 @@
 	unsigned int p2p_pd_before_go_neg:1;
 	unsigned int p2p_go_ht40:1;
 	unsigned int p2p_go_vht:1;
-	unsigned int p2p_go_he:1;
 	unsigned int user_initiated_pd:1;
 	unsigned int p2p_go_group_formation_completed:1;
 	unsigned int group_formation_reported:1;
@@ -1026,10 +1018,6 @@
 	/* WLAN_REASON_* reason codes. Negative if locally generated. */
 	int disconnect_reason;
 
-	/* WLAN_STATUS_* status codes from last received Authentication frame
-	 * from the AP. */
-	u16 auth_status_code;
-
 	/* WLAN_STATUS_* status codes from (Re)Association Response frame. */
 	u16 assoc_status_code;
 	/* Indicates if the previous association request timed out. */
@@ -1073,7 +1061,6 @@
 	struct neighbor_report *wnm_neighbor_report_elements;
 	struct os_reltime wnm_cand_valid_until;
 	u8 wnm_cand_from_bss[ETH_ALEN];
-	enum bss_trans_mgmt_status_code bss_tm_status;
 	struct wpabuf *coloc_intf_elems;
 	u8 coloc_intf_dialog_token;
 	u8 coloc_intf_auto_report;
@@ -1249,8 +1236,6 @@
 	unsigned int disable_fils:1;
 #endif /* CONFIG_FILS */
 	unsigned int ieee80211ac:1;
-	unsigned int enabled_4addr_mode:1;
-	unsigned int multi_bss_support:1;
 };
 
 
@@ -1386,8 +1371,6 @@
 		int add_oce_capa);
 const u8 * mbo_attr_from_mbo_ie(const u8 *mbo_ie, enum mbo_attr_id attr);
 const u8 * wpas_mbo_get_bss_attr(struct wpa_bss *bss, enum mbo_attr_id attr);
-const u8 * mbo_get_attr_from_ies(const u8 *ies, size_t ies_len,
-				 enum mbo_attr_id attr);
 int wpas_mbo_update_non_pref_chan(struct wpa_supplicant *wpa_s,
 				  const char *non_pref_chan);
 void wpas_mbo_scan_ie(struct wpa_supplicant *wpa_s, struct wpabuf *ie);
@@ -1410,9 +1393,8 @@
 
 enum chan_allowed verify_channel(struct hostapd_hw_modes *mode, u8 channel,
 				 u8 bw);
-size_t wpas_supp_op_class_ie(struct wpa_supplicant *wpa_s,
-			     struct wpa_ssid *ssid,
-			     int freq, u8 *pos, size_t len);
+size_t wpas_supp_op_class_ie(struct wpa_supplicant *wpa_s, int freq, u8 *pos,
+			      size_t len);
 
 /**
  * wpa_supplicant_ctrl_iface_ctrl_rsp_handle - Handle a control response
@@ -1459,8 +1441,6 @@
 struct wpa_bss * wpa_supplicant_pick_network(struct wpa_supplicant *wpa_s,
 					     struct wpa_ssid **selected_ssid);
 int wpas_temp_disabled(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
-void wpa_supplicant_update_channel_list(struct wpa_supplicant *wpa_s,
-					struct channel_list_changed *info);
 
 /* eap_register.c */
 int eap_register_methods(void);
@@ -1513,10 +1493,8 @@
 				   u16 num_modes, enum hostapd_hw_mode mode);
 
 void wpa_bss_tmp_disallow(struct wpa_supplicant *wpa_s, const u8 *bssid,
-			  unsigned int sec, int rssi_threshold);
-int wpa_is_bss_tmp_disallowed(struct wpa_supplicant *wpa_s,
-			      struct wpa_bss *bss);
-void free_bss_tmp_disallowed(struct wpa_supplicant *wpa_s);
+			  unsigned int sec);
+int wpa_is_bss_tmp_disallowed(struct wpa_supplicant *wpa_s, const u8 *bssid);
 
 struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s,
 				     int i, struct wpa_bss *bss,
diff --git a/wpa_supplicant/wpas_glue.c b/wpa_supplicant/wpas_glue.c
index 449e04a..4634ed7 100644
--- a/wpa_supplicant/wpas_glue.c
+++ b/wpa_supplicant/wpas_glue.c
@@ -296,7 +296,7 @@
 	}
 
 	if (result != EAPOL_SUPP_RESULT_SUCCESS ||
-	    !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X))
+	    !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE))
 		return;
 
 	if (!wpa_key_mgmt_wpa_ieee8021x(wpa_s->key_mgmt))
@@ -1183,15 +1183,6 @@
 	os_free(hex);
 }
 
-
-static int wpa_supplicant_channel_info(void *_wpa_s,
-				       struct wpa_channel_info *ci)
-{
-	struct wpa_supplicant *wpa_s = _wpa_s;
-
-	return wpa_drv_channel_info(wpa_s, ci);
-}
-
 #endif /* CONFIG_NO_WPA */
 
 
@@ -1242,7 +1233,6 @@
 	ctx->set_rekey_offload = wpa_supplicant_set_rekey_offload;
 	ctx->key_mgmt_set_pmk = wpa_supplicant_key_mgmt_set_pmk;
 	ctx->fils_hlp_rx = wpa_supplicant_fils_hlp_rx;
-	ctx->channel_info = wpa_supplicant_channel_info;
 
 	wpa_s->wpa = wpa_sm_init(ctx);
 	if (wpa_s->wpa == NULL) {
diff --git a/wpa_supplicant/wpas_kay.c b/wpa_supplicant/wpas_kay.c
index 41477d5..d3d06b8 100644
--- a/wpa_supplicant/wpas_kay.c
+++ b/wpa_supplicant/wpas_kay.c
@@ -92,12 +92,6 @@
 }
 
 
-static int wpas_set_receive_lowest_pn(void *wpa_s, struct receive_sa *sa)
-{
-	return wpa_drv_set_receive_lowest_pn(wpa_s, sa);
-}
-
-
 static unsigned int conf_offset_val(enum confidentiality_offset co)
 {
 	switch (co) {
@@ -225,7 +219,6 @@
 	kay_ctx->get_receive_lowest_pn = wpas_get_receive_lowest_pn;
 	kay_ctx->get_transmit_next_pn = wpas_get_transmit_next_pn;
 	kay_ctx->set_transmit_next_pn = wpas_set_transmit_next_pn;
-	kay_ctx->set_receive_lowest_pn = wpas_set_receive_lowest_pn;
 	kay_ctx->create_receive_sc = wpas_create_receive_sc;
 	kay_ctx->delete_receive_sc = wpas_delete_receive_sc;
 	kay_ctx->create_receive_sa = wpas_create_receive_sa;
@@ -239,8 +232,7 @@
 	kay_ctx->enable_transmit_sa = wpas_enable_transmit_sa;
 	kay_ctx->disable_transmit_sa = wpas_disable_transmit_sa;
 
-	res = ieee802_1x_kay_init(kay_ctx, policy, ssid->macsec_replay_protect,
-				  ssid->macsec_replay_window, ssid->macsec_port,
+	res = ieee802_1x_kay_init(kay_ctx, policy, ssid->macsec_port,
 				  ssid->mka_priority, wpa_s->ifname,
 				  wpa_s->own_addr);
 	/* ieee802_1x_kay_init() frees kay_ctx on failure */
@@ -357,8 +349,8 @@
 
 	/* Derive CAK from MSK */
 	cak->len = DEFAULT_KEY_LEN;
-	if (ieee802_1x_cak_aes_cmac(msk->key, msk->len, wpa_s->own_addr,
-				    peer_addr, cak->key, cak->len)) {
+	if (ieee802_1x_cak_128bits_aes_cmac(msk->key, wpa_s->own_addr,
+					    peer_addr, cak->key)) {
 		wpa_printf(MSG_ERROR,
 			   "IEEE 802.1X: Deriving CAK failed");
 		goto fail;
@@ -367,8 +359,9 @@
 
 	/* Derive CKN from MSK */
 	ckn->len = DEFAULT_CKN_LEN;
-	if (ieee802_1x_ckn_aes_cmac(msk->key, msk->len, wpa_s->own_addr,
-				    peer_addr, sid, sid_len, ckn->name)) {
+	if (ieee802_1x_ckn_128bits_aes_cmac(msk->key, wpa_s->own_addr,
+					    peer_addr, sid, sid_len,
+					    ckn->name)) {
 		wpa_printf(MSG_ERROR,
 			   "IEEE 802.1X: Deriving CKN failed");
 		goto fail;
@@ -418,10 +411,10 @@
 	if (wpa_s->kay->policy == DO_NOT_SECURE)
 		goto dealloc;
 
-	cak->len = ssid->mka_cak_len;
+	cak->len = MACSEC_CAK_LEN;
 	os_memcpy(cak->key, ssid->mka_cak, cak->len);
 
-	ckn->len = ssid->mka_ckn_len;
+	ckn->len = MACSEC_CKN_LEN;
 	os_memcpy(ckn->name, ssid->mka_ckn, ckn->len);
 
 	res = ieee802_1x_kay_create_mka(wpa_s->kay, ckn, cak, 0, PSK, FALSE);