diff --git a/src/common/defs.h b/src/common/defs.h
index 4faf1c8..c968cd6 100644
--- a/src/common/defs.h
+++ b/src/common/defs.h
@@ -59,13 +59,6 @@
 #define WPA_KEY_MGMT_DPP BIT(23)
 #define WPA_KEY_MGMT_FT_IEEE8021X_SHA384 BIT(24)
 
-#define WPA_KEY_MGMT_FT (WPA_KEY_MGMT_FT_PSK | \
-			 WPA_KEY_MGMT_FT_IEEE8021X | \
-			 WPA_KEY_MGMT_FT_IEEE8021X_SHA384 | \
-			 WPA_KEY_MGMT_FT_SAE | \
-			 WPA_KEY_MGMT_FT_FILS_SHA256 | \
-			 WPA_KEY_MGMT_FT_FILS_SHA384)
-
 static inline int wpa_key_mgmt_wpa_ieee8021x(int akm)
 {
 	return !!(akm & (WPA_KEY_MGMT_IEEE8021X |
@@ -93,14 +86,12 @@
 
 static inline int wpa_key_mgmt_ft(int akm)
 {
-	return !!(akm & WPA_KEY_MGMT_FT);
-}
-
-static inline int wpa_key_mgmt_only_ft(int akm)
-{
-	int ft = wpa_key_mgmt_ft(akm);
-	akm &= ~WPA_KEY_MGMT_FT;
-	return ft && !akm;
+	return !!(akm & (WPA_KEY_MGMT_FT_PSK |
+			 WPA_KEY_MGMT_FT_IEEE8021X |
+			 WPA_KEY_MGMT_FT_IEEE8021X_SHA384 |
+			 WPA_KEY_MGMT_FT_SAE |
+			 WPA_KEY_MGMT_FT_FILS_SHA256 |
+			 WPA_KEY_MGMT_FT_FILS_SHA384));
 }
 
 static inline int wpa_key_mgmt_ft_psk(int akm)
@@ -408,15 +399,4 @@
 #define OCE_STA_CFON BIT(1)
 #define OCE_AP BIT(2)
 
-/* enum chan_width - Channel width definitions */
-enum chan_width {
-	CHAN_WIDTH_20_NOHT,
-	CHAN_WIDTH_20,
-	CHAN_WIDTH_40,
-	CHAN_WIDTH_80,
-	CHAN_WIDTH_80P80,
-	CHAN_WIDTH_160,
-	CHAN_WIDTH_UNKNOWN
-};
-
 #endif /* DEFS_H */
diff --git a/src/common/dpp.c b/src/common/dpp.c
index bcb694b..677f586 100644
--- a/src/common/dpp.c
+++ b/src/common/dpp.c
@@ -813,9 +813,7 @@
 	const unsigned char *pk;
 	int ppklen;
 	X509_ALGOR *pa;
-#if OPENSSL_VERSION_NUMBER < 0x10100000L || \
-	(defined(LIBRESSL_VERSION_NUMBER) && \
-	 LIBRESSL_VERSION_NUMBER < 0x20800000L)
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
 	ASN1_OBJECT *pa_oid;
 #else
 	const ASN1_OBJECT *pa_oid;
@@ -2856,7 +2854,7 @@
 		i_pubkey_hash = test_hash;
 	} else if (dpp_test == DPP_TEST_NO_STATUS_AUTH_RESP) {
 		wpa_printf(MSG_INFO, "DPP: TESTING - no Status");
-		status = 255;
+		status = -1;
 	} else if (dpp_test == DPP_TEST_NO_I_NONCE_AUTH_RESP) {
 		wpa_printf(MSG_INFO, "DPP: TESTING - no I-nonce");
 		i_nonce = NULL;
@@ -3459,7 +3457,7 @@
 	}
 #endif /* CONFIG_TESTING_OPTIONS */
 
-	if (!auth->initiator || !auth->peer_bi) {
+	if (!auth->initiator) {
 		dpp_auth_fail(auth, "Unexpected Authentication Response");
 		return NULL;
 	}
@@ -3640,7 +3638,7 @@
 		goto fail;
 	}
 
-	if (auth->own_bi) {
+	if (auth->own_bi && auth->peer_bi) {
 		/* Mutual authentication */
 		if (dpp_auth_derive_l_initiator(auth) < 0)
 			goto fail;
@@ -3848,7 +3846,7 @@
 	}
 #endif /* CONFIG_TESTING_OPTIONS */
 
-	if (auth->initiator || !auth->own_bi) {
+	if (auth->initiator) {
 		dpp_auth_fail(auth, "Unexpected Authentication Confirm");
 		return -1;
 	}
@@ -3906,7 +3904,7 @@
 				      "Initiator Bootstrapping Key Hash mismatch");
 			return -1;
 		}
-	} else if (auth->peer_bi) {
+	} else if (auth->own_bi && auth->peer_bi) {
 		/* Mutual authentication and peer did not include its
 		 * Bootstrapping Key Hash attribute. */
 		dpp_auth_fail(auth,
@@ -4759,7 +4757,7 @@
 		goto fail;
 	}
 	if (os_strcmp(token->string, "EC") != 0) {
-		wpa_printf(MSG_DEBUG, "DPP: Unexpected JWK kty '%s'",
+		wpa_printf(MSG_DEBUG, "DPP: Unexpected JWK kty '%s",
 			   token->string);
 		goto fail;
 	}
@@ -6588,32 +6586,6 @@
 }
 
 
-static int dpp_pkex_identifier_match(const u8 *attr_id, u16 attr_id_len,
-				     const char *identifier)
-{
-	if (!attr_id && identifier) {
-		wpa_printf(MSG_DEBUG,
-			   "DPP: No PKEX code identifier received, but expected one");
-		return 0;
-	}
-
-	if (attr_id && !identifier) {
-		wpa_printf(MSG_DEBUG,
-			   "DPP: PKEX code identifier received, but not expecting one");
-		return 0;
-	}
-
-	if (attr_id && identifier &&
-	    (os_strlen(identifier) != attr_id_len ||
-	     os_memcmp(identifier, attr_id, attr_id_len) != 0)) {
-		wpa_printf(MSG_DEBUG, "DPP: PKEX code identifier mismatch");
-		return 0;
-	}
-
-	return 1;
-}
-
-
 struct dpp_pkex * dpp_pkex_rx_exchange_req(void *msg_ctx,
 					   struct dpp_bootstrap_info *bi,
 					   const u8 *own_mac,
@@ -6658,11 +6630,19 @@
 	}
 #endif /* CONFIG_TESTING_OPTIONS */
 
-	attr_id_len = 0;
 	attr_id = dpp_get_attr(buf, len, DPP_ATTR_CODE_IDENTIFIER,
 			       &attr_id_len);
-	if (!dpp_pkex_identifier_match(attr_id, attr_id_len, identifier))
+	if (!attr_id && identifier) {
+		wpa_printf(MSG_DEBUG,
+			   "DPP: No PKEX code identifier received, but expected one");
 		return NULL;
+	}
+	if (attr_id && identifier &&
+	    (os_strlen(identifier) != attr_id_len ||
+	     os_memcmp(identifier, attr_id, attr_id_len) != 0)) {
+		wpa_printf(MSG_DEBUG, "DPP: PKEX code identifier mismatch");
+		return NULL;
+	}
 
 	attr_group = dpp_get_attr(buf, len, DPP_ATTR_FINITE_CYCLIC_GROUP,
 				  &attr_group_len);
@@ -7034,11 +7014,16 @@
 		return NULL;
 	}
 
-	attr_id_len = 0;
 	attr_id = dpp_get_attr(buf, buflen, DPP_ATTR_CODE_IDENTIFIER,
 			       &attr_id_len);
-	if (!dpp_pkex_identifier_match(attr_id, attr_id_len,
-				       pkex->identifier)) {
+	if (!attr_id && pkex->identifier) {
+		wpa_printf(MSG_DEBUG,
+			   "DPP: No PKEX code identifier received, but expected one");
+		return NULL;
+	}
+	if (attr_id && pkex->identifier &&
+	    (os_strlen(pkex->identifier) != attr_id_len ||
+	     os_memcmp(pkex->identifier, attr_id, attr_id_len) != 0)) {
 		dpp_pkex_fail(pkex, "PKEX code identifier mismatch");
 		return NULL;
 	}
diff --git a/src/common/gas_server.c b/src/common/gas_server.c
index ca46758..b258675 100644
--- a/src/common/gas_server.c
+++ b/src/common/gas_server.c
@@ -97,10 +97,8 @@
 		return;
 
 	response = os_zalloc(sizeof(*response));
-	if (!response) {
-		wpabuf_free(query_resp);
+	if (!response)
 		return;
-	}
 	wpa_printf(MSG_DEBUG, "DPP: Allocated GAS response @%p", response);
 	response->freq = freq;
 	response->handler = handler;
@@ -121,7 +119,6 @@
 				      handler->adv_proto_id_len +
 				      resp_frag_len);
 	if (!resp) {
-		wpabuf_free(query_resp);
 		gas_server_free_response(response);
 		return;
 	}
@@ -260,7 +257,6 @@
 				       handler->adv_proto_id_len +
 				       resp_frag_len);
 	if (!resp) {
-		dl_list_del(&response->list);
 		gas_server_free_response(response);
 		return;
 	}
diff --git a/src/common/hw_features_common.c b/src/common/hw_features_common.c
index 49ed806..db40379 100644
--- a/src/common/hw_features_common.c
+++ b/src/common/hw_features_common.c
@@ -87,29 +87,13 @@
 int allowed_ht40_channel_pair(struct hostapd_hw_modes *mode, int pri_chan,
 			      int sec_chan)
 {
-	int ok, first;
+	int ok, j, first;
 	int allowed[] = { 36, 44, 52, 60, 100, 108, 116, 124, 132, 140,
 			  149, 157, 165, 184, 192 };
 	size_t k;
-	struct hostapd_channel_data *p_chan, *s_chan;
-	const int ht40_plus = pri_chan < sec_chan;
 
-	p_chan = hw_get_channel_chan(mode, pri_chan, NULL);
-	if (!p_chan)
-		return 0;
-
-	if (pri_chan == sec_chan || !sec_chan) {
-		if (chan_pri_allowed(p_chan))
-			return 1; /* HT40 not used */
-
-		wpa_printf(MSG_ERROR, "Channel %d is not allowed as primary",
-			   pri_chan);
-		return 0;
-	}
-
-	s_chan = hw_get_channel_chan(mode, sec_chan, NULL);
-	if (!s_chan)
-		return 0;
+	if (pri_chan == sec_chan || !sec_chan)
+		return 1; /* HT40 not used */
 
 	wpa_printf(MSG_DEBUG,
 		   "HT40: control channel: %d  secondary channel: %d",
@@ -117,9 +101,16 @@
 
 	/* Verify that HT40 secondary channel is an allowed 20 MHz
 	 * channel */
-	if ((s_chan->flag & HOSTAPD_CHAN_DISABLED) ||
-	    (ht40_plus && !(p_chan->allowed_bw & HOSTAPD_CHAN_WIDTH_40P)) ||
-	    (!ht40_plus && !(p_chan->allowed_bw & HOSTAPD_CHAN_WIDTH_40M))) {
+	ok = 0;
+	for (j = 0; j < mode->num_channels; j++) {
+		struct hostapd_channel_data *chan = &mode->channels[j];
+		if (!(chan->flag & HOSTAPD_CHAN_DISABLED) &&
+		    chan->chan == sec_chan) {
+			ok = 1;
+			break;
+		}
+	}
+	if (!ok) {
 		wpa_printf(MSG_ERROR, "HT40 secondary channel %d not allowed",
 			   sec_chan);
 		return 0;
@@ -562,59 +553,3 @@
 }
 
 #endif /* CONFIG_IEEE80211AC */
-
-
-u32 num_chan_to_bw(int num_chans)
-{
-	switch (num_chans) {
-	case 2:
-	case 4:
-	case 8:
-		return num_chans * 20;
-	default:
-		return 20;
-	}
-}
-
-
-/* check if BW is applicable for channel */
-int chan_bw_allowed(const struct hostapd_channel_data *chan, u32 bw,
-		    int ht40_plus, int pri)
-{
-	u32 bw_mask;
-
-	switch (bw) {
-	case 20:
-		bw_mask = HOSTAPD_CHAN_WIDTH_20;
-		break;
-	case 40:
-		/* HT 40 MHz support declared only for primary channel,
-		 * just skip 40 MHz secondary checking */
-		if (pri && ht40_plus)
-			bw_mask = HOSTAPD_CHAN_WIDTH_40P;
-		else if (pri && !ht40_plus)
-			bw_mask = HOSTAPD_CHAN_WIDTH_40M;
-		else
-			bw_mask = 0;
-		break;
-	case 80:
-		bw_mask = HOSTAPD_CHAN_WIDTH_80;
-		break;
-	case 160:
-		bw_mask = HOSTAPD_CHAN_WIDTH_160;
-		break;
-	default:
-		bw_mask = 0;
-		break;
-	}
-
-	return (chan->allowed_bw & bw_mask) == bw_mask;
-}
-
-
-/* check if channel is allowed to be used as primary */
-int chan_pri_allowed(const struct hostapd_channel_data *chan)
-{
-	return !(chan->flag & HOSTAPD_CHAN_DISABLED) &&
-		(chan->allowed_bw & HOSTAPD_CHAN_WIDTH_20);
-}
diff --git a/src/common/hw_features_common.h b/src/common/hw_features_common.h
index eb1f1c5..9cddbd5 100644
--- a/src/common/hw_features_common.h
+++ b/src/common/hw_features_common.h
@@ -39,9 +39,4 @@
 		      int disabled);
 int ieee80211ac_cap_check(u32 hw, u32 conf);
 
-u32 num_chan_to_bw(int num_chans);
-int chan_bw_allowed(const struct hostapd_channel_data *chan, u32 bw,
-		    int ht40_plus, int pri);
-int chan_pri_allowed(const struct hostapd_channel_data *chan);
-
 #endif /* HW_FEATURES_COMMON_H */
diff --git a/src/common/ieee802_11_common.c b/src/common/ieee802_11_common.c
index 9627799..4fd3357 100644
--- a/src/common/ieee802_11_common.c
+++ b/src/common/ieee802_11_common.c
@@ -1,6 +1,6 @@
 /*
  * IEEE 802.11 Common routines
- * Copyright (c) 2002-2019, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2002-2015, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -126,10 +126,6 @@
 			elems->roaming_cons_sel = pos;
 			elems->roaming_cons_sel_len = elen;
 			break;
-		case MULTI_AP_OUI_TYPE:
-			elems->multi_ap = pos;
-			elems->multi_ap_len = elen;
-			break;
 		default:
 			wpa_printf(MSG_MSGDUMP, "Unknown WFA "
 				   "information element ignored "
@@ -270,10 +266,6 @@
 		elems->password_id = pos;
 		elems->password_id_len = elen;
 		break;
-	case WLAN_EID_EXT_OCV_OCI:
-		elems->oci = pos;
-		elems->oci_len = elen;
-		break;
 	default:
 		if (show_errors) {
 			wpa_printf(MSG_MSGDUMP,
@@ -906,41 +898,6 @@
 }
 
 
-int ieee80211_chaninfo_to_channel(unsigned int freq, enum chan_width chanwidth,
-				  int sec_channel, u8 *op_class, u8 *channel)
-{
-	int vht = CHAN_WIDTH_UNKNOWN;
-
-	switch (chanwidth) {
-	case CHAN_WIDTH_UNKNOWN:
-	case CHAN_WIDTH_20_NOHT:
-	case CHAN_WIDTH_20:
-	case CHAN_WIDTH_40:
-		vht = VHT_CHANWIDTH_USE_HT;
-		break;
-	case CHAN_WIDTH_80:
-		vht = VHT_CHANWIDTH_80MHZ;
-		break;
-	case CHAN_WIDTH_80P80:
-		vht = VHT_CHANWIDTH_80P80MHZ;
-		break;
-	case CHAN_WIDTH_160:
-		vht = VHT_CHANWIDTH_160MHZ;
-		break;
-	}
-
-	if (ieee80211_freq_to_channel_ext(freq, sec_channel, vht, op_class,
-					  channel) == NUM_HOSTAPD_MODES) {
-		wpa_printf(MSG_WARNING,
-			   "Cannot determine operating class and channel (freq=%u chanwidth=%d sec_channel=%d)",
-			   freq, chanwidth, sec_channel);
-		return -1;
-	}
-
-	return 0;
-}
-
-
 static const char *const us_op_class_cc[] = {
 	"US", "CA", NULL
 };
@@ -1540,24 +1497,6 @@
 }
 
 
-const u8 * get_vendor_ie(const u8 *ies, size_t len, u32 vendor_type)
-{
-	const u8 *pos = ies, *end = ies + len;
-
-	while (end - pos > 1) {
-		if (2 + pos[1] > end - pos)
-			break;
-
-		if (pos[0] == WLAN_EID_VENDOR_SPECIFIC && pos[1] >= 4 &&
-		    vendor_type == WPA_GET_BE32(&pos[2]))
-			return pos;
-		pos += 2 + pos[1];
-	}
-
-	return NULL;
-}
-
-
 size_t mbo_add_ie(u8 *buf, size_t len, const u8 *attr, size_t attr_len)
 {
 	/*
@@ -1582,26 +1521,6 @@
 }
 
 
-size_t add_multi_ap_ie(u8 *buf, size_t len, u8 value)
-{
-	u8 *pos = buf;
-
-	if (len < 9)
-		return 0;
-
-	*pos++ = WLAN_EID_VENDOR_SPECIFIC;
-	*pos++ = 7; /* len */
-	WPA_PUT_BE24(pos, OUI_WFA);
-	pos += 3;
-	*pos++ = MULTI_AP_OUI_TYPE;
-	*pos++ = MULTI_AP_SUB_ELEM_TYPE;
-	*pos++ = 1; /* len */
-	*pos++ = value;
-
-	return pos - buf;
-}
-
-
 static const struct country_op_class us_op_class[] = {
 	{ 1, 115 },
 	{ 2, 118 },
@@ -1747,27 +1666,6 @@
 }
 
 
-int oper_class_bw_to_int(const struct oper_class_map *map)
-{
-	switch (map->bw) {
-	case BW20:
-		return 20;
-	case BW40PLUS:
-	case BW40MINUS:
-		return 40;
-	case BW80:
-		return 80;
-	case BW80P80:
-	case BW160:
-		return 160;
-	case BW2160:
-		return 2160;
-	default:
-		return 0;
-	}
-}
-
-
 int ieee802_11_parse_candidate_list(const char *pos, u8 *nei_rep,
 				    size_t nei_rep_len)
 {
@@ -1868,11 +1766,3 @@
 
 	return nei_pos - nei_rep;
 }
-
-
-int ieee802_11_ext_capab(const u8 *ie, unsigned int capab)
-{
-	if (!ie || ie[1] <= capab / 8)
-		return 0;
-	return !!(ie[2 + capab / 8] & BIT(capab % 8));
-}
diff --git a/src/common/ieee802_11_common.h b/src/common/ieee802_11_common.h
index ce3bb8b..ff7e51d 100644
--- a/src/common/ieee802_11_common.h
+++ b/src/common/ieee802_11_common.h
@@ -1,6 +1,6 @@
 /*
  * IEEE 802.11 Common routines
- * Copyright (c) 2002-2019, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2002-2012, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -10,7 +10,6 @@
 #define IEEE802_11_COMMON_H
 
 #include "defs.h"
-#include "ieee802_11_defs.h"
 
 struct hostapd_hw_modes;
 
@@ -85,8 +84,6 @@
 	const u8 *power_capab;
 	const u8 *roaming_cons_sel;
 	const u8 *password_id;
-	const u8 *oci;
-	const u8 *multi_ap;
 
 	u8 ssid_len;
 	u8 supp_rates_len;
@@ -133,8 +130,6 @@
 	u8 power_capab_len;
 	u8 roaming_cons_sel_len;
 	u8 password_id_len;
-	u8 oci_len;
-	u8 multi_ap_len;
 
 	struct mb_ies_info mb_ies;
 };
@@ -165,8 +160,6 @@
 enum hostapd_hw_mode ieee80211_freq_to_channel_ext(unsigned int freq,
 						   int sec_channel, int vht,
 						   u8 *op_class, u8 *channel);
-int ieee80211_chaninfo_to_channel(unsigned int freq, enum chan_width chanwidth,
-				  int sec_channel, u8 *op_class, u8 *channel);
 int ieee80211_is_dfs(int freq, const struct hostapd_hw_modes *modes,
 		     u16 num_modes);
 enum phy_type ieee80211_get_phy_type(int freq, int ht, int vht);
@@ -193,12 +186,9 @@
 
 const u8 * get_ie(const u8 *ies, size_t len, u8 eid);
 const u8 * get_ie_ext(const u8 *ies, size_t len, u8 ext);
-const u8 * get_vendor_ie(const u8 *ies, size_t len, u32 vendor_type);
 
 size_t mbo_add_ie(u8 *buf, size_t len, const u8 *attr, size_t attr_len);
 
-size_t add_multi_ap_ie(u8 *buf, size_t len, u8 value);
-
 struct country_op_class {
 	u8 country_op_class;
 	u8 global_op_class;
@@ -207,11 +197,8 @@
 u8 country_to_global_op_class(const char *country, u8 op_class);
 
 const struct oper_class_map * get_oper_class(const char *country, u8 op_class);
-int oper_class_bw_to_int(const struct oper_class_map *map);
 
 int ieee802_11_parse_candidate_list(const char *pos, u8 *nei_rep,
 				    size_t nei_rep_len);
 
-int ieee802_11_ext_capab(const u8 *ie, unsigned int capab);
-
 #endif /* IEEE802_11_COMMON_H */
diff --git a/src/common/ieee802_11_defs.h b/src/common/ieee802_11_defs.h
index b285d13..762e731 100644
--- a/src/common/ieee802_11_defs.h
+++ b/src/common/ieee802_11_defs.h
@@ -1,6 +1,6 @@
 /*
  * IEEE 802.11 Frame type definitions
- * Copyright (c) 2002-2019, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2002-2015, Jouni Malinen <j@w1.fi>
  * Copyright (c) 2007-2008 Intel Corporation
  *
  * This software may be distributed under the terms of the BSD license.
@@ -467,89 +467,7 @@
 #define WLAN_EID_EXT_PASSWORD_IDENTIFIER 33
 #define WLAN_EID_EXT_HE_CAPABILITIES 35
 #define WLAN_EID_EXT_HE_OPERATION 36
-#define WLAN_EID_EXT_HE_MU_EDCA_PARAMS 38
-#define WLAN_EID_EXT_OCV_OCI 54
 
-/* Extended Capabilities field */
-#define WLAN_EXT_CAPAB_20_40_COEX 0
-#define WLAN_EXT_CAPAB_GLK 1
-#define WLAN_EXT_CAPAB_EXT_CHAN_SWITCH 2
-#define WLAN_EXT_CAPAB_GLK_GCR 3
-#define WLAN_EXT_CAPAB_PSMP 4
-/* 5 - Reserved */
-#define WLAN_EXT_CAPAB_S_PSMP 6
-#define WLAN_EXT_CAPAB_EVENT 7
-#define WLAN_EXT_CAPAB_DIAGNOSTICS 8
-#define WLAN_EXT_CAPAB_MULTICAST_DIAGNOSTICS 9
-#define WLAN_EXT_CAPAB_LOCATION_TRACKING 10
-#define WLAN_EXT_CAPAB_FMS 11
-#define WLAN_EXT_CAPAB_PROXY_ARP 12
-#define WLAN_EXT_CAPAB_COLL_INTERF_REP 13
-#define WLAN_EXT_CAPAB_CIVIC_LOCATION 14
-#define WLAN_EXT_CAPAB_GEOSPATIAL_LOCATION 15
-#define WLAN_EXT_CAPAB_TFS 16
-#define WLAN_EXT_CAPAB_WNM_SLEEP_MODE 17
-#define WLAN_EXT_CAPAB_TIM_BROADCAST 18
-#define WLAN_EXT_CAPAB_BSS_TRANSITION 19
-#define WLAN_EXT_CAPAB_QOS_TRAFFIC 20
-#define WLAN_EXT_CAPAB_AC_STA_COUNT 21
-#define WLAN_EXT_CAPAB_MULTIPLE_BSSID 22
-#define WLAN_EXT_CAPAB_TIMING_MEASUREMENT 23
-#define WLAN_EXT_CAPAB_CHANNEL_USAGE 24
-#define WLAN_EXT_CAPAB_SSID_LIST 25
-#define WLAN_EXT_CAPAB_DMS 26
-#define WLAN_EXT_CAPAB_UTF_TSF_OFFSET 27
-#define WLAN_EXT_CAPAB_TPU_BUFFER_STA 28
-#define WLAN_EXT_CAPAB_TDLS_PEER_PSM 29
-#define WLAN_EXT_CAPAB_TDLS_CHANNEL_SWITCH 30
-#define WLAN_EXT_CAPAB_INTERWORKING 31
-#define WLAN_EXT_CAPAB_QOS_MAP 32
-#define WLAN_EXT_CAPAB_EBR 33
-#define WLAN_EXT_CAPAB_SSPN_INTERFACE 34
-/* 35 - Reserved */
-#define WLAN_EXT_CAPAB_MSGCF 36
-#define WLAN_EXT_CAPAB_TDLS 37
-#define WLAN_EXT_CAPAB_TDLS_PROHIBITED 38
-#define WLAN_EXT_CAPAB_TDLS_CHANNEL_SWITCH_PROHIBITED 39
-#define WLAN_EXT_CAPAB_REJECT_UNADMITTED_FRAME 40
-#define WLAN_EXT_CAPAB_
-/* 41-43 - Service Interval Granularity */
-#define WLAN_EXT_CAPAB_IDENTIFIER_LOCATION 44
-#define WLAN_EXT_CAPAB_U_APSD_COEX 45
-#define WLAN_EXT_CAPAB_WNM_NOTIFCATION 46
-#define WLAN_EXT_CAPAB_QAB 47
-#define WLAN_EXT_CAPAB_UTF_8_SSID 48
-#define WLAN_EXT_CAPAB_QMF 49
-#define WLAN_EXT_CAPAB_QMF_RECONFIG 50
-#define WLAN_EXT_CAPAB_ROBUST_AV_STREAMING 51
-#define WLAN_EXT_CAPAB_ADVANCED_GCR 52
-#define WLAN_EXT_CAPAB_MESH_GCR 53
-#define WLAN_EXT_CAPAB_SCS 54
-#define WLAN_EXT_CAPAB_QLOAD_REPORT 55
-#define WLAN_EXT_CAPAB_ALT_EDCA 56
-#define WLAN_EXT_CAPAB_UNPROT_TXOP_NEG 57
-#define WLAN_EXT_CAPAB_PROT_TXOP_NEG 58
-/* 59 - Reserved */
-#define WLAN_EXT_CAPAB_PROT_QLOAD_REPORT 60
-#define WLAN_EXT_CAPAB_TDLS_WIDER_BW 61
-#define WLAN_EXT_CAPAB_OPMODE_NOTIF 62
-#define WLAN_EXT_CAPAB_
-/* 63-64 - Max Number of MSDUs In A-MSDU */
-#define WLAN_EXT_CAPAB_CHANNEL_SCHEDULE_MGMT 65
-#define WLAN_EXT_CAPAB_GEODB_INBAND_ENABLING_SIGNAL 66
-#define WLAN_EXT_CAPAB_NETWORK_CHANNEL_CTRL 67
-#define WLAN_EXT_CAPAB_WHITE_SPACE_MAP 68
-#define WLAN_EXT_CAPAB_CHANNEL_AVAIL_QUERY 69
-#define WLAN_EXT_CAPAB_FTM_RESPONDER 70
-#define WLAN_EXT_CAPAB_FTM_INITIATOR 71
-#define WLAN_EXT_CAPAB_FILS 72
-#define WLAN_EXT_CAPAB_EXT_SPECTRUM_MGMT 73
-#define WLAN_EXT_CAPAB_FUTURE_CHANNEL_GUIDANCE 74
-#define WLAN_EXT_CAPAB_PAD 75
-/* 76-79 - Reserved */
-#define WLAN_EXT_CAPAB_COMPLETE_NON_TX_BSSID_PROFILE 80
-#define WLAN_EXT_CAPAB_SAE_PW_ID 81
-#define WLAN_EXT_CAPAB_SAE_PW_ID_EXCLUSIVELY 82
 
 /* Action frame categories (IEEE Std 802.11-2016, 9.4.1.11, Table 9-76) */
 #define WLAN_ACTION_SPECTRUM_MGMT 0
@@ -947,12 +865,10 @@
 				struct {
 					u8 action;
 					u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN];
-					u8 variable[]; /* OCI element */
 				} STRUCT_PACKED sa_query_req;
 				struct {
 					u8 action; /* */
 					u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN];
-					u8 variable[]; /* OCI element */
 				} STRUCT_PACKED sa_query_resp;
 				struct {
 					u8 action;
@@ -1294,13 +1210,6 @@
 #define MBO_OUI_TYPE 22
 #define OWE_IE_VENDOR_TYPE 0x506f9a1c
 #define OWE_OUI_TYPE 28
-#define MULTI_AP_OUI_TYPE 0x1B
-
-#define MULTI_AP_SUB_ELEM_TYPE 0x06
-#define MULTI_AP_TEAR_DOWN BIT(4)
-#define MULTI_AP_FRONTHAUL_BSS BIT(5)
-#define MULTI_AP_BACKHAUL_BSS BIT(6)
-#define MULTI_AP_BACKHAUL_STA BIT(7)
 
 #define WMM_OUI_TYPE 2
 #define WMM_OUI_SUBTYPE_INFORMATION_ELEMENT 0
@@ -1438,15 +1347,13 @@
 #define HS20_PPS_MO_ID_PRESENT 0x02
 #define HS20_ANQP_DOMAIN_ID_PRESENT 0x04
 #ifndef HS20_VERSION
-#define HS20_VERSION 0x20 /* Release 3 */
+#define HS20_VERSION 0x10 /* Release 2 */
 #endif /* HS20_VERSION */
 
 /* WNM-Notification WFA vendors specific subtypes */
 #define HS20_WNM_SUB_REM_NEEDED 0
 #define HS20_WNM_DEAUTH_IMMINENT_NOTICE 1
-#define WFA_WNM_NOTIF_SUBELEM_NON_PREF_CHAN_REPORT 2
-#define WFA_WNM_NOTIF_SUBELEM_CELL_DATA_CAPA 3
-#define HS20_WNM_T_C_ACCEPTANCE 4
+#define HS20_WNM_T_C_ACCEPTANCE 2
 
 #define HS20_DEAUTH_REASON_CODE_BSS 0
 #define HS20_DEAUTH_REASON_CODE_ESS 1
@@ -1535,6 +1442,12 @@
 	MBO_TRANSITION_REJECT_REASON_SERVICES = 6,
 };
 
+/* MBO v0.0_r19, 4.4: WNM-Notification vendor subelements */
+enum wfa_wnm_notif_subelem_id {
+	WFA_WNM_NOTIF_SUBELEM_NON_PREF_CHAN_REPORT = 2,
+	WFA_WNM_NOTIF_SUBELEM_CELL_DATA_CAPA = 3,
+};
+
 /* MBO v0.0_r27, 4.3: MBO ANQP-elements */
 #define MBO_ANQP_OUI_TYPE 0x12
 #define MBO_ANQP_SUBTYPE_QUERY_LIST 1
@@ -1928,14 +1841,11 @@
 };
 
 /* IEEE Std 802.11-2016, Table 9-88 - Beacon Request subelement IDs */
-/* IEEE P802.11-REVmd/D2.0, Table 9-106 - Optional subelement IDs for
- * Beacon request */
 #define WLAN_BEACON_REQUEST_SUBELEM_SSID	0
 #define WLAN_BEACON_REQUEST_SUBELEM_INFO	1 /* Beacon Reporting */
 #define WLAN_BEACON_REQUEST_SUBELEM_DETAIL	2 /* Reporting Detail */
 #define WLAN_BEACON_REQUEST_SUBELEM_REQUEST	10
 #define WLAN_BEACON_REQUEST_SUBELEM_AP_CHANNEL	51 /* AP Channel Report */
-#define WLAN_BEACON_REQUEST_SUBELEM_LAST_INDICATION	164
 #define WLAN_BEACON_REQUEST_SUBELEM_VENDOR	221
 
 /*
@@ -1985,21 +1895,9 @@
 } STRUCT_PACKED;
 
 /* IEEE Std 802.11-2016, Table 9-112 - Beacon report Subelement IDs */
-/* IEEE P802.11-REVmd/D2.0, Table 9-130 - Optional subelement IDs for
- * Beacon report */
 #define WLAN_BEACON_REPORT_SUBELEM_FRAME_BODY	1
-#define WLAN_BEACON_REPORT_SUBELEM_FRAME_BODY_FRAGMENT_ID	2
-#define WLAN_BEACON_REPORT_SUBELEM_LAST_INDICATION	164
 #define WLAN_BEACON_REPORT_SUBELEM_VENDOR	221
 
-/* IEEE P802.11-REVmd/D2.0, Table 9-232 - Data field format of the
- * Reported Frame Body Fragment ID subelement */
-#define REPORTED_FRAME_BODY_SUBELEM_LEN		4
-#define REPORTED_FRAME_BODY_MORE_FRAGMENTS	BIT(7)
-
-/* IEEE P802.11-REVmd/D2.0, 9.4.2.21.7 - Beacon report  */
-#define BEACON_REPORT_LAST_INDICATION_SUBELEM_LEN	3
-
 /* IEEE Std 802.11ad-2012 - Multi-band element */
 struct multi_band_ie {
 	u8 eid; /* WLAN_EID_MULTI_BAND */
@@ -2102,15 +2000,14 @@
 };
 
 struct ieee80211_he_capabilities {
-	u8 he_mac_capab_info[6];
-	u8 he_phy_capab_info[11];
+	u8 he_mac_capab_info[5];
+	u8 he_phy_capab_info[9];
 	u8 he_txrx_mcs_support[12]; /* TODO: 4, 8, or 12 octets */
 	/* PPE Thresholds (optional) */
 } STRUCT_PACKED;
 
 struct ieee80211_he_operation {
-	u32 he_oper_params; /* HE Operation Parameters[3] and
-			     * BSS Color Information[1] */
+	u32 he_oper_params;
 	u8 he_mcs_nss_set[2];
 	u8 vht_op_info_chwidth;
 	u8 vht_op_info_chan_center_freq_seg0_idx;
@@ -2127,55 +2024,28 @@
 #define HE_PHYCAP_MU_BEAMFORMER_CAPAB		((u8) BIT(1))
 
 /* HE Operation defines */
-/* HE Operation Parameters and BSS Color Information fields */
 #define HE_OPERATION_BSS_COLOR_MASK		((u32) (BIT(0) | BIT(1) | \
 							BIT(2) | BIT(3) | \
 							BIT(4) | BIT(5)))
-#define HE_OPERATION_PARTIAL_BSS_COLOR		((u32) BIT(6))
-#define HE_OPERATION_BSS_COLOR_DISABLED		((u32) BIT(7))
-#define HE_OPERATION_DFLT_PE_DURATION_MASK	((u32) (BIT(8) | BIT(9) | \
-							BIT(10)))
-#define HE_OPERATION_DFLT_PE_DURATION_OFFSET	8
-#define HE_OPERATION_TWT_REQUIRED		((u32) BIT(11))
-#define HE_OPERATION_RTS_THRESHOLD_MASK	((u32) (BIT(12) | BIT(13) | \
+#define HE_OPERATION_DFLT_PE_DURATION_MASK	((u32) (BIT(6) | BIT(7) | \
+							BIT(8)))
+#define HE_OPERATION_DFLT_PE_DURATION_OFFSET	6
+#define HE_OPERATION_TWT_REQUIRED		((u32) BIT(9))
+#define HE_OPERATION_RTS_THRESHOLD_MASK	((u32) (BIT(10) | BIT(11) | \
+						BIT(12) | BIT(13) | \
 						BIT(14) | BIT(15) | \
 						BIT(16) | BIT(17) | \
-						BIT(18) | BIT(19) | \
-						BIT(20) | BIT(21)))
-#define HE_OPERATION_RTS_THRESHOLD_OFFSET	12
-
-struct ieee80211_he_mu_edca_parameter_set {
-	u8 he_qos_info;
-	u8 he_mu_ac_be_param[3];
-	u8 he_mu_ac_bk_param[3];
-	u8 he_mu_ac_vi_param[3];
-	u8 he_mu_ac_vo_param[3];
-} STRUCT_PACKED;
-
-/* HE MU AC parameter record field format */
-/* ACI/AIFSN */
-#define HE_MU_AC_PARAM_ACI_IDX 0
-#define HE_MU_AC_PARAM_AIFSN ((u8) (BIT(0) | BIT(1) | BIT(2) | BIT(3)))
-#define HE_MU_AC_PARAM_ACM ((u8) BIT(4))
-#define HE_MU_AC_PARAM_ACI ((u8) (BIT(5) | BIT(6)))
-/* B7: Reserved */
-
-/* ECWmin/ECWmax */
-#define HE_MU_AC_PARAM_ECW_IDX 1
-#define HE_MU_AC_PARAM_ECWMIN ((u8) (BIT(0) | BIT(1) | BIT(2) | BIT(3)))
-#define HE_MU_AC_PARAM_ECWMAX ((u8) (BIT(4) | BIT(5) | BIT(6) | BIT(7)))
-
-/* MU EDCA Timer */
-#define HE_MU_AC_PARAM_TIMER_IDX 2
-
-/* HE QoS Info field */
-#define HE_QOS_INFO_EDCA_PARAM_SET_COUNT ((u8) (BIT(0) | BIT(1) | \
-						BIT(2) | BIT(3)))
-#define HE_QOS_INFO_Q_ACK ((u8) (BIT(4)))
-#define HE_QOS_INFO_QUEUE_REQUEST ((u8) (BIT(5)))
-#define HE_QOS_INFO_TXOP_REQUEST ((u8) (BIT(6)))
-/* B7: Reserved if sent by an AP; More Data Ack if sent by a non-AP STA */
-#define HE_QOS_INFO_MORE_DATA_ACK ((u8) (BIT(7)))
+						BIT(18) | BIT(19)))
+#define HE_OPERATION_RTS_THRESHOLD_OFFSET	10
+#define HE_OPERATION_PARTIAL_BSS_COLOR		((u32) BIT(20))
+#define HE_OPERATION_MAX_BSSID_INDICATOR_MASK	((u32) (BIT(21) | BIT(22) | \
+							BIT(23) | BIT(24) | \
+							BIT(25) | BIT(26) | \
+							BIT(27) | BIT(28)))
+#define HE_OPERATION_MAX_BSSID_INDICATOR_OFFSET 21
+#define HE_OPERATION_TX_BSSID_INDICATOR		((u32) BIT(29))
+#define HE_OPERATION_BSS_COLOR_DISABLED		((u32) BIT(30))
+#define HE_OPERATION_BSS_DUAL_BEACON		((u32) BIT(31))
 
 /* DPP Public Action frame identifiers - OUI_WFA */
 #define DPP_OUI_TYPE 0x1A
diff --git a/src/common/linux_bridge.h b/src/common/linux_bridge.h
index 84386e6..7b76846 100644
--- a/src/common/linux_bridge.h
+++ b/src/common/linux_bridge.h
@@ -9,21 +9,6 @@
 #ifndef LINUX_BRIDGE_H
 #define LINUX_BRIDGE_H
 
-/* This ioctl is defined in linux/sockios.h */
-
-#ifndef SIOCBRADDBR
-#define SIOCBRADDBR 0x89a0
-#endif
-#ifndef SIOCBRDELBR
-#define SIOCBRDELBR 0x89a1
-#endif
-#ifndef SIOCBRADDIF
-#define SIOCBRADDIF 0x89a2
-#endif
-#ifndef SIOCBRDELIF
-#define SIOCBRDELIF 0x89a3
-#endif
-
 /* This interface is defined in linux/if_bridge.h */
 
 #define BRCTL_GET_VERSION 0
diff --git a/src/common/ocv.c b/src/common/ocv.c
deleted file mode 100644
index 06badfb..0000000
--- a/src/common/ocv.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Operating Channel Validation (OCV)
- * Copyright (c) 2018, Mathy Vanhoef
- *
- * This software may be distributed under the terms of the BSD license.
- * See README for more details.
- */
-
-#include "utils/includes.h"
-#include "utils/common.h"
-#include "drivers/driver.h"
-#include "common/ieee802_11_common.h"
-#include "ocv.h"
-
-/**
- * Caller of OCV functionality may use various debug output functions, so store
- * the error here and let the caller use an appropriate debug output function.
- */
-char ocv_errorstr[256];
-
-
-int ocv_derive_all_parameters(struct oci_info *oci)
-{
-	const struct oper_class_map *op_class_map;
-
-	oci->freq = ieee80211_chan_to_freq(NULL, oci->op_class, oci->channel);
-	if (oci->freq < 0) {
-		wpa_printf(MSG_INFO,
-			   "Error interpreting OCI: unrecognized opclass/channel pair (%d/%d)",
-			   oci->op_class, oci->channel);
-		return -1;
-	}
-
-	op_class_map = get_oper_class(NULL, oci->op_class);
-	if (!op_class_map) {
-		wpa_printf(MSG_INFO,
-			   "Error interpreting OCI: Unrecognized opclass (%d)",
-			   oci->op_class);
-		return -1;
-	}
-
-	oci->chanwidth = oper_class_bw_to_int(op_class_map);
-	oci->sec_channel = 0;
-	if (op_class_map->bw == BW40PLUS)
-		oci->sec_channel = 1;
-	else if (op_class_map->bw == BW40MINUS)
-		oci->sec_channel = -1;
-
-	return 0;
-}
-
-
-int ocv_insert_oci(struct wpa_channel_info *ci, u8 **argpos)
-{
-	u8 op_class, channel;
-	u8 *pos = *argpos;
-
-	if (ieee80211_chaninfo_to_channel(ci->frequency, ci->chanwidth,
-					  ci->sec_channel,
-					  &op_class, &channel) < 0) {
-		wpa_printf(MSG_WARNING,
-			   "Cannot determine operating class and channel for OCI element");
-		return -1;
-	}
-
-	*pos++ = op_class;
-	*pos++ = channel;
-	*pos++ = ci->seg1_idx;
-
-	*argpos = pos;
-	return 0;
-}
-
-
-int ocv_insert_oci_kde(struct wpa_channel_info *ci, u8 **argpos)
-{
-	u8 *pos = *argpos;
-
-	*pos++ = WLAN_EID_VENDOR_SPECIFIC;
-	*pos++ = RSN_SELECTOR_LEN + 3;
-	RSN_SELECTOR_PUT(pos, RSN_KEY_DATA_OCI);
-	pos += RSN_SELECTOR_LEN;
-
-	*argpos = pos;
-	return ocv_insert_oci(ci, argpos);
-}
-
-
-int ocv_insert_extended_oci(struct wpa_channel_info *ci, u8 *pos)
-{
-	*pos++ = WLAN_EID_EXTENSION;
-	*pos++ = 1 + OCV_OCI_LEN;
-	*pos++ = WLAN_EID_EXT_OCV_OCI;
-	return ocv_insert_oci(ci, &pos);
-}
-
-
-int ocv_verify_tx_params(const u8 *oci_ie, size_t oci_ie_len,
-			 struct wpa_channel_info *ci, int tx_chanwidth,
-			 int tx_seg1_idx)
-{
-	struct oci_info oci;
-
-	if (!oci_ie) {
-		os_snprintf(ocv_errorstr, sizeof(ocv_errorstr),
-			    "OCV failed: did not receive mandatory OCI");
-		return -1;
-	}
-
-	if (oci_ie_len != 3) {
-		os_snprintf(ocv_errorstr, sizeof(ocv_errorstr),
-			    "OCV failed: received OCI of unexpected length (%d)",
-			    (int) oci_ie_len);
-		return -1;
-	}
-
-	os_memset(&oci, 0, sizeof(oci));
-	oci.op_class = oci_ie[0];
-	oci.channel = oci_ie[1];
-	oci.seg1_idx = oci_ie[2];
-	if (ocv_derive_all_parameters(&oci) != 0) {
-		os_snprintf(ocv_errorstr, sizeof(ocv_errorstr),
-			    "OCV failed: unable to interpret received OCI");
-		return -1;
-	}
-
-	/* Primary frequency used to send frames to STA must match the STA's */
-	if ((int) ci->frequency != oci.freq) {
-		os_snprintf(ocv_errorstr, sizeof(ocv_errorstr),
-			    "OCV failed: primary channel mismatch in received OCI (we use %d but receiver is using %d)",
-			    ci->frequency, oci.freq);
-		return -1;
-	}
-
-	/* We shouldn't transmit with a higher bandwidth than the STA supports
-	 */
-	if (tx_chanwidth > oci.chanwidth) {
-		os_snprintf(ocv_errorstr, sizeof(ocv_errorstr),
-			    "OCV failed: channel bandwidth mismatch in received OCI (we use %d but receiver only supports %d)",
-			    tx_chanwidth, oci.chanwidth);
-		return -1;
-	}
-
-	/*
-	 * Secondary channel only needs be checked for 40 MHz in the 2.4 GHz
-	 * band. In the 5 GHz band it's verified through the primary frequency.
-	 * Note that the field ci->sec_channel is only filled in when we use
-	 * 40 MHz.
-	 */
-	if (tx_chanwidth == 40 && ci->frequency < 2500 &&
-	    ci->sec_channel != oci.sec_channel) {
-		os_snprintf(ocv_errorstr, sizeof(ocv_errorstr),
-			    "OCV failed: secondary channel mismatch in received OCI (we use %d but receiver is using %d)",
-			    ci->sec_channel, oci.sec_channel);
-		return -1;
-	}
-
-	/*
-	 * When using a 160 or 80+80 MHz channel to transmit, verify that we use
-	 * the same segments as the receiver by comparing frequency segment 1.
-	 */
-	if ((ci->chanwidth == CHAN_WIDTH_160 ||
-	     ci->chanwidth == CHAN_WIDTH_80P80) &&
-	    tx_seg1_idx != oci.seg1_idx) {
-		os_snprintf(ocv_errorstr, sizeof(ocv_errorstr),
-			    "OCV failed: frequency segment 1 mismatch in received OCI (we use %d but receiver is using %d)",
-			    tx_seg1_idx, oci.seg1_idx);
-		return -1;
-	}
-
-	return 0;
-}
diff --git a/src/common/ocv.h b/src/common/ocv.h
deleted file mode 100644
index 6379d9d..0000000
--- a/src/common/ocv.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Operating Channel Validation (OCV)
- * Copyright (c) 2018, Mathy Vanhoef
- *
- * This software may be distributed under the terms of the BSD license.
- * See README for more details.
- */
-
-#ifndef OCV_H
-#define OCV_H
-
-struct wpa_channel_info;
-
-struct oci_info {
-	/* Values in the OCI element */
-	u8 op_class;
-	u8 channel;
-	u8 seg1_idx;
-
-	/* Derived values for easier verification */
-	int freq;
-	int sec_channel;
-	int chanwidth;
-};
-
-#define OCV_OCI_LEN		3
-#define OCV_OCI_EXTENDED_LEN	(3 + OCV_OCI_LEN)
-#define OCV_OCI_KDE_LEN		(2 + RSN_SELECTOR_LEN + OCV_OCI_LEN)
-
-extern char ocv_errorstr[256];
-
-int ocv_derive_all_parameters(struct oci_info *oci);
-int ocv_insert_oci(struct wpa_channel_info *ci, u8 **argpos);
-int ocv_insert_oci_kde(struct wpa_channel_info *ci, u8 **argpos);
-int ocv_insert_extended_oci(struct wpa_channel_info *ci, u8 *pos);
-int ocv_verify_tx_params(const u8 *oci_ie, size_t oci_ie_len,
-			 struct wpa_channel_info *ci, int tx_chanwidth,
-			 int tx_seg1_idx);
-
-#endif /* OCV_H */
diff --git a/src/common/qca-vendor.h b/src/common/qca-vendor.h
index 6f5b87e..7a4da46 100644
--- a/src/common/qca-vendor.h
+++ b/src/common/qca-vendor.h
@@ -42,12 +42,8 @@
  *
  * @QCA_NL80211_VENDOR_SUBCMD_AVOID_FREQUENCY: Recommendation of frequency
  *	ranges to avoid to reduce issues due to interference or internal
- *	co-existence information in the driver. These frequencies aim to
- *	minimize the traffic but not to totally avoid the traffic. That said
- *	for a P2P use case, these frequencies are allowed for the P2P
- *	discovery/negotiation but avoid the group to get formed on these
- *	frequencies. The event data structure is defined in
- *	struct qca_avoid_freq_list.
+ *	co-existence information in the driver. The event data structure is
+ *	defined in struct qca_avoid_freq_list.
  *
  * @QCA_NL80211_VENDOR_SUBCMD_DFS_CAPABILITY: Command to check driver support
  *	for DFS offloading.
@@ -162,11 +158,6 @@
  *	timer value. Uses the attributes defines in
  *	enum qca_wlan_vendor_attr_ocb_get_tsf_resp.
  *
- * @QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES: Command/event to update the
- *	link properties of the respective interface. As an event, is used
- *	to notify the connected station's status. The attributes for this
- *	command are defined in enum qca_wlan_vendor_attr_link_properties.
- *
  * @QCA_NL80211_VENDOR_SUBCMD_P2P_LISTEN_OFFLOAD_START: Command used to
  *	start the P2P Listen offload function in device and pass the listen
  *	channel, period, interval, count, device types, and vendor specific
@@ -483,30 +474,6 @@
  *	configure parameters per peer to capture Channel Frequency Response
  *	(CFR) and enable Periodic CFR capture. The attributes for this command
  *	are defined in enum qca_wlan_vendor_peer_cfr_capture_attr.
- *
- * @QCA_NL80211_VENDOR_SUBCMD_THROUGHPUT_CHANGE_EVENT: Event to indicate changes
- *	in throughput dynamically. The driver estimates the throughput based on
- *	number of packets being transmitted/received per second and indicates
- *	the changes in throughput to user space. Userspace tools can use this
- *	information to configure kernel's TCP parameters in order to achieve
- *	peak throughput. Optionally, the driver will also send guidance on
- *	modifications to kernel's TCP parameters which can be referred by
- *	userspace tools. The attributes used with this event are defined in enum
- *	qca_wlan_vendor_attr_throughput_change.
- *
- * @QCA_NL80211_VENDOR_SUBCMD_COEX_CONFIG: This command is used to set
- *	priorities among different types of traffic during coex scenarios.
- *	Current supported prioritization is among WLAN/BT/ZIGBEE with different
- *	profiles mentioned in enum qca_coex_config_profiles. The associated
- *	attributes used with this command are defined in enum
- *	qca_vendor_attr_coex_config.
- *
- *	Based on the config provided, FW will boost the weight and prioritize
- *	the traffic for that subsystem (WLAN/BT/Zigbee).
- *
- * @QCA_NL80211_VENDOR_SUBCMD_GET_SUPPORTED_AKMS: This command is used to query
- *	the supported AKM suite selectorss from the driver. It returns the list
- *	of supported AKMs in the attribute NL80211_ATTR_AKM_SUITES.
  */
 enum qca_nl80211_vendor_subcmds {
 	QCA_NL80211_VENDOR_SUBCMD_UNSPEC = 0,
@@ -669,9 +636,6 @@
 	QCA_NL80211_VENDOR_SUBCMD_NAN_EXT = 171,
 	QCA_NL80211_VENDOR_SUBCMD_ROAM_SCAN_EVENT = 172,
 	QCA_NL80211_VENDOR_SUBCMD_PEER_CFR_CAPTURE_CFG = 173,
-	QCA_NL80211_VENDOR_SUBCMD_THROUGHPUT_CHANGE_EVENT = 174,
-	QCA_NL80211_VENDOR_SUBCMD_COEX_CONFIG = 175,
-	QCA_NL80211_VENDOR_SUBCMD_GET_SUPPORTED_AKMS = 176,
 };
 
 enum qca_wlan_vendor_attr {
@@ -852,12 +816,6 @@
 	 * to report the corresponding antenna index to the chain RSSI value
 	 */
 	QCA_WLAN_VENDOR_ATTR_ANTENNA_INFO = 40,
-	/* Used in QCA_NL80211_VENDOR_SUBCMD_GET_CHAIN_RSSI command to report
-	 * the specific antenna EVM value (unsigned 32 bit value). With a
-	 * determinate group of antennas, the driver specifies the EVM value
-	 * for each antenna ID, and application extract them in user space.
-	 */
-	QCA_WLAN_VENDOR_ATTR_CHAIN_EVM = 41,
 
 	/* keep last */
 	QCA_WLAN_VENDOR_ATTR_AFTER_LAST,
@@ -4448,27 +4406,6 @@
 	 * qca_wlan_vendor_spectral_scan_cap_hw_gen.
 	 */
 	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_HW_GEN = 5,
-	/* Spectral bin scaling formula ID. u16 attribute.
-	 * It uses values defined in enum
-	 * qca_wlan_vendor_spectral_scan_cap_formula_id.
-	 */
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_FORMULA_ID = 6,
-	/* Spectral bin scaling param - low level offset.
-	 * s16 attribute.
-	 */
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_LOW_LEVEL_OFFSET = 7,
-	/* Spectral bin scaling param - high level offset.
-	 * s16 attribute.
-	 */
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_HIGH_LEVEL_OFFSET = 8,
-	/* Spectral bin scaling param - RSSI threshold.
-	 * s16 attribute.
-	 */
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_RSSI_THR = 9,
-	/* Spectral bin scaling param - default AGC max gain.
-	 * u8 attribute.
-	 */
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_DEFAULT_AGC_MAX_GAIN = 10,
 
 	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_AFTER_LAST,
 	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_MAX =
@@ -4614,20 +4551,6 @@
 };
 
 /**
- * qca_wlan_vendor_spectral_scan_cap_formula_id: Attribute values for
- * QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_FORMULA_ID in the vendor subcmd
- * QCA_NL80211_VENDOR_SUBCMD_SPECTRAL_SCAN_GET_CAP_INFO. This represents the
- * Spectral bin scaling formula ID.
- * @QCA_WLAN_VENDOR_SPECTRAL_SCAN_CAP_NO_SCALING: No scaling
- * @QCA_WLAN_VENDOR_SPECTRAL_SCAN_CAP_AGC_GAIN_RSSI_CORR_BASED: AGC gain
- * and RSSI threshold based formula.
- */
-enum qca_wlan_vendor_spectral_scan_cap_formula_id {
-	QCA_WLAN_VENDOR_SPECTRAL_SCAN_CAP_NO_SCALING = 0,
-	QCA_WLAN_VENDOR_SPECTRAL_SCAN_CAP_AGC_GAIN_RSSI_CORR_BASED = 1,
-};
-
-/**
  * enum qca_wlan_vendor_attr_rropavail_info - Specifies whether Representative
  * RF Operating Parameter (RROP) information is available, and if so, at which
  * point in the application-driver interaction sequence it can be retrieved by
@@ -5490,60 +5413,6 @@
 	QCA_WLAN_HE_16US_OF_PROCESS_TIME = 2,
 };
 
-/**
- * enum qca_wlan_he_om_ctrl_ch_bw - HE OM control field BW configuration
- *
- * Indicates the HE Operating mode control channel width setting value.
- *
- * @QCA_WLAN_HE_OM_CTRL_BW_20M: Primary 20 MHz
- * @QCA_WLAN_HE_OM_CTRL_BW_40M: Primary 40 MHz
- * @QCA_WLAN_HE_OM_CTRL_BW_80M: Primary 80 MHz
- * @QCA_WLAN_HE_OM_CTRL_BW_160M: 160 MHz and 80+80 MHz
- */
-enum qca_wlan_he_om_ctrl_ch_bw {
-	QCA_WLAN_HE_OM_CTRL_BW_20M = 0,
-	QCA_WLAN_HE_OM_CTRL_BW_40M = 1,
-	QCA_WLAN_HE_OM_CTRL_BW_80M = 2,
-	QCA_WLAN_HE_OM_CTRL_BW_160M = 3,
-};
-
-/**
- * enum qca_wlan_vendor_attr_he_omi_tx: Represents attributes for
- * HE operating mode control transmit request. These attributes are
- * sent as part of QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_OMI_TX and
- * QCA_NL80211_VENDOR_SUBCMD_WIFI_TEST_CONFIGURATION.
- *
- * @QCA_WLAN_VENDOR_ATTR_HE_OMI_RX_NSS: Mandatory 8-bit unsigned value
- * indicates the maximum number of spatial streams, NSS, that the STA
- * supports in reception for PPDU bandwidths less than or equal to 80 MHz
- * and is set to NSS - 1.
- *
- * @QCA_WLAN_VENDOR_ATTR_HE_OMI_CH_BW: Mandatory 8-bit unsigned value
- * indicates the operating channel width supported by the STA for both
- * reception and transmission. Uses enum qca_wlan_he_om_ctrl_ch_bw values.
- *
- * @QCA_WLAN_VENDOR_ATTR_HE_OMI_ULMU_DISABLE: Mandatory 8-bit unsigned value
- * indicates the all trigger based UL MU operations by the STA.
- * 0 - UL MU operations are enabled by the STA.
- * 1 - All triggered UL MU transmissions are suspended by the STA.
- *
- * @QCA_WLAN_VENDOR_ATTR_HE_OMI_TX_NSTS: Mandatory 8-bit unsigned value
- * indicates the maximum number of space-time streams, NSTS, that
- * the STA supports in transmission and is set to NSTS - 1.
- */
-enum qca_wlan_vendor_attr_he_omi_tx {
-	QCA_WLAN_VENDOR_ATTR_HE_OMI_INVALID = 0,
-	QCA_WLAN_VENDOR_ATTR_HE_OMI_RX_NSS = 1,
-	QCA_WLAN_VENDOR_ATTR_HE_OMI_CH_BW = 2,
-	QCA_WLAN_VENDOR_ATTR_HE_OMI_ULMU_DISABLE = 3,
-	QCA_WLAN_VENDOR_ATTR_HE_OMI_TX_NSTS = 4,
-
-	/* keep last */
-	QCA_WLAN_VENDOR_ATTR_HE_OMI_AFTER_LAST,
-	QCA_WLAN_VENDOR_ATTR_HE_OMI_MAX =
-	QCA_WLAN_VENDOR_ATTR_HE_OMI_AFTER_LAST - 1,
-};
-
 /* Attributes for data used by
  * QCA_NL80211_VENDOR_SUBCMD_WIFI_TEST_CONFIGURATION
  */
@@ -5735,79 +5604,6 @@
 	 */
 	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_TWT_RESUME = 26,
 
-	/* 8-bit unsigned value to set the HE operating mode control
-	 * (OM CTRL) Channel Width subfield.
-	 * The Channel Width subfield indicates the operating channel width
-	 * supported by the STA for both reception and transmission.
-	 * Uses the enum qca_wlan_he_om_ctrl_ch_bw values.
-	 * This setting is cleared with the
-	 * QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_CLEAR_HE_OM_CTRL_CONFIG
-	 * flag attribute to reset defaults.
-	 * This attribute is used to configure the testbed device.
-	 */
-	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_OM_CTRL_BW = 27,
-
-	/* 8-bit unsigned value to configure the number of spatial
-	 * streams in HE operating mode control field.
-	 * This setting is cleared with the
-	 * QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_CLEAR_HE_OM_CTRL_CONFIG
-	 * flag attribute to reset defaults.
-	 * This attribute is used to configure the testbed device.
-	 */
-	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_OM_CTRL_NSS = 28,
-
-	/* Flag attribute to configure the UL MU disable bit in
-	 * HE operating mode control field.
-	 * This setting is cleared with the
-	 * QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_CLEAR_HE_OM_CTRL_CONFIG
-	 * flag attribute to reset defaults.
-	 * This attribute is used to configure the testbed device.
-	 */
-	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_OM_CTRL_UL_MU_DISABLE = 29,
-
-	/* Flag attribute to clear the previously set HE operating mode
-	 * control field configuration.
-	 * This attribute is used to configure the testbed device to reset
-	 * defaults to clear any previously set HE operating mode control
-	 * field configuration.
-	 */
-	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_CLEAR_HE_OM_CTRL_CONFIG = 30,
-
-	/* 8-bit unsigned value to configure HE single user PPDU
-	 * transmission. By default this setting is disabled and it
-	 * is disabled in the reset defaults of the device configuration.
-	 * This attribute is used to configure the testbed device.
-	 * 1-enable, 0-disable
-	 */
-	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_TX_SUPPDU = 31,
-
-	/* 8-bit unsigned value to configure action frame transmission
-	 * in HE trigger based PPDU transmission.
-	 * By default this setting is disabled and it is disabled in
-	 * the reset defaults of the device configuration.
-	 * This attribute is used to configure the testbed device.
-	 * 1-enable, 0-disable
-	 */
-	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_ACTION_TX_TB_PPDU = 32,
-
-	/* Nested attribute to indicate HE operating mode control field
-	 * transmission. It contains operating mode control field Nss,
-	 * channel bandwidth, Tx Nsts and UL MU disable attributes.
-	 * These nested attributes are used to send HE operating mode control
-	 * with configured values.
-	 * Uses the enum qca_wlan_vendor_attr_he_omi_tx attributes.
-	 * This attribute is used to configure the testbed device.
-	 */
-	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_OMI_TX = 33,
-
-	/* 8-bit unsigned value to configure +HTC_HE support to indicate the
-	 * support for the reception of a frame that carries an HE variant
-	 * HT Control field.
-	 * This attribute is used to configure the testbed device.
-	 * 1-enable, 0-disable
-	 */
-	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_HTC_HE_SUPP = 34,
-
 	/* keep last */
 	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_AFTER_LAST,
 	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_MAX =
@@ -6194,159 +5990,4 @@
 	QCA_WLAN_VENDOR_ATTR_PEER_CFR_AFTER_LAST - 1,
 };
 
-/**
- * enum qca_wlan_throughput_level - Current throughput level
- *
- * Indicates the current level of throughput calculated by the driver. The
- * driver may choose different thresholds to decide whether the throughput level
- * is low or medium or high based on variety of parameters like physical link
- * capacity of the current connection, the number of packets being dispatched
- * per second, etc. The throughput level events might not be consistent with the
- * actual current throughput value being observed.
- *
- * @QCA_WLAN_THROUGHPUT_LEVEL_LOW: Low level of throughput
- * @QCA_WLAN_THROUGHPUT_LEVEL_MEDIUM: Medium level of throughput
- * @QCA_WLAN_THROUGHPUT_LEVEL_HIGH: High level of throughput
- */
-enum qca_wlan_throughput_level {
-	QCA_WLAN_THROUGHPUT_LEVEL_LOW = 0,
-	QCA_WLAN_THROUGHPUT_LEVEL_MEDIUM = 1,
-	QCA_WLAN_THROUGHPUT_LEVEL_HIGH = 2,
-};
-
-/**
- * enum qca_wlan_vendor_attr_throughput_change - Vendor subcmd attributes to
- * report throughput changes from the driver to user space. enum values are used
- * for netlink attributes sent with
- * %QCA_NL80211_VENDOR_SUBCMD_THROUGHPUT_CHANGE_EVENT sub command.
- */
-enum qca_wlan_vendor_attr_throughput_change {
-	QCA_WLAN_VENDOR_ATTR_THROUGHPUT_CHANGE_INVALID = 0,
-	/* Indicates the direction of throughput in which the change is being
-	 * reported. u8 attribute. Value is 0 for TX and 1 for RX.
-	 */
-	QCA_WLAN_VENDOR_ATTR_THROUGHPUT_CHANGE_DIRECTION = 1,
-	/* Indicates the newly observed throughput level. enum
-	 * qca_wlan_throughput_level describes the possible range of values.
-	 * u8 attribute.
-	 */
-	QCA_WLAN_VENDOR_ATTR_THROUGHPUT_CHANGE_THROUGHPUT_LEVEL = 2,
-	/* Indicates the driver's guidance on the new value to be set to
-	 * kernel's TCP parameter tcp_limit_output_bytes. u32 attribute. The
-	 * driver may optionally include this attribute.
-	 */
-	QCA_WLAN_VENDOR_ATTR_THROUGHPUT_CHANGE_TCP_LIMIT_OUTPUT_BYTES = 3,
-	/* Indicates the driver's guidance on the new value to be set to
-	 * kernel's TCP parameter tcp_adv_win_scale. s8 attribute. Possible
-	 * values are from -31 to 31. The driver may optionally include this
-	 * attribute.
-	 */
-	QCA_WLAN_VENDOR_ATTR_THROUGHPUT_CHANGE_TCP_ADV_WIN_SCALE = 4,
-	/* Indicates the driver's guidance on the new value to be set to
-	 * kernel's TCP parameter tcp_delack_seg. u32 attribute. The driver may
-	 * optionally include this attribute.
-	 */
-	QCA_WLAN_VENDOR_ATTR_THROUGHPUT_CHANGE_TCP_DELACK_SEG = 5,
-
-	/* keep last */
-	QCA_WLAN_VENDOR_ATTR_THROUGHPUT_CHANGE_AFTER_LAST,
-	QCA_WLAN_VENDOR_ATTR_THROUGHPUT_CHANGE_MAX =
-	QCA_WLAN_VENDOR_ATTR_THROUGHPUT_CHANGE_AFTER_LAST - 1,
-};
-
-/**
- * enum qca_coex_config_profiles - This enum defines different types of
- * traffic streams that can be prioritized one over the other during coex
- * scenarios.
- * The types defined in this enum are categorized in the below manner.
- * 0 - 31 values corresponds to WLAN
- * 32 - 63 values corresponds to BT
- * 64 - 95 values corresponds to Zigbee
- * @QCA_WIFI_STA_DISCOVERY: Prioritize discovery frames for WLAN STA
- * @QCA_WIFI_STA_CONNECTION: Prioritize connection frames for WLAN STA
- * @QCA_WIFI_STA_CLASS_3_MGMT: Prioritize class 3 mgmt frames for WLAN STA
- * @QCA_WIFI_STA_DATA : Prioritize data frames for WLAN STA
- * @QCA_WIFI_STA_ALL: Priritize all frames for WLAN STA
- * @QCA_WIFI_SAP_DISCOVERY: Prioritize discovery frames for WLAN SAP
- * @QCA_WIFI_SAP_CONNECTION: Prioritize connection frames for WLAN SAP
- * @QCA_WIFI_SAP_CLASS_3_MGMT: Prioritize class 3 mgmt frames for WLAN SAP
- * @QCA_WIFI_SAP_DATA: Prioritize data frames for WLAN SAP
- * @QCA_WIFI_SAP_ALL: Prioritize all frames for WLAN SAP
- * @QCA_BT_A2DP: Prioritize BT A2DP
- * @QCA_BT_BLE: Prioritize BT BLE
- * @QCA_BT_SCO: Prioritize BT SCO
- * @QCA_ZB_LOW: Prioritize Zigbee Low
- * @QCA_ZB_HIGH: Prioritize Zigbee High
- */
-enum qca_coex_config_profiles {
-	/* 0 - 31 corresponds to WLAN */
-	QCA_WIFI_STA_DISCOVERY = 0,
-	QCA_WIFI_STA_CONNECTION = 1,
-	QCA_WIFI_STA_CLASS_3_MGMT = 2,
-	QCA_WIFI_STA_DATA = 3,
-	QCA_WIFI_STA_ALL = 4,
-	QCA_WIFI_SAP_DISCOVERY = 5,
-	QCA_WIFI_SAP_CONNECTION = 6,
-	QCA_WIFI_SAP_CLASS_3_MGMT = 7,
-	QCA_WIFI_SAP_DATA = 8,
-	QCA_WIFI_SAP_ALL = 9,
-	/* 32 - 63 corresponds to BT */
-	QCA_BT_A2DP = 32,
-	QCA_BT_BLE = 33,
-	QCA_BT_SCO = 34,
-	/* 64 - 95 corresponds to Zigbee */
-	QCA_ZB_LOW = 64,
-	QCA_ZB_HIGH = 65
-};
-
-/**
- * enum qca_vendor_attr_coex_config - Specifies vendor coex config attributes
- *
- * @QCA_VENDOR_ATTR_COEX_CONFIG_PROFILES: This attribute contains variable
- * length array of 8-bit values from enum qca_coex_config_profiles.
- * FW will prioritize the profiles in the order given in the array encapsulated
- * in this attribute.
- * For example:
- * -----------------------------------------------------------------------
- * |     1       |       34       |        32         |         65       |
- * -----------------------------------------------------------------------
- * If the attribute contains the values defined in above array then it means
- * 1) Wifi STA connection has priority over BT_SCO, BT_A2DP and ZIGBEE HIGH.
- * 2) BT_SCO has priority over BT_A2DP.
- * 3) BT_A2DP has priority over ZIGBEE HIGH.
- * Profiles which are not listed in this array shall not be preferred over the
- * profiles which are listed in the array as a part of this attribute.
- */
-enum qca_vendor_attr_coex_config {
-	QCA_VENDOR_ATTR_COEX_CONFIG_INVALID = 0,
-	QCA_VENDOR_ATTR_COEX_CONFIG_PROFILES = 1,
-
-	/* Keep last */
-	QCA_VENDOR_ATTR_COEX_CONFIG_AFTER_LAST,
-	QCA_VENDOR_ATTR_COEX_CONFIG_MAX =
-	QCA_VENDOR_ATTR_COEX_CONFIG_AFTER_LAST - 1,
-};
-
-/**
- * enum qca_wlan_vendor_attr_link_properties - Represent the link properties.
- *
- * @QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_MAC_ADDR: MAC address of the peer
- * (STA/AP) for the connected link.
- * @QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_STA_FLAGS: Attribute containing a
- * &struct nl80211_sta_flag_update for the respective connected link. MAC
- * address of the peer represented by
- * QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_MAC_ADDR.
- */
-enum qca_wlan_vendor_attr_link_properties {
-	QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_INVALID = 0,
-	/* 1 - 3 are reserved */
-	QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_MAC_ADDR = 4,
-	QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_STA_FLAGS = 5,
-
-	/* Keep last */
-	QCA_VENDOR_ATTR_LINK_PROPERTIES_AFTER_LAST,
-	QCA_VENDOR_ATTR_LINK_PROPERTIES_MAX =
-	QCA_VENDOR_ATTR_LINK_PROPERTIES_AFTER_LAST - 1,
-};
-
 #endif /* QCA_VENDOR_H */
diff --git a/src/common/version.h b/src/common/version.h
index eb4f313..16c1004 100644
--- a/src/common/version.h
+++ b/src/common/version.h
@@ -9,6 +9,6 @@
 #define GIT_VERSION_STR_POSTFIX ""
 #endif /* GIT_VERSION_STR_POSTFIX */
 
-#define VERSION_STR "2.8-devel" VERSION_STR_POSTFIX GIT_VERSION_STR_POSTFIX
+#define VERSION_STR "2.7-devel" VERSION_STR_POSTFIX GIT_VERSION_STR_POSTFIX
 
 #endif /* VERSION_H */
diff --git a/src/common/wpa_common.c b/src/common/wpa_common.c
index b47f632..14c5769 100644
--- a/src/common/wpa_common.c
+++ b/src/common/wpa_common.c
@@ -880,12 +880,6 @@
 			parse->igtk_len = len;
 			break;
 #endif /* CONFIG_IEEE80211W */
-#ifdef CONFIG_OCV
-		case FTIE_SUBELEM_OCI:
-			parse->oci = pos;
-			parse->oci_len = len;
-			break;
-#endif /* CONFIG_OCV */
 		default:
 			wpa_printf(MSG_DEBUG, "FT: Unknown subelem id %u", id);
 			break;
@@ -1208,8 +1202,6 @@
 		pos = rsn_ie + 6;
 		left = rsn_ie_len - 6;
 
-		data->group_cipher = WPA_CIPHER_GTK_NOT_USED;
-		data->key_mgmt = WPA_KEY_MGMT_OSEN;
 		data->proto = WPA_PROTO_OSEN;
 	} else {
 		const struct rsn_ie_hdr *hdr;
diff --git a/src/common/wpa_common.h b/src/common/wpa_common.h
index 37b5834..6261744 100644
--- a/src/common/wpa_common.h
+++ b/src/common/wpa_common.h
@@ -110,7 +110,6 @@
 #define RSN_KEY_DATA_KEYID RSN_SELECTOR(0x00, 0x0f, 0xac, 10)
 #define RSN_KEY_DATA_MULTIBAND_GTK RSN_SELECTOR(0x00, 0x0f, 0xac, 11)
 #define RSN_KEY_DATA_MULTIBAND_KEYID RSN_SELECTOR(0x00, 0x0f, 0xac, 12)
-#define RSN_KEY_DATA_OCI RSN_SELECTOR(0x00, 0x0f, 0xac, 13)
 
 #define WFA_KEY_DATA_IP_ADDR_REQ RSN_SELECTOR(0x50, 0x6f, 0x9a, 4)
 #define WFA_KEY_DATA_IP_ADDR_ALLOC RSN_SELECTOR(0x50, 0x6f, 0x9a, 5)
@@ -149,8 +148,7 @@
 #define WPA_CAPABILITY_SPP_A_MSDU_REQUIRED BIT(11)
 #define WPA_CAPABILITY_PBAC BIT(12)
 #define WPA_CAPABILITY_EXT_KEY_ID_FOR_UNICAST BIT(13)
-#define WPA_CAPABILITY_OCVC BIT(14)
-/* B15: Reserved */
+/* B14-B15: Reserved */
 
 
 /* IEEE 802.11r */
@@ -328,7 +326,6 @@
 #define FTIE_SUBELEM_GTK 2
 #define FTIE_SUBELEM_R0KH_ID 3
 #define FTIE_SUBELEM_IGTK 4
-#define FTIE_SUBELEM_OCI 5
 
 struct rsn_rdie {
 	u8 id;
@@ -454,10 +451,6 @@
 	size_t tie_len;
 	const u8 *igtk;
 	size_t igtk_len;
-#ifdef CONFIG_OCV
-	const u8 *oci;
-	size_t oci_len;
-#endif /* CONFIG_OCV */
 	const u8 *ric;
 	size_t ric_len;
 	int key_mgmt;
diff --git a/src/common/wpa_ctrl.c b/src/common/wpa_ctrl.c
index 8722b19..a0fe822 100644
--- a/src/common/wpa_ctrl.c
+++ b/src/common/wpa_ctrl.c
@@ -11,8 +11,6 @@
 #ifdef CONFIG_CTRL_IFACE
 
 #ifdef CONFIG_CTRL_IFACE_UNIX
-#include <sys/stat.h>
-#include <fcntl.h>
 #include <sys/un.h>
 #include <unistd.h>
 #include <fcntl.h>
@@ -143,19 +141,6 @@
 		return NULL;
 	}
 	tries++;
-#ifdef ANDROID
-	/* Set client socket file permissions so that bind() creates the client
-	 * socket with these permissions and there is no need to try to change
-	 * them with chmod() after bind() which would have potential issues with
-	 * race conditions. These permissions are needed to make sure the server
-	 * side (wpa_supplicant or hostapd) can reply to the control interface
-	 * messages.
-	 *
-	 * The lchown() calls below after bind() are also part of the needed
-	 * operations to allow the response to go through. Those are using the
-	 * no-deference-symlinks version to avoid races. */
-	fchmod(ctrl->s, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
-#endif /* ANDROID */
 	if (bind(ctrl->s, (struct sockaddr *) &ctrl->local,
 		    sizeof(ctrl->local)) < 0) {
 		if (errno == EADDRINUSE && tries < 2) {
@@ -174,6 +159,7 @@
 	}
 
 #ifdef ANDROID
+	chmod(ctrl->local.sun_path, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
 	/* Set group even if we do not have privileges to change owner */
 	grp_wifi = getgrnam("wifi");
 	gid_wifi = grp_wifi ? grp_wifi->gr_gid : 0;
@@ -185,8 +171,8 @@
 		os_free(ctrl);
 		return NULL;
 	}
-	lchown(ctrl->local.sun_path, -1, gid_wifi);
-	lchown(ctrl->local.sun_path, uid_system, gid_wifi);
+	chown(ctrl->local.sun_path, -1, gid_wifi);
+	chown(ctrl->local.sun_path, uid_system, gid_wifi);
 
 	if (os_strncmp(ctrl_path, "@android:", 9) == 0) {
 		if (socket_local_client_connect(
@@ -572,8 +558,7 @@
 			res = recv(ctrl->s, reply, *reply_len, 0);
 			if (res < 0)
 				return res;
-			if ((res > 0 && reply[0] == '<') ||
-			    (res > 6 && strncmp(reply, "IFNAME=", 7) == 0)) {
+			if (res > 0 && reply[0] == '<') {
 				/* This is an unsolicited message from
 				 * wpa_supplicant, not the reply to the
 				 * request. Use msg_cb to report this to the
