Revert "[wpa_supplicant] Cumulative patch from b8491ae5a"

This reverts commit 878cf7bcbf2d7d8f08c3d060b8c5fbfcf0743eda.

Reason for revert: git_master/sdk_phone_armv7-sdk

Change-Id: I6070fc5c1f9c20867f6dfce90e529e35578d572e
diff --git a/src/ap/Makefile b/src/ap/Makefile
index 48f8f23..9b07ee1 100644
--- a/src/ap/Makefile
+++ b/src/ap/Makefile
@@ -20,7 +20,6 @@
 CFLAGS += -DCONFIG_PROXYARP
 CFLAGS += -DCONFIG_IPV6
 CFLAGS += -DCONFIG_IAPP
-CFLAGS += -DCONFIG_AIRTIME_POLICY
 
 LIB_OBJS= \
 	accounting.o \
@@ -28,7 +27,6 @@
 	ap_drv_ops.o \
 	ap_list.o \
 	ap_mlme.o \
-	airtime_policy.o \
 	authsrv.o \
 	beacon.o \
 	bss_load.o \
diff --git a/src/ap/acs.c b/src/ap/acs.c
index 11178a1..3b45075 100644
--- a/src/ap/acs.c
+++ b/src/ap/acs.c
@@ -594,12 +594,12 @@
 	    iface->conf->secondary_channel)
 		n_chans = 2;
 
-	if (iface->conf->ieee80211ac || iface->conf->ieee80211ax) {
-		switch (hostapd_get_oper_chwidth(iface->conf)) {
-		case CHANWIDTH_80MHZ:
+	if (iface->conf->ieee80211ac) {
+		switch (iface->conf->vht_oper_chwidth) {
+		case VHT_CHANWIDTH_80MHZ:
 			n_chans = 4;
 			break;
-		case CHANWIDTH_160MHZ:
+		case VHT_CHANWIDTH_160MHZ:
 			n_chans = 8;
 			break;
 		}
@@ -607,7 +607,7 @@
 
 	bw = num_chan_to_bw(n_chans);
 
-	/* TODO: VHT/HE80+80. Update acs_adjust_center_freq() too. */
+	/* TODO: VHT80+80. Update acs_adjust_vht_center_freq() too. */
 
 	wpa_printf(MSG_DEBUG,
 		   "ACS: Survey analysis for selected bandwidth %d MHz", bw);
@@ -647,9 +647,9 @@
 		}
 
 		if (iface->current_mode->mode == HOSTAPD_MODE_IEEE80211A &&
-		    (iface->conf->ieee80211ac || iface->conf->ieee80211ax)) {
-			if (hostapd_get_oper_chwidth(iface->conf) ==
-			    CHANWIDTH_80MHZ &&
+		    iface->conf->ieee80211ac) {
+			if (iface->conf->vht_oper_chwidth ==
+			    VHT_CHANWIDTH_80MHZ &&
 			    !acs_usable_vht80_chan(chan)) {
 				wpa_printf(MSG_DEBUG,
 					   "ACS: Channel %d: not allowed as primary channel for VHT80",
@@ -657,8 +657,8 @@
 				continue;
 			}
 
-			if (hostapd_get_oper_chwidth(iface->conf) ==
-			    CHANWIDTH_160MHZ &&
+			if (iface->conf->vht_oper_chwidth ==
+			    VHT_CHANWIDTH_160MHZ &&
 			    !acs_usable_vht160_chan(chan)) {
 				wpa_printf(MSG_DEBUG,
 					   "ACS: Channel %d: not allowed as primary channel for VHT160",
@@ -783,20 +783,20 @@
 }
 
 
-static void acs_adjust_center_freq(struct hostapd_iface *iface)
+static void acs_adjust_vht_center_freq(struct hostapd_iface *iface)
 {
 	int offset;
 
 	wpa_printf(MSG_DEBUG, "ACS: Adjusting VHT center frequency");
 
-	switch (hostapd_get_oper_chwidth(iface->conf)) {
-	case CHANWIDTH_USE_HT:
+	switch (iface->conf->vht_oper_chwidth) {
+	case VHT_CHANWIDTH_USE_HT:
 		offset = 2 * iface->conf->secondary_channel;
 		break;
-	case CHANWIDTH_80MHZ:
+	case VHT_CHANWIDTH_80MHZ:
 		offset = 6;
 		break;
-	case CHANWIDTH_160MHZ:
+	case VHT_CHANWIDTH_160MHZ:
 		offset = 14;
 		break;
 	default:
@@ -807,8 +807,8 @@
 		return;
 	}
 
-	hostapd_set_oper_centr_freq_seg0_idx(iface->conf,
-					     iface->conf->channel + offset);
+	iface->conf->vht_oper_centr_freq_seg0_idx =
+		iface->conf->channel + offset;
 }
 
 
@@ -863,8 +863,8 @@
 
 	iface->conf->channel = ideal_chan->chan;
 
-	if (iface->conf->ieee80211ac || iface->conf->ieee80211ax)
-		acs_adjust_center_freq(iface);
+	if (iface->conf->ieee80211ac)
+		acs_adjust_vht_center_freq(iface);
 
 	err = 0;
 fail:
diff --git a/src/ap/airtime_policy.c b/src/ap/airtime_policy.c
deleted file mode 100644
index f56ca5b..0000000
--- a/src/ap/airtime_policy.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Airtime policy configuration
- * Copyright (c) 2018-2019, Toke Høiland-Jørgensen <toke@toke.dk>
- *
- * 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 "utils/eloop.h"
-#include "hostapd.h"
-#include "ap_drv_ops.h"
-#include "sta_info.h"
-#include "airtime_policy.h"
-
-/* Idea:
- * Two modes of airtime enforcement:
- * 1. Static weights: specify weights per MAC address with a per-BSS default
- * 2. Per-BSS limits: Dynamically calculate weights of backlogged stations to
- *    enforce relative total shares between BSSes.
- *
- * - Periodic per-station callback to update queue status.
- *
- * Copy accounting_sta_update_stats() to get TXQ info and airtime weights and
- * keep them updated in sta_info.
- *
- * - Separate periodic per-bss (or per-iface?) callback to update weights.
- *
- * Just need to loop through all interfaces, count sum the active stations (or
- * should the per-STA callback just adjust that for the BSS?) and calculate new
- * weights.
- */
-
-static int get_airtime_policy_update_timeout(struct hostapd_iface *iface,
-					     unsigned int *sec,
-					     unsigned int *usec)
-{
-	unsigned int update_int = iface->conf->airtime_update_interval;
-
-	if (!update_int) {
-		wpa_printf(MSG_ERROR,
-			   "Airtime policy: Invalid airtime policy update interval %u",
-			   update_int);
-		return -1;
-	}
-
-	*sec = update_int / 1000;
-	*usec = (update_int % 1000) * 1000;
-
-	return 0;
-}
-
-
-static void set_new_backlog_time(struct hostapd_data *hapd,
-				 struct sta_info *sta,
-				 struct os_reltime *now)
-{
-	sta->backlogged_until = *now;
-	sta->backlogged_until.usec += hapd->iconf->airtime_update_interval *
-		AIRTIME_BACKLOG_EXPIRY_FACTOR;
-	while (sta->backlogged_until.usec >= 1000000) {
-		sta->backlogged_until.sec++;
-		sta->backlogged_until.usec -= 1000000;
-	}
-}
-
-
-static void count_backlogged_sta(struct hostapd_data *hapd)
-{
-	struct sta_info *sta;
-	struct hostap_sta_driver_data data = {};
-	unsigned int num_backlogged = 0;
-	struct os_reltime now;
-
-	os_get_reltime(&now);
-
-	for (sta = hapd->sta_list; sta; sta = sta->next) {
-		if (hostapd_drv_read_sta_data(hapd, &data, sta->addr))
-			continue;
-
-		if (data.backlog_bytes > 0)
-			set_new_backlog_time(hapd, sta, &now);
-		if (os_reltime_before(&now, &sta->backlogged_until))
-			num_backlogged++;
-	}
-	hapd->num_backlogged_sta = num_backlogged;
-}
-
-
-static int sta_set_airtime_weight(struct hostapd_data *hapd,
-				  struct sta_info *sta,
-				  unsigned int weight)
-{
-	int ret = 0;
-
-	if (weight != sta->airtime_weight &&
-	    (ret = hostapd_sta_set_airtime_weight(hapd, sta->addr, weight)))
-		return ret;
-
-	sta->airtime_weight = weight;
-	return ret;
-}
-
-
-static void set_sta_weights(struct hostapd_data *hapd, unsigned int weight)
-{
-	struct sta_info *sta;
-
-	for (sta = hapd->sta_list; sta; sta = sta->next)
-		sta_set_airtime_weight(hapd, sta, weight);
-}
-
-
-static unsigned int get_airtime_quantum(unsigned int max_wt)
-{
-	unsigned int quantum = AIRTIME_QUANTUM_TARGET / max_wt;
-
-	if (quantum < AIRTIME_QUANTUM_MIN)
-		quantum = AIRTIME_QUANTUM_MIN;
-	else if (quantum > AIRTIME_QUANTUM_MAX)
-		quantum = AIRTIME_QUANTUM_MAX;
-
-	return quantum;
-}
-
-
-static void update_airtime_weights(void *eloop_data, void *user_data)
-{
-	struct hostapd_iface *iface = eloop_data;
-	struct hostapd_data *bss;
-	unsigned int sec, usec;
-	unsigned int num_sta_min = 0, num_sta_prod = 1, num_sta_sum = 0,
-		wt_sum = 0;
-	unsigned int quantum;
-	Boolean all_div_min = TRUE;
-	Boolean apply_limit = iface->conf->airtime_mode == AIRTIME_MODE_DYNAMIC;
-	int wt, num_bss = 0, max_wt = 0;
-	size_t i;
-
-	for (i = 0; i < iface->num_bss; i++) {
-		bss = iface->bss[i];
-		if (!bss->started || !bss->conf->airtime_weight)
-			continue;
-
-		count_backlogged_sta(bss);
-		if (!bss->num_backlogged_sta)
-			continue;
-
-		if (!num_sta_min || bss->num_backlogged_sta < num_sta_min)
-			num_sta_min = bss->num_backlogged_sta;
-
-		num_sta_prod *= bss->num_backlogged_sta;
-		num_sta_sum += bss->num_backlogged_sta;
-		wt_sum += bss->conf->airtime_weight;
-		num_bss++;
-	}
-
-	if (num_sta_min) {
-		for (i = 0; i < iface->num_bss; i++) {
-			bss = iface->bss[i];
-			if (!bss->started || !bss->conf->airtime_weight)
-				continue;
-
-			/* Check if we can divide all sta numbers by the
-			 * smallest number to keep weights as small as possible.
-			 * This is a lazy way to avoid having to factor
-			 * integers. */
-			if (bss->num_backlogged_sta &&
-			    bss->num_backlogged_sta % num_sta_min > 0)
-				all_div_min = FALSE;
-
-			/* If we're in LIMIT mode, we only apply the weight
-			 * scaling when the BSS(es) marked as limited would a
-			 * larger share than the relative BSS weights indicates
-			 * it should. */
-			if (!apply_limit && bss->conf->airtime_limit) {
-				if (bss->num_backlogged_sta * wt_sum >
-				    bss->conf->airtime_weight * num_sta_sum)
-					apply_limit = TRUE;
-			}
-		}
-		if (all_div_min)
-			num_sta_prod /= num_sta_min;
-	}
-
-	for (i = 0; i < iface->num_bss; i++) {
-		bss = iface->bss[i];
-		if (!bss->started || !bss->conf->airtime_weight)
-			continue;
-
-		/* We only set the calculated weight if the BSS has active
-		 * stations and there are other active interfaces as well -
-		 * otherwise we just set a unit weight. This ensures that
-		 * the weights are set reasonably when stations transition from
-		 * inactive to active. */
-		if (apply_limit && bss->num_backlogged_sta && num_bss > 1)
-			wt = bss->conf->airtime_weight * num_sta_prod /
-				bss->num_backlogged_sta;
-		else
-			wt = 1;
-
-		bss->airtime_weight = wt;
-		if (wt > max_wt)
-			max_wt = wt;
-	}
-
-	quantum = get_airtime_quantum(max_wt);
-
-	for (i = 0; i < iface->num_bss; i++) {
-		bss = iface->bss[i];
-		if (!bss->started || !bss->conf->airtime_weight)
-			continue;
-		set_sta_weights(bss, bss->airtime_weight * quantum);
-	}
-
-	if (get_airtime_policy_update_timeout(iface, &sec, &usec) < 0)
-		return;
-
-	eloop_register_timeout(sec, usec, update_airtime_weights, iface,
-			       NULL);
-}
-
-
-static int get_weight_for_sta(struct hostapd_data *hapd, const u8 *sta)
-{
-	struct airtime_sta_weight *wt;
-
-	wt = hapd->conf->airtime_weight_list;
-	while (wt && os_memcmp(wt->addr, sta, ETH_ALEN) != 0)
-		wt = wt->next;
-
-	return wt ? wt->weight : hapd->conf->airtime_weight;
-}
-
-
-int airtime_policy_new_sta(struct hostapd_data *hapd, struct sta_info *sta)
-{
-	unsigned int weight;
-
-	if (hapd->iconf->airtime_mode == AIRTIME_MODE_STATIC) {
-		weight = get_weight_for_sta(hapd, sta->addr);
-		if (weight)
-			return sta_set_airtime_weight(hapd, sta, weight);
-	}
-	return 0;
-}
-
-
-int airtime_policy_update_init(struct hostapd_iface *iface)
-{
-	unsigned int sec, usec;
-
-	if (iface->conf->airtime_mode < AIRTIME_MODE_DYNAMIC)
-		return 0;
-
-	if (get_airtime_policy_update_timeout(iface, &sec, &usec) < 0)
-		return -1;
-
-	eloop_register_timeout(sec, usec, update_airtime_weights, iface, NULL);
-	return 0;
-}
-
-
-void airtime_policy_update_deinit(struct hostapd_iface *iface)
-{
-	eloop_cancel_timeout(update_airtime_weights, iface, NULL);
-}
diff --git a/src/ap/airtime_policy.h b/src/ap/airtime_policy.h
deleted file mode 100644
index c2a9b00..0000000
--- a/src/ap/airtime_policy.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Airtime policy configuration
- * Copyright (c) 2018-2019, Toke Høiland-Jørgensen <toke@toke.dk>
- *
- * This software may be distributed under the terms of the BSD license.
- * See README for more details.
- */
-
-#ifndef AIRTIME_POLICY_H
-#define AIRTIME_POLICY_H
-
-struct hostapd_iface;
-
-#ifdef CONFIG_AIRTIME_POLICY
-
-#define AIRTIME_DEFAULT_UPDATE_INTERVAL 200 /* ms */
-#define AIRTIME_BACKLOG_EXPIRY_FACTOR 2500 /* 2.5 intervals + convert to usec */
-
-/* scale quantum so this becomes the effective quantum after applying the max
- * weight, but never go below min or above max */
-#define AIRTIME_QUANTUM_MIN 8 /* usec */
-#define AIRTIME_QUANTUM_MAX 256 /* usec */
-#define AIRTIME_QUANTUM_TARGET 1024 /* usec */
-
-int airtime_policy_new_sta(struct hostapd_data *hapd, struct sta_info *sta);
-int airtime_policy_update_init(struct hostapd_iface *iface);
-void airtime_policy_update_deinit(struct hostapd_iface *iface);
-
-#else /* CONFIG_AIRTIME_POLICY */
-
-static inline int airtime_policy_new_sta(struct hostapd_data *hapd,
-					 struct sta_info *sta)
-{
-	return -1;
-}
-
-static inline int airtime_policy_update_init(struct hostapd_iface *iface)
-{
-	return -1;
-}
-
-static inline void airtime_policy_update_deinit(struct hostapd_iface *iface)
-{
-}
-
-#endif /* CONFIG_AIRTIME_POLICY */
-
-#endif /* AIRTIME_POLICY_H */
diff --git a/src/ap/ap_config.c b/src/ap/ap_config.c
index a061bd8..e640e99 100644
--- a/src/ap/ap_config.c
+++ b/src/ap/ap_config.c
@@ -13,14 +13,12 @@
 #include "crypto/tls.h"
 #include "radius/radius_client.h"
 #include "common/ieee802_11_defs.h"
-#include "common/ieee802_1x_defs.h"
 #include "common/eapol_common.h"
 #include "common/dhcp.h"
 #include "eap_common/eap_wsc_common.h"
 #include "eap_server/eap.h"
 #include "wpa_auth.h"
 #include "sta_info.h"
-#include "airtime_policy.h"
 #include "ap_config.h"
 
 
@@ -140,11 +138,6 @@
 	bss->hs20_release = (HS20_VERSION >> 4) + 1;
 #endif /* CONFIG_HS20 */
 
-#ifdef CONFIG_MACSEC
-	bss->mka_priority = DEFAULT_PRIO_NOT_KEY_SERVER;
-	bss->macsec_port = 1;
-#endif /* CONFIG_MACSEC */
-
 	/* Default to strict CRL checking. */
 	bss->check_crl_strict = 1;
 }
@@ -243,13 +236,6 @@
 	conf->acs_num_scans = 5;
 #endif /* CONFIG_ACS */
 
-#ifdef CONFIG_IEEE80211AX
-	conf->he_op.he_rts_threshold = HE_OPERATION_RTS_THRESHOLD_MASK >>
-		HE_OPERATION_RTS_THRESHOLD_OFFSET;
-	/* Set default basic MCS/NSS set to single stream MCS 0-7 */
-	conf->he_op.he_basic_mcs_nss_set = 0xfffc;
-#endif /* CONFIG_IEEE80211AX */
-
 	/* The third octet of the country string uses an ASCII space character
 	 * by default to indicate that the regulations encompass all
 	 * environments for the current frequency band in the country. */
@@ -258,10 +244,6 @@
 	conf->rssi_reject_assoc_rssi = 0;
 	conf->rssi_reject_assoc_timeout = 30;
 
-#ifdef CONFIG_AIRTIME_POLICY
-	conf->airtime_update_interval = AIRTIME_DEFAULT_UPDATE_INTERVAL;
-#endif /* CONFIG_AIRTIME_POLICY */
-
 	return conf;
 }
 
@@ -577,26 +559,8 @@
 }
 
 
-#ifdef CONFIG_DPP2
-static void hostapd_dpp_controller_conf_free(struct dpp_controller_conf *conf)
-{
-	struct dpp_controller_conf *prev;
-
-	while (conf) {
-		prev = conf;
-		conf = conf->next;
-		os_free(prev);
-	}
-}
-#endif /* CONFIG_DPP2 */
-
-
 void hostapd_config_free_bss(struct hostapd_bss_config *conf)
 {
-#if defined(CONFIG_WPS) || defined(CONFIG_HS20)
-	size_t i;
-#endif
-
 	if (conf == NULL)
 		return;
 
@@ -629,11 +593,8 @@
 	os_free(conf->ctrl_interface);
 	os_free(conf->ca_cert);
 	os_free(conf->server_cert);
-	os_free(conf->server_cert2);
 	os_free(conf->private_key);
-	os_free(conf->private_key2);
 	os_free(conf->private_key_passwd);
-	os_free(conf->private_key_passwd2);
 	os_free(conf->check_cert_subject);
 	os_free(conf->ocsp_stapling_response);
 	os_free(conf->ocsp_stapling_response_multi);
@@ -692,8 +653,12 @@
 	os_free(conf->model_description);
 	os_free(conf->model_url);
 	os_free(conf->upc);
-	for (i = 0; i < MAX_WPS_VENDOR_EXTENSIONS; i++)
-		wpabuf_free(conf->wps_vendor_ext[i]);
+	{
+		unsigned int i;
+
+		for (i = 0; i < MAX_WPS_VENDOR_EXTENSIONS; i++)
+			wpabuf_free(conf->wps_vendor_ext[i]);
+	}
 	wpabuf_free(conf->wps_nfc_dh_pubkey);
 	wpabuf_free(conf->wps_nfc_dh_privkey);
 	wpabuf_free(conf->wps_nfc_dev_pw);
@@ -719,6 +684,7 @@
 	os_free(conf->hs20_operating_class);
 	os_free(conf->hs20_icons);
 	if (conf->hs20_osu_providers) {
+		size_t i;
 		for (i = 0; i < conf->hs20_osu_providers_count; i++) {
 			struct hs20_osu_provider *p;
 			size_t j;
@@ -736,6 +702,8 @@
 		os_free(conf->hs20_osu_providers);
 	}
 	if (conf->hs20_operator_icon) {
+		size_t i;
+
 		for (i = 0; i < conf->hs20_operator_icon_count; i++)
 			os_free(conf->hs20_operator_icon[i]);
 		os_free(conf->hs20_operator_icon);
@@ -772,27 +740,10 @@
 	os_free(conf->dpp_connector);
 	wpabuf_free(conf->dpp_netaccesskey);
 	wpabuf_free(conf->dpp_csign);
-#ifdef CONFIG_DPP2
-	hostapd_dpp_controller_conf_free(conf->dpp_controller);
-#endif /* CONFIG_DPP2 */
 #endif /* CONFIG_DPP */
 
 	hostapd_config_free_sae_passwords(conf);
 
-#ifdef CONFIG_AIRTIME_POLICY
-	{
-		struct airtime_sta_weight *wt, *wt_prev;
-
-		wt = conf->airtime_weight_list;
-		conf->airtime_weight_list = NULL;
-		while (wt) {
-			wt_prev = wt;
-			wt = wt->next;
-			os_free(wt_prev);
-		}
-	}
-#endif /* CONFIG_AIRTIME_POLICY */
-
 	os_free(conf);
 }
 
@@ -1189,13 +1140,6 @@
 		return -1;
 	}
 
-#ifdef CONFIG_AIRTIME_POLICY
-	if (full_config && conf->airtime_mode > AIRTIME_MODE_STATIC &&
-	    !conf->airtime_update_interval) {
-		wpa_printf(MSG_ERROR, "Airtime update interval cannot be zero");
-		return -1;
-	}
-#endif /* CONFIG_AIRTIME_POLICY */
 	for (i = 0; i < NUM_TX_QUEUES; i++) {
 		if (hostapd_config_check_cw(conf, i))
 			return -1;
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index eebf898..509677a 100644
--- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h
@@ -15,7 +15,6 @@
 #include "common/wpa_common.h"
 #include "common/ieee802_11_defs.h"
 #include "common/ieee802_11_common.h"
-#include "crypto/sha256.h"
 #include "wps/wps.h"
 #include "fst/fst.h"
 #include "vlan.h"
@@ -253,18 +252,6 @@
 	int vlan_id;
 };
 
-struct dpp_controller_conf {
-	struct dpp_controller_conf *next;
-	u8 pkhash[SHA256_MAC_LEN];
-	struct hostapd_ip_addr ipaddr;
-};
-
-struct airtime_sta_weight {
-	struct airtime_sta_weight *next;
-	unsigned int weight;
-	u8 addr[ETH_ALEN];
-};
-
 /**
  * struct hostapd_bss_config - Per-BSS configuration
  */
@@ -403,11 +390,8 @@
 
 	char *ca_cert;
 	char *server_cert;
-	char *server_cert2;
 	char *private_key;
-	char *private_key2;
 	char *private_key_passwd;
-	char *private_key_passwd2;
 	char *check_cert_subject;
 	int check_crl;
 	int check_crl_strict;
@@ -426,8 +410,6 @@
 	int eap_fast_prov;
 	int pac_key_lifetime;
 	int pac_key_refresh_time;
-	int eap_teap_auth;
-	int eap_teap_pac_no_inner;
 	int eap_sim_aka_result_ind;
 	int tnc;
 	int fragment_size;
@@ -588,7 +570,6 @@
 	int osen;
 	int proxy_arp;
 	int na_mcast_to_ucast;
-
 #ifdef CONFIG_HS20
 	int hs20;
 	int hs20_release;
@@ -711,9 +692,6 @@
 	struct wpabuf *dpp_netaccesskey;
 	unsigned int dpp_netaccesskey_expiry;
 	struct wpabuf *dpp_csign;
-#ifdef CONFIG_DPP2
-	struct dpp_controller_conf *dpp_controller;
-#endif /* CONFIG_DPP2 */
 #endif /* CONFIG_DPP */
 
 #ifdef CONFIG_OWE
@@ -731,100 +709,6 @@
 #define BACKHAUL_BSS 1
 #define FRONTHAUL_BSS 2
 	int multi_ap; /* bitmap of BACKHAUL_BSS, FRONTHAUL_BSS */
-
-#ifdef CONFIG_AIRTIME_POLICY
-	unsigned int airtime_weight;
-	int airtime_limit;
-	struct airtime_sta_weight *airtime_weight_list;
-#endif /* CONFIG_AIRTIME_POLICY */
-
-#ifdef CONFIG_MACSEC
-	/**
-	 * macsec_policy - Determines the policy for MACsec secure session
-	 *
-	 * 0: MACsec not in use (default)
-	 * 1: MACsec enabled - Should secure, accept key server's advice to
-	 *    determine whether to use a secure session or not.
-	 */
-	int macsec_policy;
-
-	/**
-	 * macsec_integ_only - Determines how MACsec are transmitted
-	 *
-	 * This setting applies only when MACsec is in use, i.e.,
-	 *  - macsec_policy is enabled
-	 *  - the key server has decided to enable MACsec
-	 *
-	 * 0: Encrypt traffic (default)
-	 * 1: Integrity only
-	 */
-	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.
-	 *
-	 * Range: 1-65534 (default: 1)
-	 */
-	int macsec_port;
-
-	/**
-	 * mka_priority - Priority of MKA Actor
-	 *
-	 * Range: 0-255 (default: 255)
-	 */
-	int mka_priority;
-
-	/**
-	 * mka_ckn - MKA pre-shared CKN
-	 */
-#define MACSEC_CKN_MAX_LEN 32
-	size_t mka_ckn_len;
-	u8 mka_ckn[MACSEC_CKN_MAX_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 MKA_PSK_SET_CKN BIT(0)
-#define MKA_PSK_SET_CAK BIT(1)
-#define MKA_PSK_SET (MKA_PSK_SET_CKN | MKA_PSK_SET_CAK)
-	/**
-	 * mka_psk_set - Whether mka_ckn and mka_cak are set
-	 */
-	u8 mka_psk_set;
-#endif /* CONFIG_MACSEC */
 };
 
 /**
@@ -843,20 +727,7 @@
 	u8 he_bss_color;
 	u8 he_default_pe_duration;
 	u8 he_twt_required;
-	u16 he_rts_threshold;
-	u16 he_basic_mcs_nss_set;
-};
-
-/**
- * struct spatial_reuse - Spatial reuse
- */
-struct spatial_reuse {
-	u8 sr_control;
-	u8 non_srg_obss_pd_max_offset;
-	u8 srg_obss_pd_min_offset;
-	u8 srg_obss_pd_max_offset;
-	u8 srg_obss_color_bitmap;
-	u8 srg_obss_color_partial_bitmap;
+	u8 he_rts_threshold;
 };
 
 /**
@@ -981,10 +852,6 @@
 	struct he_phy_capabilities_info he_phy_capab;
 	struct he_operation he_op;
 	struct ieee80211_he_mu_edca_parameter_set he_mu_edca;
-	struct spatial_reuse spr;
-	u8 he_oper_chwidth;
-	u8 he_oper_centr_freq_seg0_idx;
-	u8 he_oper_centr_freq_seg1_idx;
 #endif /* CONFIG_IEEE80211AX */
 
 	/* VHT enable/disable config from CHAN_SWITCH */
@@ -994,83 +861,9 @@
 
 	int rssi_reject_assoc_rssi;
 	int rssi_reject_assoc_timeout;
-
-#ifdef CONFIG_AIRTIME_POLICY
-	enum {
-		AIRTIME_MODE_OFF = 0,
-		AIRTIME_MODE_STATIC = 1,
-		AIRTIME_MODE_DYNAMIC = 2,
-		AIRTIME_MODE_LIMIT = 3,
-		__AIRTIME_MODE_MAX,
-	} airtime_mode;
-	unsigned int airtime_update_interval;
-#define AIRTIME_MODE_MAX (__AIRTIME_MODE_MAX - 1)
-#endif /* CONFIG_AIRTIME_POLICY */
 };
 
 
-static inline u8 hostapd_get_oper_chwidth(struct hostapd_config *conf)
-{
-#ifdef CONFIG_IEEE80211AX
-	if (conf->ieee80211ax)
-		return conf->he_oper_chwidth;
-#endif /* CONFIG_IEEE80211AX */
-	return conf->vht_oper_chwidth;
-}
-
-static inline void
-hostapd_set_oper_chwidth(struct hostapd_config *conf, u8 oper_chwidth)
-{
-#ifdef CONFIG_IEEE80211AX
-	if (conf->ieee80211ax)
-		conf->he_oper_chwidth = oper_chwidth;
-#endif /* CONFIG_IEEE80211AX */
-	conf->vht_oper_chwidth = oper_chwidth;
-}
-
-static inline u8
-hostapd_get_oper_centr_freq_seg0_idx(struct hostapd_config *conf)
-{
-#ifdef CONFIG_IEEE80211AX
-	if (conf->ieee80211ax)
-		return conf->he_oper_centr_freq_seg0_idx;
-#endif /* CONFIG_IEEE80211AX */
-	return conf->vht_oper_centr_freq_seg0_idx;
-}
-
-static inline void
-hostapd_set_oper_centr_freq_seg0_idx(struct hostapd_config *conf,
-				     u8 oper_centr_freq_seg0_idx)
-{
-#ifdef CONFIG_IEEE80211AX
-	if (conf->ieee80211ax)
-		conf->he_oper_centr_freq_seg0_idx = oper_centr_freq_seg0_idx;
-#endif /* CONFIG_IEEE80211AX */
-	conf->vht_oper_centr_freq_seg0_idx = oper_centr_freq_seg0_idx;
-}
-
-static inline u8
-hostapd_get_oper_centr_freq_seg1_idx(struct hostapd_config *conf)
-{
-#ifdef CONFIG_IEEE80211AX
-	if (conf->ieee80211ax)
-		return conf->he_oper_centr_freq_seg1_idx;
-#endif /* CONFIG_IEEE80211AX */
-	return conf->vht_oper_centr_freq_seg1_idx;
-}
-
-static inline void
-hostapd_set_oper_centr_freq_seg1_idx(struct hostapd_config *conf,
-				     u8 oper_centr_freq_seg1_idx)
-{
-#ifdef CONFIG_IEEE80211AX
-	if (conf->ieee80211ax)
-		conf->he_oper_centr_freq_seg1_idx = oper_centr_freq_seg1_idx;
-#endif /* CONFIG_IEEE80211AX */
-	conf->vht_oper_centr_freq_seg1_idx = oper_centr_freq_seg1_idx;
-}
-
-
 int hostapd_mac_comp(const void *a, const void *b);
 struct hostapd_config * hostapd_config_defaults(void);
 void hostapd_config_defaults_bss(struct hostapd_bss_config *bss);
diff --git a/src/ap/ap_drv_ops.c b/src/ap/ap_drv_ops.c
index c0ededa..067cf86 100644
--- a/src/ap/ap_drv_ops.c
+++ b/src/ap/ap_drv_ops.c
@@ -413,8 +413,6 @@
 		    u16 listen_interval,
 		    const struct ieee80211_ht_capabilities *ht_capab,
 		    const struct ieee80211_vht_capabilities *vht_capab,
-		    const struct ieee80211_he_capabilities *he_capab,
-		    size_t he_capab_len,
 		    u32 flags, u8 qosinfo, u8 vht_opmode, int supp_p2p_ps,
 		    int set)
 {
@@ -434,8 +432,6 @@
 	params.listen_interval = listen_interval;
 	params.ht_capabilities = ht_capab;
 	params.vht_capabilities = vht_capab;
-	params.he_capab = he_capab;
-	params.he_capab_len = he_capab_len;
 	params.vht_opmode_enabled = !!(flags & WLAN_STA_VHT_OPMODE_ENABLED);
 	params.vht_opmode = vht_opmode;
 	params.flags = hostapd_sta_flags_to_drv(flags);
@@ -541,20 +537,17 @@
 
 int hostapd_set_freq(struct hostapd_data *hapd, enum hostapd_hw_mode mode,
 		     int freq, int channel, int ht_enabled, int vht_enabled,
-		     int he_enabled,
-		     int sec_channel_offset, int oper_chwidth,
+		     int sec_channel_offset, int vht_oper_chwidth,
 		     int center_segment0, int center_segment1)
 {
 	struct hostapd_freq_params data;
-	struct hostapd_hw_modes *cmode = hapd->iface->current_mode;
 
 	if (hostapd_set_freq_params(&data, mode, freq, channel, ht_enabled,
-				    vht_enabled, he_enabled, sec_channel_offset,
-				    oper_chwidth,
+				    vht_enabled, sec_channel_offset,
+				    vht_oper_chwidth,
 				    center_segment0, center_segment1,
-				    cmode ? cmode->vht_capab : 0,
-				    cmode ?
-				    &cmode->he_capab[IEEE80211_MODE_AP] : NULL))
+				    hapd->iface->current_mode ?
+				    hapd->iface->current_mode->vht_capab : 0))
 		return -1;
 
 	if (hapd->driver == NULL)
@@ -590,16 +583,6 @@
 }
 
 
-int hostapd_sta_set_airtime_weight(struct hostapd_data *hapd, const u8 *addr,
-				   unsigned int weight)
-{
-	if (!hapd->driver || !hapd->driver->sta_set_airtime_weight)
-		return 0;
-	return hapd->driver->sta_set_airtime_weight(hapd->drv_priv, addr,
-						    weight);
-}
-
-
 int hostapd_set_country(struct hostapd_data *hapd, const char *country)
 {
 	if (hapd->driver == NULL ||
@@ -792,16 +775,14 @@
 int hostapd_start_dfs_cac(struct hostapd_iface *iface,
 			  enum hostapd_hw_mode mode, int freq,
 			  int channel, int ht_enabled, int vht_enabled,
-			  int he_enabled,
-			  int sec_channel_offset, int oper_chwidth,
+			  int sec_channel_offset, int vht_oper_chwidth,
 			  int center_segment0, int center_segment1)
 {
 	struct hostapd_data *hapd = iface->bss[0];
 	struct hostapd_freq_params data;
 	int res;
-	struct hostapd_hw_modes *cmode = iface->current_mode;
 
-	if (!hapd->driver || !hapd->driver->start_dfs_cac || !cmode)
+	if (!hapd->driver || !hapd->driver->start_dfs_cac)
 		return 0;
 
 	if (!iface->conf->ieee80211h) {
@@ -811,11 +792,10 @@
 	}
 
 	if (hostapd_set_freq_params(&data, mode, freq, channel, ht_enabled,
-				    vht_enabled, he_enabled, sec_channel_offset,
-				    oper_chwidth, center_segment0,
+				    vht_enabled, sec_channel_offset,
+				    vht_oper_chwidth, center_segment0,
 				    center_segment1,
-				    cmode->vht_capab,
-				    &cmode->he_capab[IEEE80211_MODE_AP])) {
+				    iface->current_mode->vht_capab)) {
 		wpa_printf(MSG_ERROR, "Can't set freq params");
 		return -1;
 	}
@@ -939,17 +919,15 @@
 	if (hapd->iface->conf->ieee80211n && params.ht40_enabled)
 		params.ch_width = 40;
 
-	/* Note: VHT20 is defined by combination of ht_capab & oper_chwidth
+	/* Note: VHT20 is defined by combination of ht_capab & vht_oper_chwidth
 	 */
-	if ((hapd->iface->conf->ieee80211ax ||
-	     hapd->iface->conf->ieee80211ac) &&
-	    params.ht40_enabled) {
-		u8 oper_chwidth = hostapd_get_oper_chwidth(hapd->iface->conf);
-
-		if (oper_chwidth == CHANWIDTH_80MHZ)
+	if (hapd->iface->conf->ieee80211ac && params.ht40_enabled) {
+		if (hapd->iface->conf->vht_oper_chwidth == VHT_CHANWIDTH_80MHZ)
 			params.ch_width = 80;
-		else if (oper_chwidth == CHANWIDTH_160MHZ ||
-			 oper_chwidth == CHANWIDTH_80P80MHZ)
+		else if (hapd->iface->conf->vht_oper_chwidth ==
+			 VHT_CHANWIDTH_160MHZ ||
+			 hapd->iface->conf->vht_oper_chwidth ==
+			 VHT_CHANWIDTH_80P80MHZ)
 			params.ch_width = 160;
 	}
 
@@ -958,13 +936,3 @@
 
 	return ret;
 }
-
-
-int hostapd_drv_update_dh_ie(struct hostapd_data *hapd, const u8 *peer,
-			     u16 reason_code, const u8 *ie, size_t ielen)
-{
-	if (!hapd->driver || !hapd->driver->update_dh_ie || !hapd->drv_priv)
-		return 0;
-	return hapd->driver->update_dh_ie(hapd->drv_priv, peer, reason_code,
-					  ie, ielen);
-}
diff --git a/src/ap/ap_drv_ops.h b/src/ap/ap_drv_ops.h
index ca7f7ab..de40171 100644
--- a/src/ap/ap_drv_ops.h
+++ b/src/ap/ap_drv_ops.h
@@ -41,8 +41,6 @@
 		    u16 listen_interval,
 		    const struct ieee80211_ht_capabilities *ht_capab,
 		    const struct ieee80211_vht_capabilities *vht_capab,
-		    const struct ieee80211_he_capabilities *he_capab,
-		    size_t he_capab_len,
 		    u32 flags, u8 qosinfo, u8 vht_opmode, int supp_p2p_ps,
 		    int set);
 int hostapd_set_privacy(struct hostapd_data *hapd, int enabled);
@@ -63,14 +61,12 @@
 int hostapd_flush(struct hostapd_data *hapd);
 int hostapd_set_freq(struct hostapd_data *hapd, enum hostapd_hw_mode mode,
 		     int freq, int channel, int ht_enabled, int vht_enabled,
-		     int he_enabled, int sec_channel_offset, int oper_chwidth,
+		     int sec_channel_offset, int vht_oper_chwidth,
 		     int center_segment0, int center_segment1);
 int hostapd_set_rts(struct hostapd_data *hapd, int rts);
 int hostapd_set_frag(struct hostapd_data *hapd, int frag);
 int hostapd_sta_set_flags(struct hostapd_data *hapd, u8 *addr,
 			  int total_flags, int flags_or, int flags_and);
-int hostapd_sta_set_airtime_weight(struct hostapd_data *hapd, const u8 *addr,
-				   unsigned int weight);
 int hostapd_set_country(struct hostapd_data *hapd, const char *country);
 int hostapd_set_tx_queue_params(struct hostapd_data *hapd, int queue, int aifs,
 				int cw_min, int cw_max, int burst_time);
@@ -126,12 +122,9 @@
 int hostapd_start_dfs_cac(struct hostapd_iface *iface,
 			  enum hostapd_hw_mode mode, int freq,
 			  int channel, int ht_enabled, int vht_enabled,
-			  int he_enabled,
-			  int sec_channel_offset, int oper_chwidth,
+			  int sec_channel_offset, int vht_oper_chwidth,
 			  int center_segment0, int center_segment1);
 int hostapd_drv_do_acs(struct hostapd_data *hapd);
-int hostapd_drv_update_dh_ie(struct hostapd_data *hapd, const u8 *peer,
-			     u16 reason_code, const u8 *ie, size_t ielen);
 
 
 #include "drivers/driver.h"
diff --git a/src/ap/authsrv.c b/src/ap/authsrv.c
index b3d9107..eced6c7 100644
--- a/src/ap/authsrv.c
+++ b/src/ap/authsrv.c
@@ -120,8 +120,6 @@
 	srv.eap_fast_prov = conf->eap_fast_prov;
 	srv.pac_key_lifetime = conf->pac_key_lifetime;
 	srv.pac_key_refresh_time = conf->pac_key_refresh_time;
-	srv.eap_teap_auth = conf->eap_teap_auth;
-	srv.eap_teap_pac_no_inner = conf->eap_teap_pac_no_inner;
 	srv.eap_sim_aka_result_ind = conf->eap_sim_aka_result_ind;
 	srv.tnc = conf->tnc;
 	srv.wps = hapd->wps;
@@ -197,8 +195,7 @@
 #ifdef EAP_TLS_FUNCS
 	if (hapd->conf->eap_server &&
 	    (hapd->conf->ca_cert || hapd->conf->server_cert ||
-	     hapd->conf->private_key || hapd->conf->dh_file ||
-	     hapd->conf->server_cert2 || hapd->conf->private_key2)) {
+	     hapd->conf->private_key || hapd->conf->dh_file)) {
 		struct tls_config conf;
 		struct tls_connection_params params;
 
@@ -227,11 +224,8 @@
 		os_memset(&params, 0, sizeof(params));
 		params.ca_cert = hapd->conf->ca_cert;
 		params.client_cert = hapd->conf->server_cert;
-		params.client_cert2 = hapd->conf->server_cert2;
 		params.private_key = hapd->conf->private_key;
-		params.private_key2 = hapd->conf->private_key2;
 		params.private_key_passwd = hapd->conf->private_key_passwd;
-		params.private_key_passwd2 = hapd->conf->private_key_passwd2;
 		params.dh_file = hapd->conf->dh_file;
 		params.openssl_ciphers = hapd->conf->openssl_ciphers;
 		params.openssl_ecdh_curves = hapd->conf->openssl_ecdh_curves;
diff --git a/src/ap/beacon.c b/src/ap/beacon.c
index a51b949..3e62991 100644
--- a/src/ap/beacon.c
+++ b/src/ap/beacon.c
@@ -347,7 +347,7 @@
 
 	if (ieee80211_freq_to_channel_ext(hapd->iface->freq,
 					  hapd->iconf->secondary_channel,
-					  hostapd_get_oper_chwidth(hapd->iconf),
+					  hapd->iconf->vht_oper_chwidth,
 					  &op_class, &channel) ==
 	    NUM_HOSTAPD_MODES)
 		return eid;
@@ -398,8 +398,7 @@
 	if (hapd->iconf->ieee80211ax) {
 		buflen += 3 + sizeof(struct ieee80211_he_capabilities) +
 			3 + sizeof(struct ieee80211_he_operation) +
-			3 + sizeof(struct ieee80211_he_mu_edca_parameter_set) +
-			3 + sizeof(struct ieee80211_spatial_reuse);
+			3 + sizeof(struct ieee80211_he_mu_edca_parameter_set);
 	}
 #endif /* CONFIG_IEEE80211AX */
 
@@ -510,10 +509,9 @@
 
 #ifdef CONFIG_IEEE80211AX
 	if (hapd->iconf->ieee80211ax) {
-		pos = hostapd_eid_he_capab(hapd, pos, IEEE80211_MODE_AP);
+		pos = hostapd_eid_he_capab(hapd, pos);
 		pos = hostapd_eid_he_operation(hapd, pos);
 		pos = hostapd_eid_he_mu_edca_parameter_set(hapd, pos);
-		pos = hostapd_eid_spatial_reuse(hapd, pos);
 	}
 #endif /* CONFIG_IEEE80211AX */
 
@@ -595,7 +593,7 @@
 
 	pos = ssid_list;
 	end = ssid_list + ssid_list_len;
-	while (end - pos >= 2) {
+	while (end - pos >= 1) {
 		if (2 + pos[1] > end - pos)
 			break;
 		if (pos[1] == 0)
@@ -1090,8 +1088,7 @@
 	if (hapd->iconf->ieee80211ax) {
 		tail_len += 3 + sizeof(struct ieee80211_he_capabilities) +
 			3 + sizeof(struct ieee80211_he_operation) +
-			3 + sizeof(struct ieee80211_he_mu_edca_parameter_set) +
-			3 + sizeof(struct ieee80211_spatial_reuse);
+			3 + sizeof(struct ieee80211_he_mu_edca_parameter_set);
 	}
 #endif /* CONFIG_IEEE80211AX */
 
@@ -1226,11 +1223,9 @@
 
 #ifdef CONFIG_IEEE80211AX
 	if (hapd->iconf->ieee80211ax) {
-		tailpos = hostapd_eid_he_capab(hapd, tailpos,
-					       IEEE80211_MODE_AP);
+		tailpos = hostapd_eid_he_capab(hapd, tailpos);
 		tailpos = hostapd_eid_he_operation(hapd, tailpos);
 		tailpos = hostapd_eid_he_mu_edca_parameter_set(hapd, tailpos);
-		tailpos = hostapd_eid_spatial_reuse(hapd, tailpos);
 	}
 #endif /* CONFIG_IEEE80211AX */
 
@@ -1399,7 +1394,6 @@
 	struct hostapd_freq_params freq;
 	struct hostapd_iface *iface = hapd->iface;
 	struct hostapd_config *iconf = iface->conf;
-	struct hostapd_hw_modes *cmode = iface->current_mode;
 	struct wpabuf *beacon, *proberesp, *assocresp;
 	int res, ret = -1;
 
@@ -1423,16 +1417,15 @@
 	params.reenable = hapd->reenable_beacon;
 	hapd->reenable_beacon = 0;
 
-	if (cmode &&
+	if (iface->current_mode &&
 	    hostapd_set_freq_params(&freq, iconf->hw_mode, iface->freq,
 				    iconf->channel, iconf->ieee80211n,
-				    iconf->ieee80211ac, iconf->ieee80211ax,
+				    iconf->ieee80211ac,
 				    iconf->secondary_channel,
-				    hostapd_get_oper_chwidth(iconf),
-				    hostapd_get_oper_centr_freq_seg0_idx(iconf),
-				    hostapd_get_oper_centr_freq_seg1_idx(iconf),
-				    cmode->vht_capab,
-				    &cmode->he_capab[IEEE80211_MODE_AP]) == 0)
+				    iconf->vht_oper_chwidth,
+				    iconf->vht_oper_centr_freq_seg0_idx,
+				    iconf->vht_oper_centr_freq_seg1_idx,
+				    iface->current_mode->vht_capab) == 0)
 		params.freq = &freq;
 
 	res = hostapd_drv_set_ap(hapd, &params);
diff --git a/src/ap/ctrl_iface_ap.c b/src/ap/ctrl_iface_ap.c
index 2c4953d..c693715 100644
--- a/src/ap/ctrl_iface_ap.c
+++ b/src/ap/ctrl_iface_ap.c
@@ -712,7 +712,6 @@
 			  "secondary_channel=%d\n"
 			  "ieee80211n=%d\n"
 			  "ieee80211ac=%d\n"
-			  "ieee80211ax=%d\n"
 			  "beacon_int=%u\n"
 			  "dtim_period=%d\n",
 			  iface->conf->channel,
@@ -721,7 +720,6 @@
 			  iface->conf->ieee80211n && !hapd->conf->disable_11n,
 			  iface->conf->ieee80211ac &&
 			  !hapd->conf->disable_11ac,
-			  iface->conf->ieee80211ax,
 			  iface->conf->beacon_int,
 			  hapd->conf->dtim_period);
 	if (os_snprintf_error(buflen - len, ret))
diff --git a/src/ap/dfs.c b/src/ap/dfs.c
index ac23c2b..79cd00f 100644
--- a/src/ap/dfs.c
+++ b/src/ap/dfs.c
@@ -28,17 +28,17 @@
 	if (iface->conf->ieee80211n && iface->conf->secondary_channel)
 		n_chans = 2;
 
-	if (iface->conf->ieee80211ac || iface->conf->ieee80211ax) {
-		switch (hostapd_get_oper_chwidth(iface->conf)) {
-		case CHANWIDTH_USE_HT:
+	if (iface->conf->ieee80211ac) {
+		switch (iface->conf->vht_oper_chwidth) {
+		case VHT_CHANWIDTH_USE_HT:
 			break;
-		case CHANWIDTH_80MHZ:
+		case VHT_CHANWIDTH_80MHZ:
 			n_chans = 4;
 			break;
-		case CHANWIDTH_160MHZ:
+		case VHT_CHANWIDTH_160MHZ:
 			n_chans = 8;
 			break;
-		case CHANWIDTH_80P80MHZ:
+		case VHT_CHANWIDTH_80P80MHZ:
 			n_chans = 4;
 			*seg1 = 4;
 			break;
@@ -188,8 +188,8 @@
  * The function assumes HT40+ operation.
  * Make sure to adjust the following variables after calling this:
  *  - hapd->secondary_channel
- *  - hapd->vht/he_oper_centr_freq_seg0_idx
- *  - hapd->vht/he_oper_centr_freq_seg1_idx
+ *  - hapd->vht_oper_centr_freq_seg0_idx
+ *  - hapd->vht_oper_centr_freq_seg1_idx
  */
 static int dfs_find_channel(struct hostapd_iface *iface,
 			    struct hostapd_channel_data **ret_chan,
@@ -232,44 +232,44 @@
 }
 
 
-static void dfs_adjust_center_freq(struct hostapd_iface *iface,
-				   struct hostapd_channel_data *chan,
-				   int secondary_channel,
-				   u8 *oper_centr_freq_seg0_idx,
-				   u8 *oper_centr_freq_seg1_idx)
+static void dfs_adjust_vht_center_freq(struct hostapd_iface *iface,
+				       struct hostapd_channel_data *chan,
+				       int secondary_channel,
+				       u8 *vht_oper_centr_freq_seg0_idx,
+				       u8 *vht_oper_centr_freq_seg1_idx)
 {
-	if (!iface->conf->ieee80211ac && !iface->conf->ieee80211ax)
+	if (!iface->conf->ieee80211ac)
 		return;
 
 	if (!chan)
 		return;
 
-	*oper_centr_freq_seg1_idx = 0;
+	*vht_oper_centr_freq_seg1_idx = 0;
 
-	switch (hostapd_get_oper_chwidth(iface->conf)) {
-	case CHANWIDTH_USE_HT:
+	switch (iface->conf->vht_oper_chwidth) {
+	case VHT_CHANWIDTH_USE_HT:
 		if (secondary_channel == 1)
-			*oper_centr_freq_seg0_idx = chan->chan + 2;
+			*vht_oper_centr_freq_seg0_idx = chan->chan + 2;
 		else if (secondary_channel == -1)
-			*oper_centr_freq_seg0_idx = chan->chan - 2;
+			*vht_oper_centr_freq_seg0_idx = chan->chan - 2;
 		else
-			*oper_centr_freq_seg0_idx = chan->chan;
+			*vht_oper_centr_freq_seg0_idx = chan->chan;
 		break;
-	case CHANWIDTH_80MHZ:
-		*oper_centr_freq_seg0_idx = chan->chan + 6;
+	case VHT_CHANWIDTH_80MHZ:
+		*vht_oper_centr_freq_seg0_idx = chan->chan + 6;
 		break;
-	case CHANWIDTH_160MHZ:
-		*oper_centr_freq_seg0_idx = chan->chan + 14;
+	case VHT_CHANWIDTH_160MHZ:
+		*vht_oper_centr_freq_seg0_idx = chan->chan + 14;
 		break;
 	default:
 		wpa_printf(MSG_INFO, "DFS only VHT20/40/80/160 is supported now");
-		*oper_centr_freq_seg0_idx = 0;
+		*vht_oper_centr_freq_seg0_idx = 0;
 		break;
 	}
 
 	wpa_printf(MSG_DEBUG, "DFS adjusting VHT center frequency: %d, %d",
-		   *oper_centr_freq_seg0_idx,
-		   *oper_centr_freq_seg1_idx);
+		   *vht_oper_centr_freq_seg0_idx,
+		   *vht_oper_centr_freq_seg1_idx);
 }
 
 
@@ -288,24 +288,24 @@
 	if (iface->conf->ieee80211n && iface->conf->secondary_channel == -1)
 		channel_no -= 4;
 
-	/* VHT/HE */
-	if (iface->conf->ieee80211ac || iface->conf->ieee80211ax) {
-		switch (hostapd_get_oper_chwidth(iface->conf)) {
-		case CHANWIDTH_USE_HT:
+	/* VHT */
+	if (iface->conf->ieee80211ac) {
+		switch (iface->conf->vht_oper_chwidth) {
+		case VHT_CHANWIDTH_USE_HT:
 			break;
-		case CHANWIDTH_80MHZ:
-			channel_no = hostapd_get_oper_centr_freq_seg0_idx(
-				iface->conf) - 6;
+		case VHT_CHANWIDTH_80MHZ:
+			channel_no =
+				iface->conf->vht_oper_centr_freq_seg0_idx - 6;
 			break;
-		case CHANWIDTH_160MHZ:
-			channel_no = hostapd_get_oper_centr_freq_seg0_idx(
-				iface->conf) - 14;
+		case VHT_CHANWIDTH_160MHZ:
+			channel_no =
+				iface->conf->vht_oper_centr_freq_seg0_idx - 14;
 			break;
-		case CHANWIDTH_80P80MHZ:
-			channel_no = hostapd_get_oper_centr_freq_seg0_idx(
-				iface->conf) - 6;
-			chan_seg1 = hostapd_get_oper_centr_freq_seg1_idx(
-				iface->conf) - 6;
+		case VHT_CHANWIDTH_80P80MHZ:
+			channel_no =
+				iface->conf->vht_oper_centr_freq_seg0_idx - 6;
+			chan_seg1 =
+				iface->conf->vht_oper_centr_freq_seg1_idx - 6;
 			break;
 		default:
 			wpa_printf(MSG_INFO,
@@ -348,7 +348,7 @@
 			   mode->num_channels, channel_no, iface->conf->channel,
 			   iface->conf->ieee80211n,
 			   iface->conf->secondary_channel,
-			   hostapd_get_oper_chwidth(iface->conf));
+			   iface->conf->vht_oper_chwidth);
 
 		for (i = 0; i < mode->num_channels; i++) {
 			wpa_printf(MSG_DEBUG, "Available channel: %d",
@@ -435,8 +435,8 @@
 static struct hostapd_channel_data *
 dfs_get_valid_channel(struct hostapd_iface *iface,
 		      int *secondary_channel,
-		      u8 *oper_centr_freq_seg0_idx,
-		      u8 *oper_centr_freq_seg1_idx,
+		      u8 *vht_oper_centr_freq_seg0_idx,
+		      u8 *vht_oper_centr_freq_seg1_idx,
 		      int skip_radar)
 {
 	struct hostapd_hw_modes *mode;
@@ -447,8 +447,8 @@
 
 	wpa_printf(MSG_DEBUG, "DFS: Selecting random channel");
 	*secondary_channel = 0;
-	*oper_centr_freq_seg0_idx = 0;
-	*oper_centr_freq_seg1_idx = 0;
+	*vht_oper_centr_freq_seg0_idx = 0;
+	*vht_oper_centr_freq_seg1_idx = 0;
 
 	if (iface->current_mode == NULL)
 		return NULL;
@@ -473,10 +473,10 @@
 	else
 		*secondary_channel = 0;
 
-	dfs_adjust_center_freq(iface, chan,
-			       *secondary_channel,
-			       oper_centr_freq_seg0_idx,
-			       oper_centr_freq_seg1_idx);
+	dfs_adjust_vht_center_freq(iface, chan,
+				   *secondary_channel,
+				   vht_oper_centr_freq_seg0_idx,
+				   vht_oper_centr_freq_seg1_idx);
 
 	return chan;
 }
@@ -724,8 +724,8 @@
 			iface->freq = channel->freq;
 			iface->conf->channel = channel->chan;
 			iface->conf->secondary_channel = sec;
-			hostapd_set_oper_centr_freq_seg0_idx(iface->conf, cf1);
-			hostapd_set_oper_centr_freq_seg1_idx(iface->conf, cf2);
+			iface->conf->vht_oper_centr_freq_seg0_idx = cf1;
+			iface->conf->vht_oper_centr_freq_seg1_idx = cf2;
 		}
 	} while (res);
 
@@ -736,19 +736,20 @@
 		"freq=%d chan=%d sec_chan=%d, width=%d, seg0=%d, seg1=%d, cac_time=%ds",
 		iface->freq,
 		iface->conf->channel, iface->conf->secondary_channel,
-		hostapd_get_oper_chwidth(iface->conf),
-		hostapd_get_oper_centr_freq_seg0_idx(iface->conf),
-		hostapd_get_oper_centr_freq_seg1_idx(iface->conf),
+		iface->conf->vht_oper_chwidth,
+		iface->conf->vht_oper_centr_freq_seg0_idx,
+		iface->conf->vht_oper_centr_freq_seg1_idx,
 		iface->dfs_cac_ms / 1000);
 
-	res = hostapd_start_dfs_cac(
-		iface, iface->conf->hw_mode, iface->freq, iface->conf->channel,
-		iface->conf->ieee80211n, iface->conf->ieee80211ac,
-		iface->conf->ieee80211ax,
-		iface->conf->secondary_channel,
-		hostapd_get_oper_chwidth(iface->conf),
-		hostapd_get_oper_centr_freq_seg0_idx(iface->conf),
-		hostapd_get_oper_centr_freq_seg1_idx(iface->conf));
+	res = hostapd_start_dfs_cac(iface, iface->conf->hw_mode,
+				    iface->freq,
+				    iface->conf->channel,
+				    iface->conf->ieee80211n,
+				    iface->conf->ieee80211ac,
+				    iface->conf->secondary_channel,
+				    iface->conf->vht_oper_chwidth,
+				    iface->conf->vht_oper_centr_freq_seg0_idx,
+				    iface->conf->vht_oper_centr_freq_seg1_idx);
 
 	if (res) {
 		wpa_printf(MSG_ERROR, "DFS start_dfs_cac() failed, %d", res);
@@ -841,16 +842,16 @@
 {
 	struct hostapd_channel_data *channel;
 	int secondary_channel;
-	u8 oper_centr_freq_seg0_idx = 0;
-	u8 oper_centr_freq_seg1_idx = 0;
+	u8 vht_oper_centr_freq_seg0_idx = 0;
+	u8 vht_oper_centr_freq_seg1_idx = 0;
 	int skip_radar = 0;
 	int err = 1;
 
 	/* Radar detected during active CAC */
 	iface->cac_started = 0;
 	channel = dfs_get_valid_channel(iface, &secondary_channel,
-					&oper_centr_freq_seg0_idx,
-					&oper_centr_freq_seg1_idx,
+					&vht_oper_centr_freq_seg0_idx,
+					&vht_oper_centr_freq_seg1_idx,
 					skip_radar);
 
 	if (!channel) {
@@ -867,10 +868,10 @@
 	iface->freq = channel->freq;
 	iface->conf->channel = channel->chan;
 	iface->conf->secondary_channel = secondary_channel;
-	hostapd_set_oper_centr_freq_seg0_idx(iface->conf,
-					     oper_centr_freq_seg0_idx);
-	hostapd_set_oper_centr_freq_seg1_idx(iface->conf,
-					     oper_centr_freq_seg1_idx);
+	iface->conf->vht_oper_centr_freq_seg0_idx =
+		vht_oper_centr_freq_seg0_idx;
+	iface->conf->vht_oper_centr_freq_seg1_idx =
+		vht_oper_centr_freq_seg1_idx;
 	err = 0;
 
 	hostapd_setup_interface_complete(iface, err);
@@ -882,13 +883,12 @@
 {
 	struct hostapd_channel_data *channel;
 	int secondary_channel;
-	u8 oper_centr_freq_seg0_idx;
-	u8 oper_centr_freq_seg1_idx;
+	u8 vht_oper_centr_freq_seg0_idx;
+	u8 vht_oper_centr_freq_seg1_idx;
 	int skip_radar = 1;
 	struct csa_settings csa_settings;
 	unsigned int i;
 	int err = 1;
-	struct hostapd_hw_modes *cmode = iface->current_mode;
 
 	wpa_printf(MSG_DEBUG, "%s called (CAC active: %s, CSA active: %s)",
 		   __func__, iface->cac_started ? "yes" : "no",
@@ -911,8 +911,8 @@
 
 	/* Perform channel switch/CSA */
 	channel = dfs_get_valid_channel(iface, &secondary_channel,
-					&oper_centr_freq_seg0_idx,
-					&oper_centr_freq_seg1_idx,
+					&vht_oper_centr_freq_seg0_idx,
+					&vht_oper_centr_freq_seg1_idx,
 					skip_radar);
 
 	if (!channel) {
@@ -923,8 +923,8 @@
 		 */
 		skip_radar = 0;
 		channel = dfs_get_valid_channel(iface, &secondary_channel,
-						&oper_centr_freq_seg0_idx,
-						&oper_centr_freq_seg1_idx,
+						&vht_oper_centr_freq_seg0_idx,
+						&vht_oper_centr_freq_seg1_idx,
 						skip_radar);
 		if (!channel) {
 			wpa_printf(MSG_INFO,
@@ -936,10 +936,10 @@
 		iface->freq = channel->freq;
 		iface->conf->channel = channel->chan;
 		iface->conf->secondary_channel = secondary_channel;
-		hostapd_set_oper_centr_freq_seg0_idx(iface->conf,
-						     oper_centr_freq_seg0_idx);
-		hostapd_set_oper_centr_freq_seg1_idx(iface->conf,
-						     oper_centr_freq_seg1_idx);
+		iface->conf->vht_oper_centr_freq_seg0_idx =
+			vht_oper_centr_freq_seg0_idx;
+		iface->conf->vht_oper_centr_freq_seg1_idx =
+			vht_oper_centr_freq_seg1_idx;
 
 		hostapd_disable_iface(iface);
 		hostapd_enable_iface(iface);
@@ -962,13 +962,11 @@
 				      channel->chan,
 				      iface->conf->ieee80211n,
 				      iface->conf->ieee80211ac,
-				      iface->conf->ieee80211ax,
 				      secondary_channel,
-				      hostapd_get_oper_chwidth(iface->conf),
-				      oper_centr_freq_seg0_idx,
-				      oper_centr_freq_seg1_idx,
-				      cmode->vht_capab,
-				      &cmode->he_capab[IEEE80211_MODE_AP]);
+				      iface->conf->vht_oper_chwidth,
+				      vht_oper_centr_freq_seg0_idx,
+				      vht_oper_centr_freq_seg1_idx,
+				      iface->current_mode->vht_capab);
 
 	if (err) {
 		wpa_printf(MSG_ERROR, "DFS failed to calculate CSA freq params");
@@ -988,10 +986,10 @@
 		iface->freq = channel->freq;
 		iface->conf->channel = channel->chan;
 		iface->conf->secondary_channel = secondary_channel;
-		hostapd_set_oper_centr_freq_seg0_idx(iface->conf,
-						     oper_centr_freq_seg0_idx);
-		hostapd_set_oper_centr_freq_seg1_idx(iface->conf,
-						     oper_centr_freq_seg1_idx);
+		iface->conf->vht_oper_centr_freq_seg0_idx =
+			vht_oper_centr_freq_seg0_idx;
+		iface->conf->vht_oper_centr_freq_seg1_idx =
+			vht_oper_centr_freq_seg1_idx;
 
 		hostapd_disable_iface(iface);
 		hostapd_enable_iface(iface);
diff --git a/src/ap/dpp_hostapd.c b/src/ap/dpp_hostapd.c
index 697c3ba..75edbc9 100644
--- a/src/ap/dpp_hostapd.c
+++ b/src/ap/dpp_hostapd.c
@@ -16,7 +16,6 @@
 #include "hostapd.h"
 #include "ap_drv_ops.h"
 #include "gas_query_ap.h"
-#include "gas_serv.h"
 #include "wpa_auth.h"
 #include "dpp_hostapd.h"
 
@@ -558,14 +557,6 @@
 	 * received hash values */
 	dpp_bootstrap_find_pair(hapd->iface->interfaces->dpp, i_bootstrap,
 				r_bootstrap, &own_bi, &peer_bi);
-#ifdef CONFIG_DPP2
-	if (!own_bi) {
-		if (dpp_relay_rx_action(hapd->iface->interfaces->dpp,
-					src, hdr, buf, len, freq, i_bootstrap,
-					r_bootstrap) == 0)
-			return;
-	}
-#endif /* CONFIG_DPP2 */
 	if (!own_bi) {
 		wpa_msg(hapd->msg_ctx, MSG_INFO, DPP_EVENT_FAIL
 			"No matching own bootstrapping key found - ignore message");
@@ -1366,12 +1357,6 @@
 	wpa_msg(hapd->msg_ctx, MSG_INFO, DPP_EVENT_RX "src=" MACSTR
 		" freq=%u type=%d", MAC2STR(src), freq, type);
 
-#ifdef CONFIG_DPP2
-	if (dpp_relay_rx_action(hapd->iface->interfaces->dpp,
-				src, hdr, buf, len, freq, NULL, NULL) == 0)
-		return;
-#endif /* CONFIG_DPP2 */
-
 	switch (type) {
 	case DPP_PA_AUTHENTICATION_REQ:
 		hostapd_dpp_rx_auth_req(hapd, src, hdr, buf, len, freq);
@@ -1425,8 +1410,7 @@
 
 struct wpabuf *
 hostapd_dpp_gas_req_handler(struct hostapd_data *hapd, const u8 *sa,
-			    const u8 *query, size_t query_len,
-			    const u8 *data, size_t data_len)
+			    const u8 *query, size_t query_len)
 {
 	struct dpp_authentication *auth = hapd->dpp_auth;
 	struct wpabuf *resp;
@@ -1434,13 +1418,6 @@
 	wpa_printf(MSG_DEBUG, "DPP: GAS request from " MACSTR, MAC2STR(sa));
 	if (!auth || !auth->auth_success ||
 	    os_memcmp(sa, auth->peer_mac_addr, ETH_ALEN) != 0) {
-#ifdef CONFIG_DPP2
-		if (dpp_relay_rx_gas_req(hapd->iface->interfaces->dpp, sa, data,
-				     data_len) == 0) {
-			/* Response will be forwarded once received over TCP */
-			return NULL;
-		}
-#endif /* CONFIG_DPP2 */
 		wpa_printf(MSG_DEBUG, "DPP: No matching exchange in progress");
 		return NULL;
 	}
@@ -1632,67 +1609,11 @@
 }
 
 
-#ifdef CONFIG_DPP2
-
-static void hostapd_dpp_relay_tx(void *ctx, const u8 *addr, unsigned int freq,
-				 const u8 *msg, size_t len)
-{
-	struct hostapd_data *hapd = ctx;
-	u8 *buf;
-
-	wpa_printf(MSG_DEBUG, "DPP: Send action frame dst=" MACSTR " freq=%u",
-		   MAC2STR(addr), freq);
-	buf = os_malloc(2 + len);
-	if (!buf)
-		return;
-	buf[0] = WLAN_ACTION_PUBLIC;
-	buf[1] = WLAN_PA_VENDOR_SPECIFIC;
-	os_memcpy(buf + 2, msg, len);
-	hostapd_drv_send_action(hapd, freq, 0, addr, buf, 2 + len);
-	os_free(buf);
-}
-
-
-static void hostapd_dpp_relay_gas_resp_tx(void *ctx, const u8 *addr,
-					  u8 dialog_token, int prot,
-					  struct wpabuf *buf)
-{
-	struct hostapd_data *hapd = ctx;
-
-	gas_serv_req_dpp_processing(hapd, addr, dialog_token, prot, buf);
-}
-
-#endif /* CONFIG_DPP2 */
-
-
-static int hostapd_dpp_add_controllers(struct hostapd_data *hapd)
-{
-#ifdef CONFIG_DPP2
-	struct dpp_controller_conf *ctrl;
-	struct dpp_relay_config config;
-
-	os_memset(&config, 0, sizeof(config));
-	config.cb_ctx = hapd;
-	config.tx = hostapd_dpp_relay_tx;
-	config.gas_resp_tx = hostapd_dpp_relay_gas_resp_tx;
-	for (ctrl = hapd->conf->dpp_controller; ctrl; ctrl = ctrl->next) {
-		config.ipaddr = &ctrl->ipaddr;
-		config.pkhash = ctrl->pkhash;
-		if (dpp_relay_add_controller(hapd->iface->interfaces->dpp,
-					     &config) < 0)
-			return -1;
-	}
-#endif /* CONFIG_DPP2 */
-
-	return 0;
-}
-
-
 int hostapd_dpp_init(struct hostapd_data *hapd)
 {
 	hapd->dpp_allowed_roles = DPP_CAPAB_CONFIGURATOR | DPP_CAPAB_ENROLLEE;
 	hapd->dpp_init_done = 1;
-	return hostapd_dpp_add_controllers(hapd);
+	return 0;
 }
 
 
diff --git a/src/ap/dpp_hostapd.h b/src/ap/dpp_hostapd.h
index c1ec5d7..449ca16 100644
--- a/src/ap/dpp_hostapd.h
+++ b/src/ap/dpp_hostapd.h
@@ -19,8 +19,7 @@
 			   const u8 *data, size_t data_len, int ok);
 struct wpabuf *
 hostapd_dpp_gas_req_handler(struct hostapd_data *hapd, const u8 *sa,
-			    const u8 *query, size_t query_len,
-			    const u8 *data, size_t data_len);
+			    const u8 *query, size_t query_len);
 void hostapd_dpp_gas_status_handler(struct hostapd_data *hapd, int ok);
 int hostapd_dpp_configurator_add(struct hostapd_data *hapd, const char *cmd);
 int hostapd_dpp_configurator_remove(struct hostapd_data *hapd, const char *id);
diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c
index 3158768..952a3d5 100644
--- a/src/ap/drv_callbacks.c
+++ b/src/ap/drv_callbacks.c
@@ -772,8 +772,7 @@
 
 
 void hostapd_event_ch_switch(struct hostapd_data *hapd, int freq, int ht,
-			     int offset, int width, int cf1, int cf2,
-			     int finished)
+			     int offset, int width, int cf1, int cf2)
 {
 	/* TODO: If OCV is enabled deauth STAs that don't perform a SA Query */
 
@@ -784,8 +783,7 @@
 
 	hostapd_logger(hapd, NULL, HOSTAPD_MODULE_IEEE80211,
 		       HOSTAPD_LEVEL_INFO,
-		       "driver %s channel switch: freq=%d, ht=%d, vht_ch=0x%x, offset=%d, width=%d (%s), cf1=%d, cf2=%d",
-		       finished ? "had" : "starting",
+		       "driver had channel switch: freq=%d, ht=%d, vht_ch=0x%x, offset=%d, width=%d (%s), cf1=%d, cf2=%d",
 		       freq, ht, hapd->iconf->ch_switch_vht_config, offset,
 		       width, channel_width_to_string(width), cf1, cf2);
 
@@ -808,19 +806,19 @@
 
 	switch (width) {
 	case CHAN_WIDTH_80:
-		chwidth = CHANWIDTH_80MHZ;
+		chwidth = VHT_CHANWIDTH_80MHZ;
 		break;
 	case CHAN_WIDTH_80P80:
-		chwidth = CHANWIDTH_80P80MHZ;
+		chwidth = VHT_CHANWIDTH_80P80MHZ;
 		break;
 	case CHAN_WIDTH_160:
-		chwidth = CHANWIDTH_160MHZ;
+		chwidth = VHT_CHANWIDTH_160MHZ;
 		break;
 	case CHAN_WIDTH_20_NOHT:
 	case CHAN_WIDTH_20:
 	case CHAN_WIDTH_40:
 	default:
-		chwidth = CHANWIDTH_USE_HT;
+		chwidth = VHT_CHANWIDTH_USE_HT;
 		break;
 	}
 
@@ -853,22 +851,13 @@
 	hapd->iconf->ch_switch_vht_config = 0;
 
 	hapd->iconf->secondary_channel = offset;
-	hostapd_set_oper_chwidth(hapd->iconf, chwidth);
-	hostapd_set_oper_centr_freq_seg0_idx(hapd->iconf, seg0_idx);
-	hostapd_set_oper_centr_freq_seg1_idx(hapd->iconf, seg1_idx);
+	hapd->iconf->vht_oper_chwidth = chwidth;
+	hapd->iconf->vht_oper_centr_freq_seg0_idx = seg0_idx;
+	hapd->iconf->vht_oper_centr_freq_seg1_idx = seg1_idx;
 
 	is_dfs = ieee80211_is_dfs(freq, hapd->iface->hw_features,
 				  hapd->iface->num_hw_features);
 
-	wpa_msg(hapd->msg_ctx, MSG_INFO,
-		"%sfreq=%d ht_enabled=%d ch_offset=%d ch_width=%s cf1=%d cf2=%d dfs=%d",
-		finished ? WPA_EVENT_CHANNEL_SWITCH :
-		WPA_EVENT_CHANNEL_SWITCH_STARTED,
-		freq, ht, offset, channel_width_to_string(width),
-		cf1, cf2, is_dfs);
-	if (!finished)
-		return;
-
 	if (hapd->csa_in_progress &&
 	    freq == hapd->cs_freq_params.freq) {
 		hostapd_cleanup_cs_params(hapd);
@@ -960,31 +949,28 @@
 		goto out;
 	}
 
-	if (hapd->iface->conf->ieee80211ac || hapd->iface->conf->ieee80211ax) {
+	if (hapd->iface->conf->ieee80211ac) {
 		/* set defaults for backwards compatibility */
-		hostapd_set_oper_centr_freq_seg1_idx(hapd->iconf, 0);
-		hostapd_set_oper_centr_freq_seg0_idx(hapd->iconf, 0);
-		hostapd_set_oper_chwidth(hapd->iconf, CHANWIDTH_USE_HT);
+		hapd->iconf->vht_oper_centr_freq_seg1_idx = 0;
+		hapd->iconf->vht_oper_centr_freq_seg0_idx = 0;
+		hapd->iconf->vht_oper_chwidth = VHT_CHANWIDTH_USE_HT;
 		if (acs_res->ch_width == 80) {
-			hostapd_set_oper_centr_freq_seg0_idx(
-				hapd->iconf, acs_res->vht_seg0_center_ch);
-			hostapd_set_oper_chwidth(hapd->iconf, CHANWIDTH_80MHZ);
+			hapd->iconf->vht_oper_centr_freq_seg0_idx =
+				acs_res->vht_seg0_center_ch;
+			hapd->iconf->vht_oper_chwidth = VHT_CHANWIDTH_80MHZ;
 		} else if (acs_res->ch_width == 160) {
 			if (acs_res->vht_seg1_center_ch == 0) {
-				hostapd_set_oper_centr_freq_seg0_idx(
-					hapd->iconf,
-					acs_res->vht_seg0_center_ch);
-				hostapd_set_oper_chwidth(hapd->iconf,
-							 CHANWIDTH_160MHZ);
+				hapd->iconf->vht_oper_centr_freq_seg0_idx =
+					acs_res->vht_seg0_center_ch;
+				hapd->iconf->vht_oper_chwidth =
+					VHT_CHANWIDTH_160MHZ;
 			} else {
-				hostapd_set_oper_centr_freq_seg0_idx(
-					hapd->iconf,
-					acs_res->vht_seg0_center_ch);
-				hostapd_set_oper_centr_freq_seg1_idx(
-					hapd->iconf,
-					acs_res->vht_seg1_center_ch);
-				hostapd_set_oper_chwidth(hapd->iconf,
-							 CHANWIDTH_80P80MHZ);
+				hapd->iconf->vht_oper_centr_freq_seg0_idx =
+					acs_res->vht_seg0_center_ch;
+				hapd->iconf->vht_oper_centr_freq_seg1_idx =
+					acs_res->vht_seg1_center_ch;
+				hapd->iconf->vht_oper_chwidth =
+					VHT_CHANWIDTH_80P80MHZ;
 			}
 		}
 	}
@@ -1589,73 +1575,6 @@
 }
 
 
-#ifdef CONFIG_OWE
-static int hostapd_notif_update_dh_ie(struct hostapd_data *hapd,
-				      const u8 *peer, const u8 *ie,
-				      size_t ie_len)
-{
-	u16 status;
-	struct sta_info *sta;
-	struct ieee802_11_elems elems;
-
-	if (!hapd || !hapd->wpa_auth) {
-		wpa_printf(MSG_DEBUG, "OWE: Invalid hapd context");
-		return -1;
-	}
-	if (!peer) {
-		wpa_printf(MSG_DEBUG, "OWE: Peer unknown");
-		return -1;
-	}
-	if (!(hapd->conf->wpa_key_mgmt & WPA_KEY_MGMT_OWE)) {
-		wpa_printf(MSG_DEBUG, "OWE: No OWE AKM configured");
-		status = WLAN_STATUS_AKMP_NOT_VALID;
-		goto err;
-	}
-	if (ieee802_11_parse_elems(ie, ie_len, &elems, 1) == ParseFailed) {
-		wpa_printf(MSG_DEBUG, "OWE: Failed to parse OWE IE for "
-			   MACSTR, MAC2STR(peer));
-		status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-		goto err;
-	}
-	status = owe_validate_request(hapd, peer, elems.rsn_ie,
-				      elems.rsn_ie_len,
-				      elems.owe_dh, elems.owe_dh_len);
-	if (status != WLAN_STATUS_SUCCESS)
-		goto err;
-
-	sta = ap_get_sta(hapd, peer);
-	if (sta) {
-		ap_sta_no_session_timeout(hapd, sta);
-		accounting_sta_stop(hapd, sta);
-
-		/*
-		 * Make sure that the previously registered inactivity timer
-		 * will not remove the STA immediately.
-		 */
-		sta->timeout_next = STA_NULLFUNC;
-	} else {
-		sta = ap_sta_add(hapd, peer);
-		if (!sta) {
-			status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-			goto err;
-		}
-	}
-	sta->flags &= ~(WLAN_STA_WPS | WLAN_STA_MAYBE_WPS | WLAN_STA_WPS2);
-
-	status = owe_process_rsn_ie(hapd, sta, elems.rsn_ie,
-				    elems.rsn_ie_len, elems.owe_dh,
-				    elems.owe_dh_len);
-	if (status != WLAN_STATUS_SUCCESS)
-		ap_free_sta(hapd, sta);
-
-	return 0;
-err:
-	hostapd_drv_update_dh_ie(hapd, peer, status, NULL, 0);
-	return 0;
-}
-#endif /* CONFIG_OWE */
-
-
 void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
 			  union wpa_event_data *data)
 {
@@ -1761,15 +1680,6 @@
 				    data->assoc_info.req_ies_len,
 				    data->assoc_info.reassoc);
 		break;
-#ifdef CONFIG_OWE
-	case EVENT_UPDATE_DH:
-		if (!data)
-			return;
-		hostapd_notif_update_dh_ie(hapd, data->update_dh.peer,
-					   data->update_dh.ie,
-					   data->update_dh.ie_len);
-		break;
-#endif /* CONFIG_OWE */
 	case EVENT_DISASSOC:
 		if (data)
 			hostapd_notif_disassoc(hapd, data->disassoc_info.addr);
@@ -1786,7 +1696,6 @@
 	case EVENT_AUTH:
 		hostapd_notif_auth(hapd, &data->auth);
 		break;
-	case EVENT_CH_SWITCH_STARTED:
 	case EVENT_CH_SWITCH:
 		if (!data)
 			break;
@@ -1795,8 +1704,7 @@
 					data->ch_switch.ch_offset,
 					data->ch_switch.ch_width,
 					data->ch_switch.cf1,
-					data->ch_switch.cf2,
-					event == EVENT_CH_SWITCH);
+					data->ch_switch.cf2);
 		break;
 	case EVENT_CONNECT_FAILED_REASON:
 		if (!data)
diff --git a/src/ap/gas_serv.c b/src/ap/gas_serv.c
index 9567e20..a7df810 100644
--- a/src/ap/gas_serv.c
+++ b/src/ap/gas_serv.c
@@ -1522,9 +1522,9 @@
 
 
 #ifdef CONFIG_DPP
-void gas_serv_req_dpp_processing(struct hostapd_data *hapd,
-				 const u8 *sa, u8 dialog_token,
-				 int prot, struct wpabuf *buf)
+static void gas_serv_req_dpp_processing(struct hostapd_data *hapd,
+					const u8 *sa, u8 dialog_token,
+					int prot, struct wpabuf *buf)
 {
 	struct wpabuf *tx_buf;
 
@@ -1681,8 +1681,7 @@
 	if (dpp) {
 		struct wpabuf *msg;
 
-		msg = hostapd_dpp_gas_req_handler(hapd, sa, pos, slen,
-						  data, len);
+		msg = hostapd_dpp_gas_req_handler(hapd, sa, pos, slen);
 		if (!msg)
 			return;
 		gas_serv_req_dpp_processing(hapd, sa, dialog_token, prot, msg);
diff --git a/src/ap/gas_serv.h b/src/ap/gas_serv.h
index 1528af4..2cf1817 100644
--- a/src/ap/gas_serv.h
+++ b/src/ap/gas_serv.h
@@ -88,8 +88,4 @@
 int gas_serv_init(struct hostapd_data *hapd);
 void gas_serv_deinit(struct hostapd_data *hapd);
 
-void gas_serv_req_dpp_processing(struct hostapd_data *hapd,
-				 const u8 *sa, u8 dialog_token,
-				 int prot, struct wpabuf *buf);
-
 #endif /* GAS_SERV_H */
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index cc75a77..0bd6892 100644
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -50,8 +50,6 @@
 #include "fils_hlp.h"
 #include "acs.h"
 #include "hs20.h"
-#include "airtime_policy.h"
-#include "wpa_auth_kay.h"
 
 
 static int hostapd_flush_old_stations(struct hostapd_data *hapd, u16 reason);
@@ -262,14 +260,11 @@
 		hapd->iconf->ieee80211ac = oldconf->ieee80211ac;
 		hapd->iconf->ht_capab = oldconf->ht_capab;
 		hapd->iconf->vht_capab = oldconf->vht_capab;
-		hostapd_set_oper_chwidth(hapd->iconf,
-					 hostapd_get_oper_chwidth(oldconf));
-		hostapd_set_oper_centr_freq_seg0_idx(
-			hapd->iconf,
-			hostapd_get_oper_centr_freq_seg0_idx(oldconf));
-		hostapd_set_oper_centr_freq_seg1_idx(
-			hapd->iconf,
-			hostapd_get_oper_centr_freq_seg1_idx(oldconf));
+		hapd->iconf->vht_oper_chwidth = oldconf->vht_oper_chwidth;
+		hapd->iconf->vht_oper_centr_freq_seg0_idx =
+			oldconf->vht_oper_centr_freq_seg0_idx;
+		hapd->iconf->vht_oper_centr_freq_seg1_idx =
+			oldconf->vht_oper_centr_freq_seg1_idx;
 		hapd->conf = newconf->bss[j];
 		hostapd_reload_bss(hapd);
 	}
@@ -374,7 +369,6 @@
 #endif /* CONFIG_NO_RADIUS */
 
 	hostapd_deinit_wps(hapd);
-	ieee802_1x_dealloc_kay_sm_hapd(hapd);
 #ifdef CONFIG_DPP
 	hostapd_dpp_deinit(hapd);
 	gas_query_ap_deinit(hapd->gas);
@@ -497,7 +491,6 @@
 	iface->basic_rates = NULL;
 	ap_list_deinit(iface);
 	sta_track_deinit(iface);
-	airtime_policy_update_deinit(iface);
 }
 
 
@@ -1870,13 +1863,10 @@
 				     hapd->iconf->channel,
 				     hapd->iconf->ieee80211n,
 				     hapd->iconf->ieee80211ac,
-				     hapd->iconf->ieee80211ax,
 				     hapd->iconf->secondary_channel,
-				     hostapd_get_oper_chwidth(hapd->iconf),
-				     hostapd_get_oper_centr_freq_seg0_idx(
-					     hapd->iconf),
-				     hostapd_get_oper_centr_freq_seg1_idx(
-					     hapd->iconf))) {
+				     hapd->iconf->vht_oper_chwidth,
+				     hapd->iconf->vht_oper_centr_freq_seg0_idx,
+				     hapd->iconf->vht_oper_centr_freq_seg1_idx)) {
 			wpa_printf(MSG_ERROR, "Could not set channel for "
 				   "kernel driver");
 			goto fail;
@@ -1986,7 +1976,6 @@
 
 	hostapd_set_state(iface, HAPD_IFACE_ENABLED);
 	hostapd_owe_update_trans(iface);
-	airtime_policy_update_init(iface);
 	wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, AP_EVENT_ENABLED);
 	if (hapd->setup_complete_cb)
 		hapd->setup_complete_cb(hapd->setup_complete_cb_ctx);
@@ -3007,8 +2996,6 @@
 	}
 #endif /* CONFIG_P2P */
 
-	airtime_policy_new_sta(hapd, sta);
-
 	/* Start accounting here, if IEEE 802.1X and WPA are not used.
 	 * IEEE 802.1X/WPA code will start accounting after the station has
 	 * been authorized. */
@@ -3049,14 +3036,6 @@
 		eloop_register_timeout(hapd->conf->ap_max_inactivity, 0,
 				       ap_handle_timer, hapd, sta);
 	}
-
-#ifdef CONFIG_MACSEC
-	if (hapd->conf->wpa_key_mgmt == WPA_KEY_MGMT_NONE &&
-	    hapd->conf->mka_psk_set)
-		ieee802_1x_create_preshared_mka_hapd(hapd, sta);
-	else
-		ieee802_1x_alloc_kay_sm_hapd(hapd, sta);
-#endif /* CONFIG_MACSEC */
 }
 
 
@@ -3216,8 +3195,6 @@
 				      struct hostapd_freq_params *old_params)
 {
 	int channel;
-	u8 seg0, seg1;
-	struct hostapd_hw_modes *mode;
 
 	if (!params->channel) {
 		/* check if the new channel is supported by hw */
@@ -3228,37 +3205,33 @@
 	if (!channel)
 		return -1;
 
-	mode = hapd->iface->current_mode;
-
 	/* if a pointer to old_params is provided we save previous state */
 	if (old_params &&
 	    hostapd_set_freq_params(old_params, conf->hw_mode,
 				    hostapd_hw_get_freq(hapd, conf->channel),
 				    conf->channel, conf->ieee80211n,
-				    conf->ieee80211ac, conf->ieee80211ax,
+				    conf->ieee80211ac,
 				    conf->secondary_channel,
-				    hostapd_get_oper_chwidth(conf),
-				    hostapd_get_oper_centr_freq_seg0_idx(conf),
-				    hostapd_get_oper_centr_freq_seg1_idx(conf),
-				    conf->vht_capab,
-				    mode ? &mode->he_capab[IEEE80211_MODE_AP] :
-				    NULL))
+				    conf->vht_oper_chwidth,
+				    conf->vht_oper_centr_freq_seg0_idx,
+				    conf->vht_oper_centr_freq_seg1_idx,
+				    conf->vht_capab))
 		return -1;
 
 	switch (params->bandwidth) {
 	case 0:
 	case 20:
 	case 40:
-		hostapd_set_oper_chwidth(conf, CHANWIDTH_USE_HT);
+		conf->vht_oper_chwidth = VHT_CHANWIDTH_USE_HT;
 		break;
 	case 80:
 		if (params->center_freq2)
-			hostapd_set_oper_chwidth(conf, CHANWIDTH_80P80MHZ);
+			conf->vht_oper_chwidth = VHT_CHANWIDTH_80P80MHZ;
 		else
-			hostapd_set_oper_chwidth(conf, CHANWIDTH_80MHZ);
+			conf->vht_oper_chwidth = VHT_CHANWIDTH_80MHZ;
 		break;
 	case 160:
-		hostapd_set_oper_chwidth(conf, CHANWIDTH_160MHZ);
+		conf->vht_oper_chwidth = VHT_CHANWIDTH_160MHZ;
 		break;
 	default:
 		return -1;
@@ -3268,11 +3241,9 @@
 	conf->ieee80211n = params->ht_enabled;
 	conf->secondary_channel = params->sec_channel_offset;
 	ieee80211_freq_to_chan(params->center_freq1,
-			       &seg0);
+			       &conf->vht_oper_centr_freq_seg0_idx);
 	ieee80211_freq_to_chan(params->center_freq2,
-			       &seg1);
-	hostapd_set_oper_centr_freq_seg0_idx(conf, seg0);
-	hostapd_set_oper_centr_freq_seg1_idx(conf, seg1);
+			       &conf->vht_oper_centr_freq_seg1_idx);
 
 	/* TODO: maybe call here hostapd_config_check here? */
 
@@ -3286,7 +3257,7 @@
 	struct hostapd_iface *iface = hapd->iface;
 	struct hostapd_freq_params old_freq;
 	int ret;
-	u8 chan, bandwidth;
+	u8 chan, vht_bandwidth;
 
 	os_memset(&old_freq, 0, sizeof(old_freq));
 	if (!iface || !iface->freq || hapd->csa_in_progress)
@@ -3295,30 +3266,29 @@
 	switch (settings->freq_params.bandwidth) {
 	case 80:
 		if (settings->freq_params.center_freq2)
-			bandwidth = CHANWIDTH_80P80MHZ;
+			vht_bandwidth = VHT_CHANWIDTH_80P80MHZ;
 		else
-			bandwidth = CHANWIDTH_80MHZ;
+			vht_bandwidth = VHT_CHANWIDTH_80MHZ;
 		break;
 	case 160:
-		bandwidth = CHANWIDTH_160MHZ;
+		vht_bandwidth = VHT_CHANWIDTH_160MHZ;
 		break;
 	default:
-		bandwidth = CHANWIDTH_USE_HT;
+		vht_bandwidth = VHT_CHANWIDTH_USE_HT;
 		break;
 	}
 
 	if (ieee80211_freq_to_channel_ext(
 		    settings->freq_params.freq,
 		    settings->freq_params.sec_channel_offset,
-		    bandwidth,
+		    vht_bandwidth,
 		    &hapd->iface->cs_oper_class,
 		    &chan) == NUM_HOSTAPD_MODES) {
 		wpa_printf(MSG_DEBUG,
-			   "invalid frequency for channel switch (freq=%d, sec_channel_offset=%d, vht_enabled=%d, he_enabled=%d)",
+			   "invalid frequency for channel switch (freq=%d, sec_channel_offset=%d, vht_enabled=%d)",
 			   settings->freq_params.freq,
 			   settings->freq_params.sec_channel_offset,
-			   settings->freq_params.vht_enabled,
-			   settings->freq_params.he_enabled);
+			   settings->freq_params.vht_enabled);
 		return -1;
 	}
 
@@ -3418,29 +3388,29 @@
 hostapd_switch_channel_fallback(struct hostapd_iface *iface,
 				const struct hostapd_freq_params *freq_params)
 {
-	int seg0_idx = 0, seg1_idx = 0, bw = CHANWIDTH_USE_HT;
+	int vht_seg0_idx = 0, vht_seg1_idx = 0, vht_bw = VHT_CHANWIDTH_USE_HT;
 
 	wpa_printf(MSG_DEBUG, "Restarting all CSA-related BSSes");
 
 	if (freq_params->center_freq1)
-		seg0_idx = 36 + (freq_params->center_freq1 - 5180) / 5;
+		vht_seg0_idx = 36 + (freq_params->center_freq1 - 5180) / 5;
 	if (freq_params->center_freq2)
-		seg1_idx = 36 + (freq_params->center_freq2 - 5180) / 5;
+		vht_seg1_idx = 36 + (freq_params->center_freq2 - 5180) / 5;
 
 	switch (freq_params->bandwidth) {
 	case 0:
 	case 20:
 	case 40:
-		bw = CHANWIDTH_USE_HT;
+		vht_bw = VHT_CHANWIDTH_USE_HT;
 		break;
 	case 80:
 		if (freq_params->center_freq2)
-			bw = CHANWIDTH_80P80MHZ;
+			vht_bw = VHT_CHANWIDTH_80P80MHZ;
 		else
-			bw = CHANWIDTH_80MHZ;
+			vht_bw = VHT_CHANWIDTH_80MHZ;
 		break;
 	case 160:
-		bw = CHANWIDTH_160MHZ;
+		vht_bw = VHT_CHANWIDTH_160MHZ;
 		break;
 	default:
 		wpa_printf(MSG_WARNING, "Unknown CSA bandwidth: %d",
@@ -3451,12 +3421,11 @@
 	iface->freq = freq_params->freq;
 	iface->conf->channel = freq_params->channel;
 	iface->conf->secondary_channel = freq_params->sec_channel_offset;
-	hostapd_set_oper_centr_freq_seg0_idx(iface->conf, seg0_idx);
-	hostapd_set_oper_centr_freq_seg1_idx(iface->conf, seg1_idx);
-	hostapd_set_oper_chwidth(iface->conf, bw);
+	iface->conf->vht_oper_centr_freq_seg0_idx = vht_seg0_idx;
+	iface->conf->vht_oper_centr_freq_seg1_idx = vht_seg1_idx;
+	iface->conf->vht_oper_chwidth = vht_bw;
 	iface->conf->ieee80211n = freq_params->ht_enabled;
 	iface->conf->ieee80211ac = freq_params->vht_enabled;
-	iface->conf->ieee80211ax = freq_params->he_enabled;
 
 	/*
 	 * cs_params must not be cleared earlier because the freq_params
diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h
index 44ef753..607bb95 100644
--- a/src/ap/hostapd.h
+++ b/src/ap/hostapd.h
@@ -232,10 +232,6 @@
 	struct wps_stat wps_stats;
 #endif /* CONFIG_WPS */
 
-#ifdef CONFIG_MACSEC
-	struct ieee802_1x_kay *kay;
-#endif /* CONFIG_MACSEC */
-
 	struct hostapd_probereq_cb *probereq_cb;
 	size_t num_probereq_cb;
 
@@ -383,13 +379,6 @@
 	unsigned int dpp_ignore_netaccesskey_mismatch:1;
 #endif /* CONFIG_TESTING_OPTIONS */
 #endif /* CONFIG_DPP */
-
-#ifdef CONFIG_AIRTIME_POLICY
-	unsigned int num_backlogged_sta;
-	unsigned int airtime_weight;
-#endif /* CONFIG_AIRTIME_POLICY */
-
-	u8 last_1x_eapol_key_replay_counter[8];
 };
 
 
@@ -553,12 +542,6 @@
 	unsigned int num_sta_seen;
 
 	u8 dfs_domain;
-#ifdef CONFIG_AIRTIME_POLICY
-	unsigned int airtime_quantum;
-#endif /* CONFIG_AIRTIME_POLICY */
-
-	/* Previous WMM element information */
-	struct hostapd_wmm_ac_params prev_wmm[WMM_AC_NUM];
 };
 
 /* hostapd.c */
@@ -625,8 +608,7 @@
 			 const u8 *bssid, const u8 *ie, size_t ie_len,
 			 int ssi_signal);
 void hostapd_event_ch_switch(struct hostapd_data *hapd, int freq, int ht,
-			     int offset, int width, int cf1, int cf2,
-			     int finished);
+			     int offset, int width, int cf1, int cf2);
 struct survey_results;
 void hostapd_event_get_survey(struct hostapd_iface *iface,
 			      struct survey_results *survey_results);
diff --git a/src/ap/hw_features.c b/src/ap/hw_features.c
index c1f19e2..8ac33bb 100644
--- a/src/ap/hw_features.c
+++ b/src/ap/hw_features.c
@@ -329,9 +329,9 @@
 	res = ieee80211n_allowed_ht40_channel_pair(iface);
 	if (!res) {
 		iface->conf->secondary_channel = 0;
-		hostapd_set_oper_centr_freq_seg0_idx(iface->conf, 0);
-		hostapd_set_oper_centr_freq_seg1_idx(iface->conf, 0);
-		hostapd_set_oper_chwidth(iface->conf, CHANWIDTH_USE_HT);
+		iface->conf->vht_oper_centr_freq_seg0_idx = 0;
+		iface->conf->vht_oper_centr_freq_seg1_idx = 0;
+		iface->conf->vht_oper_chwidth = VHT_CHANWIDTH_USE_HT;
 		res = 1;
 		wpa_printf(MSG_INFO, "Fallback to 20 MHz");
 	}
@@ -655,14 +655,6 @@
 }
 #endif /* CONFIG_IEEE80211AC */
 
-
-#ifdef CONFIG_IEEE80211AX
-static int ieee80211ax_supported_he_capab(struct hostapd_iface *iface)
-{
-	return 1;
-}
-#endif /* CONFIG_IEEE80211AX */
-
 #endif /* CONFIG_IEEE80211N */
 
 
@@ -683,11 +675,6 @@
 
 	if (!ieee80211n_supported_ht_capab(iface))
 		return -1;
-#ifdef CONFIG_IEEE80211AX
-	if (iface->conf->ieee80211ax &&
-	    !ieee80211ax_supported_he_capab(iface))
-		return -1;
-#endif /* CONFIG_IEEE80211AX */
 #ifdef CONFIG_IEEE80211AC
 	if (iface->conf->ieee80211ac &&
 	    !ieee80211ac_supported_vht_capab(iface))
@@ -876,14 +863,12 @@
 		return -1;
 
 	if ((iface->conf->hw_mode == HOSTAPD_MODE_IEEE80211G ||
-	     iface->conf->ieee80211n || iface->conf->ieee80211ac ||
-	     iface->conf->ieee80211ax) &&
+	     iface->conf->ieee80211n || iface->conf->ieee80211ac) &&
 	    iface->conf->channel == 14) {
-		wpa_printf(MSG_INFO, "Disable OFDM/HT/VHT/HE on channel 14");
+		wpa_printf(MSG_INFO, "Disable OFDM/HT/VHT on channel 14");
 		iface->conf->hw_mode = HOSTAPD_MODE_IEEE80211B;
 		iface->conf->ieee80211n = 0;
 		iface->conf->ieee80211ac = 0;
-		iface->conf->ieee80211ax = 0;
 	}
 
 	iface->current_mode = NULL;
diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
index fff35b7..5cd2562 100644
--- a/src/ap/ieee802_11.c
+++ b/src/ap/ieee802_11.c
@@ -23,7 +23,6 @@
 #include "common/sae.h"
 #include "common/dpp.h"
 #include "common/ocv.h"
-#include "common/wpa_common.h"
 #include "radius/radius.h"
 #include "radius/radius_client.h"
 #include "p2p/p2p.h"
@@ -710,8 +709,7 @@
 	os_memset(&params, 0, sizeof(params));
 	params.status = status;
 	params.bssid = sta->addr;
-	if (status == WLAN_STATUS_SUCCESS && sta->sae &&
-	    !hapd->conf->disable_pmksa_caching)
+	if (status == WLAN_STATUS_SUCCESS && sta->sae)
 		params.pmkid = sta->sae->pmkid;
 
 	hostapd_drv_send_external_auth_status(hapd, &params);
@@ -1040,8 +1038,8 @@
 
 		hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,
 			       HOSTAPD_LEVEL_DEBUG,
-			       "start SAE authentication (RX commit, status=%u (%s))",
-			       status_code, status2str(status_code));
+			       "start SAE authentication (RX commit, status=%u)",
+			       status_code);
 
 		if ((hapd->conf->mesh & MESH_ENABLED) &&
 		    status_code == WLAN_STATUS_ANTI_CLOGGING_TOKEN_REQ &&
@@ -1184,8 +1182,8 @@
 	} else if (auth_transaction == 2) {
 		hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,
 			       HOSTAPD_LEVEL_DEBUG,
-			       "SAE authentication (RX confirm, status=%u (%s))",
-			       status_code, status2str(status_code));
+			       "SAE authentication (RX confirm, status=%u)",
+			       status_code);
 		if (status_code != WLAN_STATUS_SUCCESS)
 			goto remove_sta;
 		if (sta->sae->state >= SAE_CONFIRMED ||
@@ -1226,9 +1224,8 @@
 	} else {
 		hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,
 			       HOSTAPD_LEVEL_DEBUG,
-			       "unexpected SAE authentication transaction %u (status=%u (%s))",
-			       auth_transaction, status_code,
-			       status2str(status_code));
+			       "unexpected SAE authentication transaction %u (status=%u)",
+			       auth_transaction, status_code);
 		if (status_code != WLAN_STATUS_SUCCESS)
 			goto remove_sta;
 		resp = WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION;
@@ -1824,8 +1821,6 @@
 			}
 
 			sta->fils_erp_pmkid_set = 0;
-			wpa_auth_add_fils_pmk_pmkid(sta->wpa_sm, pmk, pmk_len,
-						    sta->fils_erp_pmkid);
 			if (!hapd->conf->disable_pmksa_caching &&
 			    wpa_auth_pmksa_add2(
 				    hapd->wpa_auth, sta->addr,
@@ -2326,11 +2321,8 @@
 		sta->flags &= ~(WLAN_STA_ASSOC | WLAN_STA_AUTH |
 				WLAN_STA_AUTHORIZED);
 
-		if (hostapd_sta_add(hapd, sta->addr, 0, 0,
-				    sta->supported_rates,
-				    sta->supported_rates_len,
-				    0, NULL, NULL, NULL, 0,
-				    sta->flags, 0, 0, 0, 0)) {
+		if (hostapd_sta_add(hapd, sta->addr, 0, 0, NULL, 0, 0,
+				    NULL, NULL, sta->flags, 0, 0, 0, 0)) {
 			hostapd_logger(hapd, sta->addr,
 				       HOSTAPD_MODULE_IEEE80211,
 				       HOSTAPD_LEVEL_NOTICE,
@@ -2796,123 +2788,6 @@
 	return WLAN_STATUS_SUCCESS;
 }
 
-
-u16 owe_validate_request(struct hostapd_data *hapd, const u8 *peer,
-			 const u8 *rsn_ie, size_t rsn_ie_len,
-			 const u8 *owe_dh, size_t owe_dh_len)
-{
-	struct wpa_ie_data data;
-	int res;
-
-	if (!rsn_ie || rsn_ie_len < 2) {
-		wpa_printf(MSG_DEBUG, "OWE: Invalid RSNE from " MACSTR,
-			   MAC2STR(peer));
-		return WLAN_STATUS_INVALID_IE;
-	}
-	rsn_ie -= 2;
-	rsn_ie_len += 2;
-
-	res = wpa_parse_wpa_ie_rsn(rsn_ie, rsn_ie_len, &data);
-	if (res) {
-		wpa_printf(MSG_DEBUG, "Failed to parse RSNE from " MACSTR
-			   " (res=%d)", MAC2STR(peer), res);
-		wpa_hexdump(MSG_DEBUG, "RSNE", rsn_ie, rsn_ie_len);
-		return wpa_res_to_status_code(res);
-	}
-	if (!(data.key_mgmt & WPA_KEY_MGMT_OWE)) {
-		wpa_printf(MSG_DEBUG,
-			   "OWE: Unexpected key mgmt 0x%x from " MACSTR,
-			   (unsigned int) data.key_mgmt, MAC2STR(peer));
-		return WLAN_STATUS_AKMP_NOT_VALID;
-	}
-	if (!owe_dh) {
-		wpa_printf(MSG_DEBUG,
-			   "OWE: No Diffie-Hellman Parameter element from "
-			   MACSTR, MAC2STR(peer));
-		return WLAN_STATUS_AKMP_NOT_VALID;
-	}
-
-	return WLAN_STATUS_SUCCESS;
-}
-
-
-u16 owe_process_rsn_ie(struct hostapd_data *hapd,
-		       struct sta_info *sta,
-		       const u8 *rsn_ie, size_t rsn_ie_len,
-		       const u8 *owe_dh, size_t owe_dh_len)
-{
-	u16 status;
-	u8 *owe_buf, ie[256 * 2];
-	size_t ie_len = 0;
-	int res;
-
-	if (!rsn_ie || rsn_ie_len < 2) {
-		wpa_printf(MSG_DEBUG, "OWE: No RSNE in (Re)AssocReq");
-		status = WLAN_STATUS_INVALID_IE;
-		goto end;
-	}
-
-	if (!sta->wpa_sm)
-		sta->wpa_sm = wpa_auth_sta_init(hapd->wpa_auth,	sta->addr,
-						NULL);
-	if (!sta->wpa_sm) {
-		wpa_printf(MSG_WARNING,
-			   "OWE: Failed to initialize WPA state machine");
-		status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-		goto end;
-	}
-	rsn_ie -= 2;
-	rsn_ie_len += 2;
-	res = wpa_validate_wpa_ie(hapd->wpa_auth, sta->wpa_sm,
-				  hapd->iface->freq, rsn_ie, rsn_ie_len,
-				  NULL, 0, owe_dh, owe_dh_len);
-	status = wpa_res_to_status_code(res);
-	if (status != WLAN_STATUS_SUCCESS)
-		goto end;
-	status = owe_process_assoc_req(hapd, sta, owe_dh, owe_dh_len);
-	if (status != WLAN_STATUS_SUCCESS)
-		goto end;
-	owe_buf = wpa_auth_write_assoc_resp_owe(sta->wpa_sm, ie, sizeof(ie),
-						NULL, 0);
-	if (!owe_buf) {
-		status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-		goto end;
-	}
-
-	if (sta->owe_ecdh) {
-		struct wpabuf *pub;
-
-		pub = crypto_ecdh_get_pubkey(sta->owe_ecdh, 0);
-		if (!pub) {
-			status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-			goto end;
-		}
-
-		/* OWE Diffie-Hellman Parameter element */
-		*owe_buf++ = WLAN_EID_EXTENSION; /* Element ID */
-		*owe_buf++ = 1 + 2 + wpabuf_len(pub); /* Length */
-		*owe_buf++ = WLAN_EID_EXT_OWE_DH_PARAM; /* Element ID Extension
-							 */
-		WPA_PUT_LE16(owe_buf, sta->owe_group);
-		owe_buf += 2;
-		os_memcpy(owe_buf, wpabuf_head(pub), wpabuf_len(pub));
-		owe_buf += wpabuf_len(pub);
-		wpabuf_free(pub);
-		sta->external_dh_updated = 1;
-	}
-	ie_len = owe_buf - ie;
-
-end:
-	wpa_printf(MSG_DEBUG, "OWE: Update status %d, ie len %d for peer "
-			      MACSTR, status, (unsigned int) ie_len,
-			      MAC2STR(sta->addr));
-	hostapd_drv_update_dh_ie(hapd, sta->addr, status,
-				 status == WLAN_STATUS_SUCCESS ? ie : NULL,
-				 ie_len);
-
-	return status;
-}
-
 #endif /* CONFIG_OWE */
 
 
@@ -2968,6 +2843,10 @@
 		if (resp != WLAN_STATUS_SUCCESS)
 			return resp;
 
+		resp = copy_sta_vht_oper(hapd, sta, elems.vht_operation);
+		if (resp != WLAN_STATUS_SUCCESS)
+			return resp;
+
 		resp = set_sta_vht_opmode(hapd, sta, elems.vht_opmode_notif);
 		if (resp != WLAN_STATUS_SUCCESS)
 			return resp;
@@ -2988,15 +2867,6 @@
 			return resp;
 	}
 #endif /* CONFIG_IEEE80211AC */
-#ifdef CONFIG_IEEE80211AX
-	if (hapd->iconf->ieee80211ax) {
-		resp = copy_sta_he_capab(hapd, sta, IEEE80211_MODE_AP,
-					 elems.he_capabilities,
-					 elems.he_capabilities_len);
-		if (resp != WLAN_STATUS_SUCCESS)
-			return resp;
-	}
-#endif /* CONFIG_IEEE80211AX */
 
 #ifdef CONFIG_P2P
 	if (elems.p2p) {
@@ -3359,7 +3229,6 @@
 {
 	struct ieee80211_ht_capabilities ht_cap;
 	struct ieee80211_vht_capabilities vht_cap;
-	struct ieee80211_he_capabilities he_cap;
 	int set = 1;
 
 	/*
@@ -3412,12 +3281,6 @@
 	if (sta->flags & WLAN_STA_VHT)
 		hostapd_get_vht_capab(hapd, sta->vht_capabilities, &vht_cap);
 #endif /* CONFIG_IEEE80211AC */
-#ifdef CONFIG_IEEE80211AX
-	if (sta->flags & WLAN_STA_HE) {
-		hostapd_get_he_capab(hapd, sta->he_capab, &he_cap,
-				     sta->he_capab_len);
-	}
-#endif /* CONFIG_IEEE80211AX */
 
 	/*
 	 * Add the station with forced WLAN_STA_ASSOC flag. The sta->flags
@@ -3429,8 +3292,6 @@
 			    sta->listen_interval,
 			    sta->flags & WLAN_STA_HT ? &ht_cap : NULL,
 			    sta->flags & WLAN_STA_VHT ? &vht_cap : NULL,
-			    sta->flags & WLAN_STA_HE ? &he_cap : NULL,
-			    sta->flags & WLAN_STA_HE ? sta->he_capab_len : 0,
 			    sta->flags | WLAN_STA_ASSOC, sta->qosinfo,
 			    sta->vht_opmode, sta->p2p_ie ? 1 : 0,
 			    set)) {
@@ -3468,8 +3329,6 @@
 #ifdef CONFIG_FILS
 	if (sta && sta->fils_hlp_resp)
 		buflen += wpabuf_len(sta->fils_hlp_resp);
-	if (sta)
-		buflen += 150;
 #endif /* CONFIG_FILS */
 #ifdef CONFIG_OWE
 	if (sta && (hapd->conf->wpa_key_mgmt & WPA_KEY_MGMT_OWE))
@@ -3531,15 +3390,6 @@
 		}
 	}
 #endif /* CONFIG_IEEE80211R_AP */
-#ifdef CONFIG_FILS
-	if (sta && status_code == WLAN_STATUS_SUCCESS &&
-	    (sta->auth_alg == WLAN_AUTH_FILS_SK ||
-	     sta->auth_alg == WLAN_AUTH_FILS_SK_PFS ||
-	     sta->auth_alg == WLAN_AUTH_FILS_PK))
-		p = wpa_auth_write_assoc_resp_fils(sta->wpa_sm, p,
-						   buf + buflen - p,
-						   ies, ies_len);
-#endif /* CONFIG_FILS */
 
 #ifdef CONFIG_OWE
 	if (sta && status_code == WLAN_STATUS_SUCCESS &&
@@ -3582,15 +3432,6 @@
 	}
 #endif /* CONFIG_IEEE80211AC */
 
-#ifdef CONFIG_IEEE80211AX
-	if (hapd->iconf->ieee80211ax) {
-		p = hostapd_eid_he_capab(hapd, p, IEEE80211_MODE_AP);
-		p = hostapd_eid_he_operation(hapd, p);
-		p = hostapd_eid_spatial_reuse(hapd, p);
-		p = hostapd_eid_he_mu_edca_parameter_set(hapd, p);
-	}
-#endif /* CONFIG_IEEE80211AX */
-
 	p = hostapd_eid_ext_capab(hapd, p);
 	p = hostapd_eid_bss_max_idle_period(hapd, p);
 	if (sta && sta->qos_map_enabled)
@@ -3767,12 +3608,6 @@
 		return owe_buf;
 	}
 
-	if (sta->owe_pmk && sta->external_dh_updated) {
-		wpa_printf(MSG_DEBUG, "OWE: Using previously derived PMK");
-		*reason = WLAN_STATUS_SUCCESS;
-		return owe_buf;
-	}
-
 	*reason = owe_process_assoc_req(hapd, sta, owe_dh, owe_dh_len);
 	if (*reason != WLAN_STATUS_SUCCESS)
 		return NULL;
diff --git a/src/ap/ieee802_11.h b/src/ap/ieee802_11.h
index b8453c9..db7badc 100644
--- a/src/ap/ieee802_11.h
+++ b/src/ap/ieee802_11.h
@@ -18,7 +18,6 @@
 struct ieee80211_mgmt;
 struct vlan_description;
 struct hostapd_sta_wpa_psk_short;
-enum ieee80211_op_mode;
 
 int ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len,
 		    struct hostapd_frame_info *fi);
@@ -58,11 +57,9 @@
 u8 * hostapd_eid_vendor_vht(struct hostapd_data *hapd, u8 *eid);
 u8 * hostapd_eid_wb_chsw_wrapper(struct hostapd_data *hapd, u8 *eid);
 u8 * hostapd_eid_txpower_envelope(struct hostapd_data *hapd, u8 *eid);
-u8 * hostapd_eid_he_capab(struct hostapd_data *hapd, u8 *eid,
-			  enum ieee80211_op_mode opmode);
+u8 * hostapd_eid_he_capab(struct hostapd_data *hapd, u8 *eid);
 u8 * hostapd_eid_he_operation(struct hostapd_data *hapd, u8 *eid);
 u8 * hostapd_eid_he_mu_edca_parameter_set(struct hostapd_data *hapd, u8 *eid);
-u8 * hostapd_eid_spatial_reuse(struct hostapd_data *hapd, u8 *eid);
 
 int hostapd_ht_operation_update(struct hostapd_iface *iface);
 void ieee802_11_send_sa_query_req(struct hostapd_data *hapd,
@@ -73,10 +70,6 @@
 void hostapd_get_vht_capab(struct hostapd_data *hapd,
 			   struct ieee80211_vht_capabilities *vht_cap,
 			   struct ieee80211_vht_capabilities *neg_vht_cap);
-void hostapd_get_he_capab(struct hostapd_data *hapd,
-			  const struct ieee80211_he_capabilities *he_cap,
-			  struct ieee80211_he_capabilities *neg_he_cap,
-			  size_t he_capab_len);
 int hostapd_get_aid(struct hostapd_data *hapd, struct sta_info *sta);
 u16 copy_sta_ht_capab(struct hostapd_data *hapd, struct sta_info *sta,
 		      const u8 *ht_capab);
@@ -92,9 +85,6 @@
 		      const u8 *vht_oper);
 u16 set_sta_vht_opmode(struct hostapd_data *hapd, struct sta_info *sta,
 		       const u8 *vht_opmode);
-u16 copy_sta_he_capab(struct hostapd_data *hapd, struct sta_info *sta,
-		      enum ieee80211_op_mode opmode, const u8 *he_capab,
-		      size_t he_capab_len);
 void hostapd_tx_status(struct hostapd_data *hapd, const u8 *addr,
 		       const u8 *buf, size_t len, int ack);
 void hostapd_eapol_tx_status(struct hostapd_data *hapd, const u8 *dst,
@@ -163,12 +153,6 @@
 u8 * owe_assoc_req_process(struct hostapd_data *hapd, struct sta_info *sta,
 			   const u8 *owe_dh, u8 owe_dh_len,
 			   u8 *owe_buf, size_t owe_buf_len, u16 *reason);
-u16 owe_process_rsn_ie(struct hostapd_data *hapd, struct sta_info *sta,
-		       const u8 *rsn_ie, size_t rsn_ie_len,
-		       const u8 *owe_dh, size_t owe_dh_len);
-u16 owe_validate_request(struct hostapd_data *hapd, const u8 *peer,
-			 const u8 *rsn_ie, size_t rsn_ie_len,
-			 const u8 *owe_dh, size_t owe_dh_len);
 void fils_hlp_timeout(void *eloop_ctx, void *eloop_data);
 void fils_hlp_finish_assoc(struct hostapd_data *hapd, struct sta_info *sta);
 void handle_auth_fils(struct hostapd_data *hapd, struct sta_info *sta,
diff --git a/src/ap/ieee802_11_he.c b/src/ap/ieee802_11_he.c
index a51f3fc..0721358 100644
--- a/src/ap/ieee802_11_he.c
+++ b/src/ap/ieee802_11_he.c
@@ -1,7 +1,6 @@
 /*
  * hostapd / IEEE 802.11ax HE
  * Copyright (c) 2016-2017, Qualcomm Atheros, Inc.
- * Copyright (c) 2019 John Crispin <john@phrozen.org>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -14,113 +13,37 @@
 #include "hostapd.h"
 #include "ap_config.h"
 #include "beacon.h"
-#include "sta_info.h"
 #include "ieee802_11.h"
 #include "dfs.h"
 
-static u8 ieee80211_he_ppet_size(u8 ppe_thres_hdr, const u8 *phy_cap_info)
-{
-	u8 sz = 0, ru;
-
-	if ((phy_cap_info[HE_PHYCAP_PPE_THRESHOLD_PRESENT_IDX] &
-	     HE_PHYCAP_PPE_THRESHOLD_PRESENT) == 0)
-		return 0;
-
-	ru = (ppe_thres_hdr >> HE_PPE_THRES_RU_INDEX_BITMASK_SHIFT) &
-		HE_PPE_THRES_RU_INDEX_BITMASK_MASK;
-	while (ru) {
-		if (ru & 0x1)
-			sz++;
-		ru >>= 1;
-	}
-
-	sz *= 1 + (ppe_thres_hdr & HE_PPE_THRES_NSS_MASK);
-	sz = (sz * 6) + 7;
-	if (sz % 8)
-		sz += 8;
-	sz /= 8;
-
-	return sz;
-}
-
-
-u8 * hostapd_eid_he_capab(struct hostapd_data *hapd, u8 *eid,
-			  enum ieee80211_op_mode opmode)
+u8 * hostapd_eid_he_capab(struct hostapd_data *hapd, u8 *eid)
 {
 	struct ieee80211_he_capabilities *cap;
-	struct hostapd_hw_modes *mode = hapd->iface->current_mode;
-	u8 he_oper_chwidth = ~HE_PHYCAP_CHANNEL_WIDTH_MASK;
 	u8 *pos = eid;
-	u8 ie_size = 0, mcs_nss_size = 0, ppet_size = 0;
 
-	if (!mode)
+	if (!hapd->iface->current_mode)
 		return eid;
 
-	ie_size = sizeof(struct ieee80211_he_capabilities);
-	ppet_size = ieee80211_he_ppet_size(mode->he_capab[opmode].ppet[0],
-					   mode->he_capab[opmode].phy_cap);
-
-	switch (hapd->iface->conf->he_oper_chwidth) {
-	case CHANWIDTH_80P80MHZ:
-		he_oper_chwidth |=
-			HE_PHYCAP_CHANNEL_WIDTH_SET_80PLUS80MHZ_IN_5G;
-		mcs_nss_size += 4;
-		/* fall through */
-	case CHANWIDTH_160MHZ:
-		he_oper_chwidth |= HE_PHYCAP_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
-		mcs_nss_size += 4;
-		/* fall through */
-	case CHANWIDTH_80MHZ:
-	case CHANWIDTH_USE_HT:
-		he_oper_chwidth |= HE_PHYCAP_CHANNEL_WIDTH_SET_40MHZ_IN_2G |
-			HE_PHYCAP_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G;
-		mcs_nss_size += 4;
-		break;
-	}
-
-	ie_size += mcs_nss_size + ppet_size;
-
 	*pos++ = WLAN_EID_EXTENSION;
-	*pos++ = 1 + ie_size;
+	*pos++ = 1 + sizeof(struct ieee80211_he_capabilities);
 	*pos++ = WLAN_EID_EXT_HE_CAPABILITIES;
 
 	cap = (struct ieee80211_he_capabilities *) pos;
 	os_memset(cap, 0, sizeof(*cap));
 
-	os_memcpy(cap->he_mac_capab_info, mode->he_capab[opmode].mac_cap,
-		  HE_MAX_MAC_CAPAB_SIZE);
-	os_memcpy(cap->he_phy_capab_info, mode->he_capab[opmode].phy_cap,
-		  HE_MAX_PHY_CAPAB_SIZE);
-	os_memcpy(cap->optional, mode->he_capab[opmode].mcs, mcs_nss_size);
-	if (ppet_size)
-		os_memcpy(&cap->optional[mcs_nss_size],
-			  mode->he_capab[opmode].ppet,  ppet_size);
-
 	if (hapd->iface->conf->he_phy_capab.he_su_beamformer)
 		cap->he_phy_capab_info[HE_PHYCAP_SU_BEAMFORMER_CAPAB_IDX] |=
 			HE_PHYCAP_SU_BEAMFORMER_CAPAB;
-	else
-		cap->he_phy_capab_info[HE_PHYCAP_SU_BEAMFORMER_CAPAB_IDX] &=
-			~HE_PHYCAP_SU_BEAMFORMER_CAPAB;
 
 	if (hapd->iface->conf->he_phy_capab.he_su_beamformee)
 		cap->he_phy_capab_info[HE_PHYCAP_SU_BEAMFORMEE_CAPAB_IDX] |=
 			HE_PHYCAP_SU_BEAMFORMEE_CAPAB;
-	else
-		cap->he_phy_capab_info[HE_PHYCAP_SU_BEAMFORMEE_CAPAB_IDX] &=
-			~HE_PHYCAP_SU_BEAMFORMEE_CAPAB;
 
 	if (hapd->iface->conf->he_phy_capab.he_mu_beamformer)
 		cap->he_phy_capab_info[HE_PHYCAP_MU_BEAMFORMER_CAPAB_IDX] |=
 			HE_PHYCAP_MU_BEAMFORMER_CAPAB;
-	else
-		cap->he_phy_capab_info[HE_PHYCAP_MU_BEAMFORMER_CAPAB_IDX] &=
-			~HE_PHYCAP_MU_BEAMFORMER_CAPAB;
 
-	cap->he_phy_capab_info[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] &=
-		he_oper_chwidth;
-
-	pos += ie_size;
+	pos += sizeof(*cap);
 
 	return pos;
 }
@@ -130,43 +53,36 @@
 {
 	struct ieee80211_he_operation *oper;
 	u8 *pos = eid;
-	int oper_size = 6;
-	u32 params = 0;
 
 	if (!hapd->iface->current_mode)
 		return eid;
 
 	*pos++ = WLAN_EID_EXTENSION;
-	*pos++ = 1 + oper_size;
+	*pos++ = 1 + sizeof(struct ieee80211_he_operation);
 	*pos++ = WLAN_EID_EXT_HE_OPERATION;
 
 	oper = (struct ieee80211_he_operation *) pos;
 	os_memset(oper, 0, sizeof(*oper));
 
+	if (hapd->iface->conf->he_op.he_bss_color)
+		oper->he_oper_params |= hapd->iface->conf->he_op.he_bss_color;
+
 	if (hapd->iface->conf->he_op.he_default_pe_duration)
-		params |= (hapd->iface->conf->he_op.he_default_pe_duration <<
-			   HE_OPERATION_DFLT_PE_DURATION_OFFSET);
+		oper->he_oper_params |=
+			(hapd->iface->conf->he_op.he_default_pe_duration <<
+			 HE_OPERATION_DFLT_PE_DURATION_OFFSET);
 
 	if (hapd->iface->conf->he_op.he_twt_required)
-		params |= HE_OPERATION_TWT_REQUIRED;
+		oper->he_oper_params |= HE_OPERATION_TWT_REQUIRED;
 
 	if (hapd->iface->conf->he_op.he_rts_threshold)
-		params |= (hapd->iface->conf->he_op.he_rts_threshold <<
-			   HE_OPERATION_RTS_THRESHOLD_OFFSET);
-
-	if (hapd->iface->conf->he_op.he_bss_color)
-		params |= (hapd->iface->conf->he_op.he_bss_color <<
-			   HE_OPERATION_BSS_COLOR_OFFSET);
-
-	/* HE minimum required basic MCS and NSS for STAs */
-	oper->he_mcs_nss_set =
-		host_to_le16(hapd->iface->conf->he_op.he_basic_mcs_nss_set);
+		oper->he_oper_params |=
+			(hapd->iface->conf->he_op.he_rts_threshold <<
+			 HE_OPERATION_RTS_THRESHOLD_OFFSET);
 
 	/* TODO: conditional MaxBSSID Indicator subfield */
 
-	oper->he_oper_params = host_to_le32(params);
-
-	pos += oper_size;
+	pos += sizeof(*oper);
 
 	return pos;
 }
@@ -201,148 +117,3 @@
 
 	return pos;
 }
-
-
-u8 * hostapd_eid_spatial_reuse(struct hostapd_data *hapd, u8 *eid)
-{
-	struct ieee80211_spatial_reuse *spr;
-	u8 *pos = eid, *spr_param;
-	u8 sz = 1;
-
-	if (!hapd->iface->conf->spr.sr_control)
-		return eid;
-
-	if (hapd->iface->conf->spr.sr_control &
-	    SPATIAL_REUSE_NON_SRG_OFFSET_PRESENT)
-		sz++;
-
-	if (hapd->iface->conf->spr.sr_control &
-	    SPATIAL_REUSE_SRG_INFORMATION_PRESENT)
-		sz += 18;
-
-	*pos++ = WLAN_EID_EXTENSION;
-	*pos++ = 1 + sz;
-	*pos++ = WLAN_EID_EXT_SPATIAL_REUSE;
-
-	spr = (struct ieee80211_spatial_reuse *) pos;
-	os_memset(spr, 0, sizeof(*spr));
-
-	spr->sr_ctrl = hapd->iface->conf->spr.sr_control;
-	pos++;
-	spr_param = spr->params;
-	if (spr->sr_ctrl & SPATIAL_REUSE_NON_SRG_OFFSET_PRESENT) {
-		*spr_param++ =
-			hapd->iface->conf->spr.non_srg_obss_pd_max_offset;
-		pos++;
-	}
-	if (spr->sr_ctrl & SPATIAL_REUSE_SRG_INFORMATION_PRESENT) {
-		*spr_param++ = hapd->iface->conf->spr.srg_obss_pd_min_offset;
-		*spr_param++ = hapd->iface->conf->spr.srg_obss_pd_max_offset;
-		pos += 18;
-	}
-
-	return pos;
-}
-
-
-void hostapd_get_he_capab(struct hostapd_data *hapd,
-			  const struct ieee80211_he_capabilities *he_cap,
-			  struct ieee80211_he_capabilities *neg_he_cap,
-			  size_t he_capab_len)
-{
-	if (!he_cap)
-		return;
-
-	if (he_capab_len > sizeof(*neg_he_cap))
-		he_capab_len = sizeof(*neg_he_cap);
-	/* TODO: mask out unsupported features */
-
-	os_memcpy(neg_he_cap, he_cap, he_capab_len);
-}
-
-
-static int check_valid_he_mcs(struct hostapd_data *hapd, const u8 *sta_he_capab,
-			      enum ieee80211_op_mode opmode)
-{
-	u16 sta_rx_mcs_set, ap_tx_mcs_set;
-	u8 mcs_count = 0;
-	const u16 *ap_mcs_set, *sta_mcs_set;
-	int i;
-
-	if (!hapd->iface->current_mode)
-		return 1;
-	ap_mcs_set = (u16 *) hapd->iface->current_mode->he_capab[opmode].mcs;
-	sta_mcs_set = (u16 *) ((const struct ieee80211_he_capabilities *)
-			       sta_he_capab)->optional;
-
-	/*
-	 * Disable HE capabilities for STAs for which there is not even a single
-	 * allowed MCS in any supported number of streams, i.e., STA is
-	 * advertising 3 (not supported) as HE MCS rates for all supported
-	 * band/stream cases.
-	 */
-	switch (hapd->iface->conf->he_oper_chwidth) {
-	case CHANWIDTH_80P80MHZ:
-		mcs_count = 3;
-		break;
-	case CHANWIDTH_160MHZ:
-		mcs_count = 2;
-		break;
-	default:
-		mcs_count = 1;
-		break;
-	}
-
-	for (i = 0; i < mcs_count; i++) {
-		int j;
-
-		/* AP Tx MCS map vs. STA Rx MCS map */
-		sta_rx_mcs_set = WPA_GET_LE16((const u8 *) &sta_mcs_set[i * 2]);
-		ap_tx_mcs_set = WPA_GET_LE16((const u8 *)
-					     &ap_mcs_set[(i * 2) + 1]);
-
-		for (j = 0; j < HE_NSS_MAX_STREAMS; j++) {
-			if (((ap_tx_mcs_set >> (j * 2)) & 0x3) == 3)
-				continue;
-
-			if (((sta_rx_mcs_set >> (j * 2)) & 0x3) == 3)
-				continue;
-
-			return 1;
-		}
-	}
-
-	wpa_printf(MSG_DEBUG,
-		   "No matching HE MCS found between AP TX and STA RX");
-
-	return 0;
-}
-
-
-u16 copy_sta_he_capab(struct hostapd_data *hapd, struct sta_info *sta,
-		      enum ieee80211_op_mode opmode, const u8 *he_capab,
-		      size_t he_capab_len)
-{
-	if (!he_capab || !hapd->iconf->ieee80211ax ||
-	    !check_valid_he_mcs(hapd, he_capab, opmode) ||
-	    he_capab_len > sizeof(struct ieee80211_he_capabilities)) {
-		sta->flags &= ~WLAN_STA_HE;
-		os_free(sta->he_capab);
-		sta->he_capab = NULL;
-		return WLAN_STATUS_SUCCESS;
-	}
-
-	if (!sta->he_capab) {
-		sta->he_capab =
-			os_zalloc(sizeof(struct ieee80211_he_capabilities));
-		if (!sta->he_capab)
-			return WLAN_STATUS_UNSPECIFIED_FAILURE;
-	}
-
-	sta->flags |= WLAN_STA_HE;
-	os_memset(sta->he_capab, 0, sizeof(struct ieee80211_he_capabilities));
-	os_memcpy(sta->he_capab, he_capab, he_capab_len);
-	sta->he_capab_len = he_capab_len;
-
-	return WLAN_STATUS_SUCCESS;
-}
diff --git a/src/ap/ieee802_11_vht.c b/src/ap/ieee802_11_vht.c
index 269345f..54ee080 100644
--- a/src/ap/ieee802_11_vht.c
+++ b/src/ap/ieee802_11_vht.c
@@ -242,7 +242,7 @@
 		return eid;
 
 	switch (iface->conf->vht_oper_chwidth) {
-	case CHANWIDTH_USE_HT:
+	case VHT_CHANWIDTH_USE_HT:
 		if (iconf->secondary_channel == 0) {
 			/* Max Transmit Power count = 0 (20 MHz) */
 			tx_pwr_count = 0;
@@ -251,12 +251,12 @@
 			tx_pwr_count = 1;
 		}
 		break;
-	case CHANWIDTH_80MHZ:
+	case VHT_CHANWIDTH_80MHZ:
 		/* Max Transmit Power count = 2 (20, 40, and 80 MHz) */
 		tx_pwr_count = 2;
 		break;
-	case CHANWIDTH_80P80MHZ:
-	case CHANWIDTH_160MHZ:
+	case VHT_CHANWIDTH_80P80MHZ:
+	case VHT_CHANWIDTH_160MHZ:
 		/* Max Transmit Power count = 3 (20, 40, 80, 160/80+80 MHz) */
 		tx_pwr_count = 3;
 		break;
diff --git a/src/ap/ieee802_1x.c b/src/ap/ieee802_1x.c
index d628641..870329a 100644
--- a/src/ap/ieee802_1x.c
+++ b/src/ap/ieee802_1x.c
@@ -34,7 +34,6 @@
 /* FIX: Not really a good thing to require ieee802_11.h here.. (FILS) */
 #include "ieee802_11.h"
 #include "ieee802_1x.h"
-#include "wpa_auth_kay.h"
 
 
 #ifdef CONFIG_HS20
@@ -64,10 +63,6 @@
 
 	xhdr = (struct ieee802_1x_hdr *) buf;
 	xhdr->version = hapd->conf->eapol_version;
-#ifdef CONFIG_MACSEC
-	if (xhdr->version > 2 && hapd->conf->macsec_policy == 0)
-		xhdr->version = 2;
-#endif /* CONFIG_MACSEC */
 	xhdr->type = type;
 	xhdr->length = host_to_be16(datalen);
 
@@ -162,21 +157,6 @@
 	key->type = EAPOL_KEY_TYPE_RC4;
 	WPA_PUT_BE16(key->key_length, key_len);
 	wpa_get_ntp_timestamp(key->replay_counter);
-	if (os_memcmp(key->replay_counter,
-		      hapd->last_1x_eapol_key_replay_counter,
-		      IEEE8021X_REPLAY_COUNTER_LEN) <= 0) {
-		/* NTP timestamp did not increment from last EAPOL-Key frame;
-		 * use previously used value + 1 instead. */
-		inc_byte_array(hapd->last_1x_eapol_key_replay_counter,
-			       IEEE8021X_REPLAY_COUNTER_LEN);
-		os_memcpy(key->replay_counter,
-			  hapd->last_1x_eapol_key_replay_counter,
-			  IEEE8021X_REPLAY_COUNTER_LEN);
-	} else {
-		os_memcpy(hapd->last_1x_eapol_key_replay_counter,
-			  key->replay_counter,
-			  IEEE8021X_REPLAY_COUNTER_LEN);
-	}
 
 	if (random_get_bytes(key->key_iv, sizeof(key->key_iv))) {
 		wpa_printf(MSG_ERROR, "Could not get random numbers");
@@ -217,10 +197,6 @@
 	/* This header is needed here for HMAC-MD5, but it will be regenerated
 	 * in ieee802_1x_send() */
 	hdr->version = hapd->conf->eapol_version;
-#ifdef CONFIG_MACSEC
-	if (hdr->version > 2)
-		hdr->version = 2;
-#endif /* CONFIG_MACSEC */
 	hdr->type = IEEE802_1X_TYPE_EAPOL_KEY;
 	hdr->length = host_to_be16(len);
 	hmac_md5(sm->eap_if->eapKeyData + 32, 32, buf, sizeof(*hdr) + len,
@@ -1128,13 +1104,6 @@
 		/* TODO: implement support for this; show data */
 		break;
 
-#ifdef CONFIG_MACSEC
-	case IEEE802_1X_TYPE_EAPOL_MKA:
-		wpa_printf(MSG_EXCESSIVE,
-			   "EAPOL type %d will be handled by MKA", hdr->type);
-		break;
-#endif /* CONFIG_MACSEC */
-
 	default:
 		wpa_printf(MSG_DEBUG, "   unknown IEEE 802.1X packet type");
 		sta->eapol_sm->dot1xAuthInvalidEapolFramesRx++;
@@ -1267,7 +1236,6 @@
 		sta->eapol_sm->portValid = TRUE;
 		if (sta->eapol_sm->eap)
 			eap_sm_notify_cached(sta->eapol_sm->eap);
-		wpa_auth_set_ptk_rekey_timer(sta->wpa_sm);
 		return;
 	}
 #endif /* CONFIG_FILS */
@@ -1416,8 +1384,6 @@
 				size_t shared_secret_len)
 {
 	struct radius_ms_mppe_keys *keys;
-	u8 *buf;
-	size_t len;
 	struct eapol_state_machine *sm = sta->eapol_sm;
 	if (sm == NULL)
 		return;
@@ -1426,7 +1392,7 @@
 				      shared_secret_len);
 
 	if (keys && keys->send && keys->recv) {
-		len = keys->send_len + keys->recv_len;
+		size_t len = keys->send_len + keys->recv_len;
 		wpa_hexdump_key(MSG_DEBUG, "MS-MPPE-Send-Key",
 				keys->send, keys->send_len);
 		wpa_hexdump_key(MSG_DEBUG, "MS-MPPE-Recv-Key",
@@ -1454,20 +1420,6 @@
 		os_free(keys->recv);
 		os_free(keys);
 	}
-
-	if (radius_msg_get_attr_ptr(msg, RADIUS_ATTR_EAP_KEY_NAME, &buf, &len,
-				    NULL) == 0) {
-		os_free(sm->eap_if->eapSessionId);
-		sm->eap_if->eapSessionId = os_memdup(buf, len);
-		if (sm->eap_if->eapSessionId) {
-			sm->eap_if->eapSessionIdLen = len;
-			wpa_hexdump(MSG_DEBUG, "EAP-Key Name",
-				    sm->eap_if->eapSessionId,
-				    sm->eap_if->eapSessionIdLen);
-		}
-	} else {
-		sm->eap_if->eapSessionIdLen = 0;
-	}
 }
 
 
@@ -2371,8 +2323,6 @@
 	conf.eap_fast_prov = hapd->conf->eap_fast_prov;
 	conf.pac_key_lifetime = hapd->conf->pac_key_lifetime;
 	conf.pac_key_refresh_time = hapd->conf->pac_key_refresh_time;
-	conf.eap_teap_auth = hapd->conf->eap_teap_auth;
-	conf.eap_teap_pac_no_inner = hapd->conf->eap_teap_pac_no_inner;
 	conf.eap_sim_aka_result_ind = hapd->conf->eap_sim_aka_result_ind;
 	conf.tnc = hapd->conf->tnc;
 	conf.wps = hapd->wps;
@@ -2592,20 +2542,6 @@
 }
 
 
-#ifdef CONFIG_MACSEC
-const u8 * ieee802_1x_get_session_id(struct eapol_state_machine *sm,
-				     size_t *len)
-{
-	*len = 0;
-	if (!sm || !sm->eap_if)
-		return NULL;
-
-	*len = sm->eap_if->eapSessionIdLen;
-	return sm->eap_if->eapSessionId;
-}
-#endif /* CONFIG_MACSEC */
-
-
 void ieee802_1x_notify_port_enabled(struct eapol_state_machine *sm,
 				    int enabled)
 {
@@ -2896,10 +2832,6 @@
 	}
 #endif /* CONFIG_HS20 */
 
-#ifdef CONFIG_MACSEC
-	ieee802_1x_notify_create_actor_hapd(hapd, sta);
-#endif /* CONFIG_MACSEC */
-
 	key = ieee802_1x_get_key(sta->eapol_sm, &len);
 	if (sta->session_timeout_set) {
 		os_get_reltime(&now);
diff --git a/src/ap/ieee802_1x.h b/src/ap/ieee802_1x.h
index d771ba5..9594661 100644
--- a/src/ap/ieee802_1x.h
+++ b/src/ap/ieee802_1x.h
@@ -39,8 +39,6 @@
 				 int idx);
 struct wpabuf * ieee802_1x_get_radius_cui(struct eapol_state_machine *sm);
 const u8 * ieee802_1x_get_key(struct eapol_state_machine *sm, size_t *len);
-const u8 * ieee802_1x_get_session_id(struct eapol_state_machine *sm,
-				     size_t *len);
 void ieee802_1x_notify_port_enabled(struct eapol_state_machine *sm,
 				    int enabled);
 void ieee802_1x_notify_port_valid(struct eapol_state_machine *sm,
diff --git a/src/ap/neighbor_db.c b/src/ap/neighbor_db.c
index 5415443..2b6f727 100644
--- a/src/ap/neighbor_db.c
+++ b/src/ap/neighbor_db.c
@@ -139,21 +139,19 @@
 
 #ifdef NEED_AP_MLME
 static enum nr_chan_width hostapd_get_nr_chan_width(struct hostapd_data *hapd,
-						    int ht, int vht, int he)
+						    int ht, int vht)
 {
-	u8 oper_chwidth = hostapd_get_oper_chwidth(hapd->iconf);
-
-	if (!ht && !vht && !he)
+	if (!ht && !vht)
 		return NR_CHAN_WIDTH_20;
 	if (!hapd->iconf->secondary_channel)
 		return NR_CHAN_WIDTH_20;
-	if ((!vht && !he) || oper_chwidth == CHANWIDTH_USE_HT)
+	if (!vht || hapd->iconf->vht_oper_chwidth == VHT_CHANWIDTH_USE_HT)
 		return NR_CHAN_WIDTH_40;
-	if (oper_chwidth == CHANWIDTH_80MHZ)
+	if (hapd->iconf->vht_oper_chwidth == VHT_CHANWIDTH_80MHZ)
 		return NR_CHAN_WIDTH_80;
-	if (oper_chwidth == CHANWIDTH_160MHZ)
+	if (hapd->iconf->vht_oper_chwidth == VHT_CHANWIDTH_160MHZ)
 		return NR_CHAN_WIDTH_160;
-	if (oper_chwidth == CHANWIDTH_80P80MHZ)
+	if (hapd->iconf->vht_oper_chwidth == VHT_CHANWIDTH_80P80MHZ)
 		return NR_CHAN_WIDTH_80P80;
 	return NR_CHAN_WIDTH_20;
 }
@@ -166,7 +164,6 @@
 	u16 capab = hostapd_own_capab_info(hapd);
 	int ht = hapd->iconf->ieee80211n && !hapd->conf->disable_11n;
 	int vht = hapd->iconf->ieee80211ac && !hapd->conf->disable_11ac;
-	int he = hapd->iconf->ieee80211ax;
 	struct wpa_ssid_value ssid;
 	u8 channel, op_class;
 	u8 center_freq1_idx = 0, center_freq2_idx = 0;
@@ -208,18 +205,16 @@
 
 	if (ieee80211_freq_to_channel_ext(hapd->iface->freq,
 					  hapd->iconf->secondary_channel,
-					  hostapd_get_oper_chwidth(hapd->iconf),
+					  hapd->iconf->vht_oper_chwidth,
 					  &op_class, &channel) ==
 	    NUM_HOSTAPD_MODES)
 		return;
-	width = hostapd_get_nr_chan_width(hapd, ht, vht, he);
+	width = hostapd_get_nr_chan_width(hapd, ht, vht);
 	if (vht) {
-		center_freq1_idx = hostapd_get_oper_centr_freq_seg0_idx(
-			hapd->iconf);
+		center_freq1_idx = hapd->iconf->vht_oper_centr_freq_seg0_idx;
 		if (width == NR_CHAN_WIDTH_80P80)
 			center_freq2_idx =
-				hostapd_get_oper_centr_freq_seg1_idx(
-					hapd->iconf);
+				hapd->iconf->vht_oper_centr_freq_seg1_idx;
 	} else if (ht) {
 		ieee80211_freq_to_chan(hapd->iface->freq +
 				       10 * hapd->iconf->secondary_channel,
diff --git a/src/ap/sta_info.c b/src/ap/sta_info.c
index 51d7884..71f9f21 100644
--- a/src/ap/sta_info.c
+++ b/src/ap/sta_info.c
@@ -330,7 +330,6 @@
 	os_free(sta->ht_capabilities);
 	os_free(sta->vht_capabilities);
 	os_free(sta->vht_operation);
-	os_free(sta->he_capab);
 	hostapd_free_psk_list(sta->psk);
 	os_free(sta->identity);
 	os_free(sta->radius_cui);
@@ -671,7 +670,6 @@
 struct sta_info * ap_sta_add(struct hostapd_data *hapd, const u8 *addr)
 {
 	struct sta_info *sta;
-	int i;
 
 	sta = ap_get_sta(hapd, addr);
 	if (sta)
@@ -696,15 +694,6 @@
 		return NULL;
 	}
 
-	for (i = 0; i < WLAN_SUPP_RATES_MAX; i++) {
-		if (!hapd->iface->basic_rates)
-			break;
-		if (hapd->iface->basic_rates[i] < 0)
-			break;
-		sta->supported_rates[i] = hapd->iface->basic_rates[i] / 5;
-	}
-	sta->supported_rates_len = i;
-
 	if (!(hapd->iface->drv_flags & WPA_DRIVER_FLAGS_INACTIVITY_TIMER)) {
 		wpa_printf(MSG_DEBUG, "%s: register ap_handle_timer timeout "
 			   "for " MACSTR " (%d seconds - ap_max_inactivity)",
@@ -823,8 +812,6 @@
 			       ap_handle_timer, hapd, sta);
 	accounting_sta_stop(hapd, sta);
 	ieee802_1x_free_station(hapd, sta);
-	wpa_auth_sta_deinit(sta->wpa_sm);
-	sta->wpa_sm = NULL;
 
 	sta->disassoc_reason = reason;
 	sta->flags |= WLAN_STA_PENDING_DISASSOC_CB;
diff --git a/src/ap/sta_info.h b/src/ap/sta_info.h
index 5456a63..ece0c60 100644
--- a/src/ap/sta_info.h
+++ b/src/ap/sta_info.h
@@ -37,7 +37,6 @@
 #define WLAN_STA_VENDOR_VHT BIT(21)
 #define WLAN_STA_PENDING_FILS_ERP BIT(22)
 #define WLAN_STA_MULTI_AP BIT(23)
-#define WLAN_STA_HE BIT(24)
 #define WLAN_STA_PENDING_DISASSOC_CB BIT(29)
 #define WLAN_STA_PENDING_DEAUTH_CB BIT(30)
 #define WLAN_STA_NONERP BIT(31)
@@ -120,7 +119,6 @@
 	unsigned int agreed_to_steer:1;
 	unsigned int hs20_t_c_filtering:1;
 	unsigned int ft_over_ds:1;
-	unsigned int external_dh_updated:1;
 
 	u16 auth_alg;
 
@@ -168,8 +166,6 @@
 	struct ieee80211_vht_capabilities *vht_capabilities;
 	struct ieee80211_vht_operation *vht_operation;
 	u8 vht_opmode;
-	struct ieee80211_he_capabilities *he_capab;
-	size_t he_capab_len;
 
 #ifdef CONFIG_IEEE80211W
 	int sa_query_count; /* number of pending SA Query requests;
@@ -279,10 +275,6 @@
 	u8 last_tk[WPA_TK_MAX_LEN];
 	size_t last_tk_len;
 #endif /* CONFIG_TESTING_OPTIONS */
-#ifdef CONFIG_AIRTIME_POLICY
-	unsigned int airtime_weight;
-	struct os_reltime backlogged_until;
-#endif /* CONFIG_AIRTIME_POLICY */
 };
 
 
diff --git a/src/ap/wmm.c b/src/ap/wmm.c
index dc73493..8054c5d 100644
--- a/src/ap/wmm.c
+++ b/src/ap/wmm.c
@@ -20,13 +20,6 @@
 #include "ap_drv_ops.h"
 #include "wmm.h"
 
-#ifndef MIN
-#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-#endif
-#ifndef MAX
-#define MAX(a, b) (((a) > (b)) ? (a) : (b))
-#endif
-
 
 static inline u8 wmm_aci_aifsn(int aifsn, int acm, int aci)
 {
@@ -46,62 +39,6 @@
 }
 
 
-static void
-wmm_set_regulatory_limit(const struct hostapd_wmm_ac_params *wmm_conf,
-			 struct hostapd_wmm_ac_params *wmm,
-			 const struct hostapd_wmm_rule *wmm_reg)
-{
-	int ac;
-
-	for (ac = 0; ac < WMM_AC_NUM; ac++) {
-		wmm[ac].cwmin = MAX(wmm_conf[ac].cwmin, wmm_reg[ac].min_cwmin);
-		wmm[ac].cwmax = MAX(wmm_conf[ac].cwmax, wmm_reg[ac].min_cwmax);
-		wmm[ac].aifs = MAX(wmm_conf[ac].aifs, wmm_reg[ac].min_aifs);
-		wmm[ac].txop_limit =
-			MIN(wmm_conf[ac].txop_limit, wmm_reg[ac].max_txop);
-		wmm[ac].admission_control_mandatory =
-			wmm_conf[ac].admission_control_mandatory;
-	}
-}
-
-
-/*
- * Calculate WMM regulatory limit if any.
- */
-static void wmm_calc_regulatory_limit(struct hostapd_data *hapd,
-				      struct hostapd_wmm_ac_params *acp)
-{
-	struct hostapd_hw_modes *mode = hapd->iface->current_mode;
-	int c;
-
-	os_memcpy(acp, hapd->iconf->wmm_ac_params,
-		  sizeof(hapd->iconf->wmm_ac_params));
-
-	for (c = 0; mode && c < mode->num_channels; c++) {
-		struct hostapd_channel_data *chan = &mode->channels[c];
-
-		if (chan->freq != hapd->iface->freq)
-			continue;
-
-		if (chan->wmm_rules_valid)
-			wmm_set_regulatory_limit(hapd->iconf->wmm_ac_params,
-						 acp, chan->wmm_rules);
-		break;
-	}
-
-	/*
-	 * Check if we need to update set count. Since both were initialized to
-	 * zero we can compare the whole array in one shot.
-	 */
-	if (os_memcmp(acp, hapd->iface->prev_wmm,
-		      sizeof(hapd->iconf->wmm_ac_params)) != 0) {
-		os_memcpy(hapd->iface->prev_wmm, acp,
-			  sizeof(hapd->iconf->wmm_ac_params));
-		hapd->parameter_set_count++;
-	}
-}
-
-
 /*
  * Add WMM Parameter Element to Beacon, Probe Response, and (Re)Association
  * Response frames.
@@ -111,12 +48,10 @@
 	u8 *pos = eid;
 	struct wmm_parameter_element *wmm =
 		(struct wmm_parameter_element *) (pos + 2);
-	struct hostapd_wmm_ac_params wmmp[WMM_AC_NUM] = { 0 };
 	int e;
 
 	if (!hapd->conf->wmm_enabled)
 		return eid;
-	wmm_calc_regulatory_limit(hapd, wmmp);
 	eid[0] = WLAN_EID_VENDOR_SPECIFIC;
 	wmm->oui[0] = 0x00;
 	wmm->oui[1] = 0x50;
@@ -135,7 +70,8 @@
 	/* fill in a parameter set record for each AC */
 	for (e = 0; e < 4; e++) {
 		struct wmm_ac_parameter *ac = &wmm->ac[e];
-		struct hostapd_wmm_ac_params *acp = &wmmp[e];
+		struct hostapd_wmm_ac_params *acp =
+			&hapd->iconf->wmm_ac_params[e];
 
 		ac->aci_aifsn = wmm_aci_aifsn(acp->aifs,
 					      acp->admission_control_mandatory,
diff --git a/src/ap/wpa_auth.c b/src/ap/wpa_auth.c
index e1c0c2c..e89a716 100644
--- a/src/ap/wpa_auth.c
+++ b/src/ap/wpa_auth.c
@@ -320,19 +320,6 @@
 }
 
 
-void wpa_auth_set_ptk_rekey_timer(struct wpa_state_machine *sm)
-{
-	if (sm && sm->wpa_auth->conf.wpa_ptk_rekey) {
-		wpa_printf(MSG_DEBUG, "WPA: Start PTK rekeying timer for "
-			   MACSTR " (%d seconds)", MAC2STR(sm->addr),
-			   sm->wpa_auth->conf.wpa_ptk_rekey);
-		eloop_cancel_timeout(wpa_rekey_ptk, sm->wpa_auth, sm);
-		eloop_register_timeout(sm->wpa_auth->conf.wpa_ptk_rekey, 0,
-				       wpa_rekey_ptk, sm->wpa_auth, sm);
-	}
-}
-
-
 static int wpa_auth_pmksa_clear_cb(struct wpa_state_machine *sm, void *ctx)
 {
 	if (sm->pmksa == ctx)
@@ -934,7 +921,6 @@
 
 	os_memcpy(sm->SNonce, sm->alt_SNonce, WPA_NONCE_LEN);
 	os_memcpy(&sm->PTK, &PTK, sizeof(PTK));
-	forced_memzero(&PTK, sizeof(PTK));
 	sm->PTK_valid = TRUE;
 
 	return 0;
@@ -1408,8 +1394,6 @@
 #endif /* CONFIG_SHA256 */
 #endif /* CONFIG_SHA384 */
 
-	forced_memzero(data, sizeof(data));
-
 	return ret;
 }
 
@@ -1751,8 +1735,6 @@
 		sm->pmk_len = 0;
 		os_memset(sm->xxkey, 0, sizeof(sm->xxkey));
 		sm->xxkey_len = 0;
-		os_memset(sm->pmk_r1, 0, sizeof(sm->pmk_r1));
-		sm->pmk_r1_len = 0;
 #endif /* CONFIG_IEEE80211R_AP */
 		break;
 	case WPA_REAUTH:
@@ -1794,7 +1776,6 @@
 
 		/* Using FT protocol, not WPA auth state machine */
 		sm->ft_completed = 1;
-		wpa_auth_set_ptk_rekey_timer(sm);
 		return 0;
 #else /* CONFIG_IEEE80211R_AP */
 		break;
@@ -2049,7 +2030,7 @@
 		sm->Disconnect = TRUE;
 		return;
 	}
-	forced_memzero(msk, sizeof(msk));
+	os_memset(msk, 0, sizeof(msk));
 
 	sm->req_replay_counter_used = 0;
 	/* IEEE 802.11i does not set keyRun to FALSE, but not doing this
@@ -2149,29 +2130,6 @@
 			wpa_printf(MSG_DEBUG,
 				   "RSN: No KCK available to derive PMKID for message 1/4");
 			pmkid = NULL;
-#ifdef CONFIG_FILS
-		} else if (wpa_key_mgmt_fils(sm->wpa_key_mgmt)) {
-			if (sm->pmkid_set) {
-				wpa_hexdump(MSG_DEBUG,
-					    "RSN: Message 1/4 PMKID from FILS/ERP",
-					    sm->pmkid, PMKID_LEN);
-				os_memcpy(&pmkid[2 + RSN_SELECTOR_LEN],
-					  sm->pmkid, PMKID_LEN);
-			} else {
-				/* No PMKID available */
-				wpa_printf(MSG_DEBUG,
-					   "RSN: No FILS/ERP PMKID available for message 1/4");
-				pmkid = NULL;
-			}
-#endif /* CONFIG_FILS */
-#ifdef CONFIG_IEEE80211R_AP
-		} else if (wpa_key_mgmt_ft(sm->wpa_key_mgmt) &&
-			   sm->ft_completed) {
-			wpa_printf(MSG_DEBUG,
-				   "FT: No PMKID in message 1/4 when using FT protocol");
-			pmkid = NULL;
-			pmkid_len = 0;
-#endif /* CONFIG_IEEE80211R_AP */
 #ifdef CONFIG_SAE
 		} else if (wpa_key_mgmt_sae(sm->wpa_key_mgmt)) {
 			if (sm->pmkid_set) {
@@ -2214,20 +2172,8 @@
 	size_t z_len = 0;
 
 #ifdef CONFIG_IEEE80211R_AP
-	if (wpa_key_mgmt_ft(sm->wpa_key_mgmt)) {
-		if (sm->ft_completed) {
-			u8 ptk_name[WPA_PMK_NAME_LEN];
-
-			return wpa_pmk_r1_to_ptk(sm->pmk_r1, sm->pmk_r1_len,
-						 sm->SNonce, sm->ANonce,
-						 sm->addr, sm->wpa_auth->addr,
-						 sm->pmk_r1_name,
-						 ptk, ptk_name,
-						 sm->wpa_key_mgmt,
-						 sm->pairwise);
-		}
-		return wpa_auth_derive_ptk_ft(sm, ptk);
-	}
+	if (wpa_key_mgmt_ft(sm->wpa_key_mgmt))
+		return wpa_auth_derive_ptk_ft(sm, pmk, ptk);
 #endif /* CONFIG_IEEE80211R_AP */
 
 #ifdef CONFIG_DPP2
@@ -2288,12 +2234,12 @@
 		wpa_hexdump(MSG_DEBUG, "FILS+FT: PMKR0Name",
 			    pmk_r0_name, WPA_PMK_NAME_LEN);
 		wpa_ft_store_pmk_fils(sm, pmk_r0, pmk_r0_name);
-		forced_memzero(fils_ft, sizeof(fils_ft));
+		os_memset(fils_ft, 0, sizeof(fils_ft));
 
 		res = wpa_derive_pmk_r1_name(pmk_r0_name, conf->r1_key_holder,
 					     sm->addr, sm->pmk_r1_name,
 					     use_sha384);
-		forced_memzero(pmk_r0, PMK_LEN_MAX);
+		os_memset(pmk_r0, 0, PMK_LEN_MAX);
 		if (res < 0)
 			return -1;
 		wpa_hexdump(MSG_DEBUG, "FILS+FT: PMKR1Name", sm->pmk_r1_name,
@@ -2311,7 +2257,7 @@
 			       sm->wpa_key_mgmt, sm->fils_key_auth_sta,
 			       sm->fils_key_auth_ap,
 			       &sm->fils_key_auth_len);
-	forced_memzero(ick, sizeof(ick));
+	os_memset(ick, 0, sizeof(ick));
 
 	/* Store nonces for (Re)Association Request/Response frame processing */
 	os_memcpy(sm->SNonce, snonce, FILS_NONCE_LEN);
@@ -2613,7 +2559,7 @@
 	if (pos + wpabuf_len(plain) + AES_BLOCK_SIZE > end) {
 		wpa_printf(MSG_DEBUG,
 			   "FILS: Not enough room for FILS elements");
-		wpabuf_clear_free(plain);
+		wpabuf_free(plain);
 		return -1;
 	}
 
@@ -2623,7 +2569,7 @@
 	if (aes_siv_encrypt(sm->PTK.kek, sm->PTK.kek_len,
 			    wpabuf_head(plain), wpabuf_len(plain),
 			    5, aad, aad_len, pos) < 0) {
-		wpabuf_clear_free(plain);
+		wpabuf_free(plain);
 		return -1;
 	}
 
@@ -2631,7 +2577,7 @@
 		    "FILS: Encrypted Association Response elements",
 		    pos, AES_BLOCK_SIZE + wpabuf_len(plain));
 	current_len += wpabuf_len(plain) + AES_BLOCK_SIZE;
-	wpabuf_clear_free(plain);
+	wpabuf_free(plain);
 
 	sm->fils_completed = 1;
 
@@ -2685,7 +2631,7 @@
 		 * of GTK in the BSS.
 		 */
 		if (random_get_bytes(dummy_gtk, gtk_len) < 0) {
-			wpabuf_clear_free(plain);
+			wpabuf_free(plain);
 			return NULL;
 		}
 		gtk = dummy_gtk;
@@ -2712,13 +2658,13 @@
 		if (wpa_channel_info(sm->wpa_auth, &ci) != 0) {
 			wpa_printf(MSG_WARNING,
 				   "FILS: Failed to get channel info for OCI element");
-			wpabuf_clear_free(plain);
+			wpabuf_free(plain);
 			return NULL;
 		}
 
 		pos = wpabuf_put(plain, OCV_OCI_EXTENDED_LEN);
 		if (ocv_insert_extended_oci(&ci, pos) < 0) {
-			wpabuf_clear_free(plain);
+			wpabuf_free(plain);
 			return NULL;
 		}
 	}
@@ -2781,7 +2727,7 @@
 
 	wpa_printf(MSG_DEBUG, "%s: plain buf_len: %u", __func__,
 		   (unsigned int) wpabuf_len(plain));
-	wpabuf_clear_free(plain);
+	wpabuf_free(plain);
 	sm->fils_completed = 1;
 	return pos;
 }
@@ -2850,12 +2796,6 @@
 			pmk_len = sm->pmk_len;
 		}
 
-		if ((!pmk || !pmk_len) && sm->pmksa) {
-			wpa_printf(MSG_DEBUG, "WPA: Use PMK from PMKSA cache");
-			pmk = sm->pmksa->pmk;
-			pmk_len = sm->pmksa->pmk_len;
-		}
-
 		if (wpa_derive_ptk(sm, sm->SNonce, pmk, pmk_len, &PTK) < 0)
 			break;
 
@@ -3033,7 +2973,6 @@
 	sm->MICVerified = TRUE;
 
 	os_memcpy(&sm->PTK, &PTK, sizeof(PTK));
-	forced_memzero(&PTK, sizeof(PTK));
 	sm->PTK_valid = TRUE;
 }
 
@@ -3354,7 +3293,12 @@
 		/* FIX: MLME-SetProtection.Request(TA, Tx_Rx) */
 		sm->pairwise_set = TRUE;
 
-		wpa_auth_set_ptk_rekey_timer(sm);
+		if (sm->wpa_auth->conf.wpa_ptk_rekey) {
+			eloop_cancel_timeout(wpa_rekey_ptk, sm->wpa_auth, sm);
+			eloop_register_timeout(sm->wpa_auth->conf.
+					       wpa_ptk_rekey, 0, wpa_rekey_ptk,
+					       sm->wpa_auth, sm);
+		}
 
 		if (wpa_key_mgmt_wpa_psk(sm->wpa_key_mgmt) ||
 		    sm->wpa_key_mgmt == WPA_KEY_MGMT_DPP ||
@@ -4363,15 +4307,6 @@
 	    sm->wpa_auth->conf.disable_pmksa_caching)
 		return -1;
 
-#ifdef CONFIG_IEEE80211R_AP
-	if (pmk_len >= 2 * PMK_LEN && wpa_key_mgmt_ft(sm->wpa_key_mgmt) &&
-	    wpa_key_mgmt_wpa_ieee8021x(sm->wpa_key_mgmt) &&
-	    !wpa_key_mgmt_sha384(sm->wpa_key_mgmt)) {
-		/* Cache MPMK/XXKey instead of initial part from MSK */
-		pmk = pmk + PMK_LEN;
-		pmk_len = PMK_LEN;
-	} else
-#endif /* CONFIG_IEEE80211R_AP */
 	if (wpa_key_mgmt_sha384(sm->wpa_key_mgmt)) {
 		if (pmk_len > PMK_LEN_SUITE_B_192)
 			pmk_len = PMK_LEN_SUITE_B_192;
@@ -4379,7 +4314,6 @@
 		pmk_len = PMK_LEN;
 	}
 
-	wpa_hexdump_key(MSG_DEBUG, "RSN: Cache PMK", pmk, pmk_len);
 	if (pmksa_cache_auth_add(sm->wpa_auth->pmksa, pmk, pmk_len, NULL,
 				 sm->PTK.kck, sm->PTK.kck_len,
 				 sm->wpa_auth->addr, sm->addr, session_timeout,
@@ -4398,7 +4332,6 @@
 	if (wpa_auth == NULL)
 		return -1;
 
-	wpa_hexdump_key(MSG_DEBUG, "RSN: Cache PMK from preauth", pmk, len);
 	if (pmksa_cache_auth_add(wpa_auth->pmksa, pmk, len, NULL,
 				 NULL, 0,
 				 wpa_auth->addr,
@@ -4416,7 +4349,6 @@
 	if (wpa_auth->conf.disable_pmksa_caching)
 		return -1;
 
-	wpa_hexdump_key(MSG_DEBUG, "RSN: Cache PMK from SAE", pmk, PMK_LEN);
 	if (pmksa_cache_auth_add(wpa_auth->pmksa, pmk, PMK_LEN, pmkid,
 				 NULL, 0,
 				 wpa_auth->addr, addr, 0, NULL,
@@ -4441,7 +4373,6 @@
 	if (wpa_auth->conf.disable_pmksa_caching)
 		return -1;
 
-	wpa_hexdump_key(MSG_DEBUG, "RSN: Cache PMK (2)", pmk, PMK_LEN);
 	if (pmksa_cache_auth_add(wpa_auth->pmksa, pmk, pmk_len, pmkid,
 				 NULL, 0, wpa_auth->addr, addr, session_timeout,
 				 NULL, akmp))
@@ -4915,16 +4846,6 @@
 	*fils_kek_len = sm->PTK.kek_len;
 }
 
-
-void wpa_auth_add_fils_pmk_pmkid(struct wpa_state_machine *sm, const u8 *pmk,
-				 size_t pmk_len, const u8 *pmkid)
-{
-	os_memcpy(sm->PMK, pmk, pmk_len);
-	sm->pmk_len = pmk_len;
-	os_memcpy(sm->pmkid, pmkid, PMKID_LEN);
-	sm->pmkid_set = 1;
-}
-
 #endif /* CONFIG_FILS */
 
 
diff --git a/src/ap/wpa_auth.h b/src/ap/wpa_auth.h
index a348bc2..484e1e5 100644
--- a/src/ap/wpa_auth.h
+++ b/src/ap/wpa_auth.h
@@ -470,14 +470,9 @@
 void wpa_auth_get_fils_aead_params(struct wpa_state_machine *sm,
 				   u8 *fils_anonce, u8 *fils_snonce,
 				   u8 *fils_kek, size_t *fils_kek_len);
-void wpa_auth_add_fils_pmk_pmkid(struct wpa_state_machine *sm, const u8 *pmk,
-				 size_t pmk_len, const u8 *pmkid);
 u8 * wpa_auth_write_assoc_resp_owe(struct wpa_state_machine *sm,
 				   u8 *pos, size_t max_len,
 				   const u8 *req_ies, size_t req_ies_len);
-u8 * wpa_auth_write_assoc_resp_fils(struct wpa_state_machine *sm,
-				    u8 *pos, size_t max_len,
-				    const u8 *req_ies, size_t req_ies_len);
 void wpa_auth_set_auth_alg(struct wpa_state_machine *sm, u16 auth_alg);
 void wpa_auth_set_dpp_z(struct wpa_state_machine *sm, const struct wpabuf *z);
 
@@ -491,6 +486,5 @@
 			     void (*cb)(void *ctx1, void *ctx2),
 			     void *ctx1, void *ctx2);
 int wpa_auth_rekey_gtk(struct wpa_authenticator *wpa_auth);
-void wpa_auth_set_ptk_rekey_timer(struct wpa_state_machine *sm);
 
 #endif /* WPA_AUTH_H */
diff --git a/src/ap/wpa_auth_ft.c b/src/ap/wpa_auth_ft.c
index 696f8d5..fdb7eba 100644
--- a/src/ap/wpa_auth_ft.c
+++ b/src/ap/wpa_auth_ft.c
@@ -25,7 +25,6 @@
 #include "wmm.h"
 #include "wpa_auth.h"
 #include "wpa_auth_i.h"
-#include "pmksa_cache_auth.h"
 
 
 #ifdef CONFIG_IEEE80211R_AP
@@ -2075,7 +2074,8 @@
 }
 
 
-int wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, struct wpa_ptk *ptk)
+int wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, const u8 *pmk,
+			   struct wpa_ptk *ptk)
 {
 	u8 pmk_r0[PMK_LEN_MAX], pmk_r0_name[WPA_PMK_NAME_LEN];
 	size_t pmk_r0_len = wpa_key_mgmt_sha384(sm->wpa_key_mgmt) ?
@@ -2095,16 +2095,8 @@
 	const u8 *identity, *radius_cui;
 	size_t identity_len, radius_cui_len;
 	int session_timeout;
-	const u8 *mpmk;
-	size_t mpmk_len;
 
-	if (sm->xxkey_len > 0) {
-		mpmk = sm->xxkey;
-		mpmk_len = sm->xxkey_len;
-	} else if (sm->pmksa) {
-		mpmk = sm->pmksa->pmk;
-		mpmk_len = sm->pmksa->pmk_len;
-	} else {
+	if (sm->xxkey_len == 0) {
 		wpa_printf(MSG_DEBUG, "FT: XXKey not available for key "
 			   "derivation");
 		return -1;
@@ -2121,7 +2113,7 @@
 					       &radius_cui);
 	session_timeout = wpa_ft_get_session_timeout(sm->wpa_auth, sm->addr);
 
-	if (wpa_derive_pmk_r0(mpmk, mpmk_len, ssid, ssid_len, mdid,
+	if (wpa_derive_pmk_r0(sm->xxkey, sm->xxkey_len, ssid, ssid_len, mdid,
 			      r0kh, r0kh_len, sm->addr,
 			      pmk_r0, pmk_r0_name,
 			      wpa_key_mgmt_sha384(sm->wpa_key_mgmt)) < 0)
@@ -2226,7 +2218,6 @@
 		return NULL;
 	}
 
-	forced_memzero(keybuf, sizeof(keybuf));
 	*len = subelem_len;
 	return subelem;
 }
@@ -2993,8 +2984,6 @@
 	wpa_hexdump_key(MSG_DEBUG, "FT: Selected PMK-R1", pmk_r1, pmk_r1_len);
 	sm->pmk_r1_name_valid = 1;
 	os_memcpy(sm->pmk_r1_name, pmk_r1_name, WPA_PMK_NAME_LEN);
-	os_memcpy(sm->pmk_r1, pmk_r1, pmk_r1_len);
-	sm->pmk_r1_len = pmk_r1_len;
 
 	if (random_get_bytes(sm->ANonce, WPA_NONCE_LEN)) {
 		wpa_printf(MSG_DEBUG, "FT: Failed to get random data for "
@@ -3100,9 +3089,8 @@
 	status = res;
 
 	wpa_printf(MSG_DEBUG, "FT: FT authentication response: dst=" MACSTR
-		   " auth_transaction=%d status=%u (%s)",
-		   MAC2STR(sm->addr), auth_transaction + 1, status,
-		   status2str(status));
+		   " auth_transaction=%d status=%d",
+		   MAC2STR(sm->addr), auth_transaction + 1, status);
 	wpa_hexdump(MSG_DEBUG, "FT: Response IEs", resp_ies, resp_ies_len);
 	cb(ctx, sm->addr, bssid, auth_transaction + 1, status,
 	   resp_ies, resp_ies_len);
@@ -3460,9 +3448,8 @@
 	u8 *pos;
 
 	wpa_printf(MSG_DEBUG, "FT: RRB authentication response: STA=" MACSTR
-		   " CurrentAP=" MACSTR " status=%u (%s)",
-		   MAC2STR(sm->addr), MAC2STR(current_ap), status,
-		   status2str(status));
+		   " CurrentAP=" MACSTR " status=%d",
+		   MAC2STR(sm->addr), MAC2STR(current_ap), status);
 	wpa_hexdump(MSG_DEBUG, "FT: Response IEs", resp_ies, resp_ies_len);
 
 	/* RRB - Forward action frame response to the Current AP */
@@ -3568,7 +3555,7 @@
 			       pmk_r0->vlan, src_addr, type,
 			       packet, packet_len);
 
-	forced_memzero(pmk_r1, sizeof(pmk_r1));
+	os_memset(pmk_r1, 0, sizeof(pmk_r1));
 
 	return ret;
 }
@@ -3894,7 +3881,10 @@
 
 	ret = 0;
 out:
-	bin_clear_free(plain, plain_len);
+	if (plain) {
+		os_memset(plain, 0, plain_len);
+		os_free(plain);
+	}
 
 	return ret;
 
diff --git a/src/ap/wpa_auth_glue.c b/src/ap/wpa_auth_glue.c
index 0800a87..45172c6 100644
--- a/src/ap/wpa_auth_glue.c
+++ b/src/ap/wpa_auth_glue.c
@@ -53,10 +53,6 @@
 	wconf->rsn_pairwise = conf->rsn_pairwise;
 	wconf->rsn_preauth = conf->rsn_preauth;
 	wconf->eapol_version = conf->eapol_version;
-#ifdef CONFIG_MACSEC
-	if (wconf->eapol_version > 2)
-		wconf->eapol_version = 2;
-#endif /* CONFIG_MACSEC */
 	wconf->wmm_enabled = conf->wmm_enabled;
 	wconf->wmm_uapsd = conf->wmm_uapsd;
 	wconf->disable_pmksa_caching = conf->disable_pmksa_caching;
diff --git a/src/ap/wpa_auth_i.h b/src/ap/wpa_auth_i.h
index 4babd0c..3dcf77a 100644
--- a/src/ap/wpa_auth_i.h
+++ b/src/ap/wpa_auth_i.h
@@ -119,8 +119,6 @@
 	u8 xxkey[PMK_LEN_MAX]; /* PSK or the second 256 bits of MSK, or the
 				* first 384 bits of MSK */
 	size_t xxkey_len;
-	u8 pmk_r1[PMK_LEN_MAX];
-	unsigned int pmk_r1_len;
 	u8 pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name derived from FT Auth
 					   * Request */
 	u8 r0kh_id[FT_R0KH_ID_MAX_LEN]; /* R0KH-ID from FT Auth Request */
@@ -292,7 +290,8 @@
 		   const u8 *anonce, const u8 *snonce,
 		   u8 *buf, size_t len, const u8 *subelem,
 		   size_t subelem_len);
-int wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, struct wpa_ptk *ptk);
+int wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, const u8 *pmk,
+			   struct wpa_ptk *ptk);
 struct wpa_ft_pmk_cache * wpa_ft_pmk_cache_init(void);
 void wpa_ft_pmk_cache_deinit(struct wpa_ft_pmk_cache *cache);
 void wpa_ft_install_ptk(struct wpa_state_machine *sm);
diff --git a/src/ap/wpa_auth_ie.c b/src/ap/wpa_auth_ie.c
index 2e5c916..8580a5a 100644
--- a/src/ap/wpa_auth_ie.c
+++ b/src/ap/wpa_auth_ie.c
@@ -1176,23 +1176,3 @@
 	return pos + res;
 }
 #endif /* CONFIG_OWE */
-
-
-#ifdef CONFIG_FILS
-u8 * wpa_auth_write_assoc_resp_fils(struct wpa_state_machine *sm,
-				    u8 *pos, size_t max_len,
-				    const u8 *req_ies, size_t req_ies_len)
-{
-	int res;
-
-	if (!sm ||
-	    sm->wpa_key_mgmt & (WPA_KEY_MGMT_FT_FILS_SHA256 |
-				WPA_KEY_MGMT_FT_FILS_SHA384))
-		return pos;
-
-	res = wpa_write_rsn_ie(&sm->wpa_auth->conf, pos, max_len, NULL);
-	if (res < 0)
-		return pos;
-	return pos + res;
-}
-#endif /* CONFIG_FILS */
diff --git a/src/ap/wpa_auth_kay.c b/src/ap/wpa_auth_kay.c
deleted file mode 100644
index b6e4797..0000000
--- a/src/ap/wpa_auth_kay.c
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- * IEEE 802.1X-2010 KaY Interface
- * Copyright (c) 2019, The Linux Foundation
- *
- * 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 "pae/ieee802_1x_key.h"
-#include "pae/ieee802_1x_kay.h"
-#include "hostapd.h"
-#include "sta_info.h"
-#include "wpa_auth_kay.h"
-#include "ieee802_1x.h"
-
-
-#define DEFAULT_KEY_LEN		16
-/* secure Connectivity Association Key Name (CKN) */
-#define DEFAULT_CKN_LEN		16
-
-
-static int hapd_macsec_init(void *priv, struct macsec_init_params *params)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->macsec_init)
-		return -1;
-	return hapd->driver->macsec_init(hapd->drv_priv, params);
-}
-
-
-static int hapd_macsec_deinit(void *priv)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->macsec_deinit)
-		return -1;
-	return hapd->driver->macsec_deinit(hapd->drv_priv);
-}
-
-
-static int hapd_macsec_get_capability(void *priv, enum macsec_cap *cap)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->macsec_get_capability)
-		return -1;
-	return hapd->driver->macsec_get_capability(hapd->drv_priv, cap);
-}
-
-
-static int hapd_enable_protect_frames(void *priv, Boolean enabled)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->enable_protect_frames)
-		return -1;
-	return hapd->driver->enable_protect_frames(hapd->drv_priv, enabled);
-}
-
-
-static int hapd_enable_encrypt(void *priv, Boolean enabled)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->enable_encrypt)
-		return -1;
-	return hapd->driver->enable_encrypt(hapd->drv_priv, enabled);
-}
-
-
-static int hapd_set_replay_protect(void *priv, Boolean enabled, u32 window)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->set_replay_protect)
-		return -1;
-	return hapd->driver->set_replay_protect(hapd->drv_priv, enabled,
-						 window);
-}
-
-
-static int hapd_set_current_cipher_suite(void *priv, u64 cs)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->set_current_cipher_suite)
-		return -1;
-	return hapd->driver->set_current_cipher_suite(hapd->drv_priv, cs);
-}
-
-
-static int hapd_enable_controlled_port(void *priv, Boolean enabled)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->enable_controlled_port)
-		return -1;
-	return hapd->driver->enable_controlled_port(hapd->drv_priv, enabled);
-}
-
-
-static int hapd_get_receive_lowest_pn(void *priv, struct receive_sa *sa)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->get_receive_lowest_pn)
-		return -1;
-	return hapd->driver->get_receive_lowest_pn(hapd->drv_priv, sa);
-}
-
-
-static int hapd_get_transmit_next_pn(void *priv, struct transmit_sa *sa)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->get_transmit_next_pn)
-		return -1;
-	return hapd->driver->get_transmit_next_pn(hapd->drv_priv, sa);
-}
-
-
-static int hapd_set_transmit_next_pn(void *priv, struct transmit_sa *sa)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->set_transmit_next_pn)
-		return -1;
-	return hapd->driver->set_transmit_next_pn(hapd->drv_priv, sa);
-}
-
-
-static unsigned int conf_offset_val(enum confidentiality_offset co)
-{
-	switch (co) {
-	case CONFIDENTIALITY_OFFSET_30:
-		return 30;
-		break;
-	case CONFIDENTIALITY_OFFSET_50:
-		return 50;
-	default:
-		return 0;
-	}
-}
-
-
-static int hapd_create_receive_sc(void *priv, struct receive_sc *sc,
-				  enum validate_frames vf,
-				  enum confidentiality_offset co)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->create_receive_sc)
-		return -1;
-	return hapd->driver->create_receive_sc(hapd->drv_priv, sc,
-					       conf_offset_val(co), vf);
-}
-
-
-static int hapd_delete_receive_sc(void *priv, struct receive_sc *sc)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->delete_receive_sc)
-		return -1;
-	return hapd->driver->delete_receive_sc(hapd->drv_priv, sc);
-}
-
-
-static int hapd_create_receive_sa(void *priv, struct receive_sa *sa)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->create_receive_sa)
-		return -1;
-	return hapd->driver->create_receive_sa(hapd->drv_priv, sa);
-}
-
-
-static int hapd_delete_receive_sa(void *priv, struct receive_sa *sa)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->delete_receive_sa)
-		return -1;
-	return hapd->driver->delete_receive_sa(hapd->drv_priv, sa);
-}
-
-
-static int hapd_enable_receive_sa(void *priv, struct receive_sa *sa)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->enable_receive_sa)
-		return -1;
-	return hapd->driver->enable_receive_sa(hapd->drv_priv, sa);
-}
-
-
-static int hapd_disable_receive_sa(void *priv, struct receive_sa *sa)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->disable_receive_sa)
-		return -1;
-	return hapd->driver->disable_receive_sa(hapd->drv_priv, sa);
-}
-
-
-static int
-hapd_create_transmit_sc(void *priv, struct transmit_sc *sc,
-			enum confidentiality_offset co)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->create_transmit_sc)
-		return -1;
-	return hapd->driver->create_transmit_sc(hapd->drv_priv, sc,
-						conf_offset_val(co));
-}
-
-
-static int hapd_delete_transmit_sc(void *priv, struct transmit_sc *sc)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->delete_transmit_sc)
-		return -1;
-	return hapd->driver->delete_transmit_sc(hapd->drv_priv, sc);
-}
-
-
-static int hapd_create_transmit_sa(void *priv, struct transmit_sa *sa)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->create_transmit_sa)
-		return -1;
-	return hapd->driver->create_transmit_sa(hapd->drv_priv, sa);
-}
-
-
-static int hapd_delete_transmit_sa(void *priv, struct transmit_sa *sa)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->delete_transmit_sa)
-		return -1;
-	return hapd->driver->delete_transmit_sa(hapd->drv_priv, sa);
-}
-
-
-static int hapd_enable_transmit_sa(void *priv, struct transmit_sa *sa)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->enable_transmit_sa)
-		return -1;
-	return hapd->driver->enable_transmit_sa(hapd->drv_priv, sa);
-}
-
-
-static int hapd_disable_transmit_sa(void *priv, struct transmit_sa *sa)
-{
-	struct hostapd_data *hapd = priv;
-
-	if (!hapd->driver->disable_transmit_sa)
-		return -1;
-	return hapd->driver->disable_transmit_sa(hapd->drv_priv, sa);
-}
-
-
-int ieee802_1x_alloc_kay_sm_hapd(struct hostapd_data *hapd,
-				 struct sta_info *sta)
-{
-	struct ieee802_1x_kay_ctx *kay_ctx;
-	struct ieee802_1x_kay *res = NULL;
-	enum macsec_policy policy;
-
-	ieee802_1x_dealloc_kay_sm_hapd(hapd);
-
-	if (!hapd->conf || hapd->conf->macsec_policy == 0)
-		return 0;
-
-	if (hapd->conf->macsec_policy == 1) {
-		if (hapd->conf->macsec_integ_only == 1)
-			policy = SHOULD_SECURE;
-		else
-			policy = SHOULD_ENCRYPT;
-	} else {
-		policy = DO_NOT_SECURE;
-	}
-
-	wpa_printf(MSG_DEBUG, "%s: if_name=%s", __func__, hapd->conf->iface);
-	kay_ctx = os_zalloc(sizeof(*kay_ctx));
-	if (!kay_ctx)
-		return -1;
-
-	kay_ctx->ctx = hapd;
-
-	kay_ctx->macsec_init = hapd_macsec_init;
-	kay_ctx->macsec_deinit = hapd_macsec_deinit;
-	kay_ctx->macsec_get_capability = hapd_macsec_get_capability;
-	kay_ctx->enable_protect_frames = hapd_enable_protect_frames;
-	kay_ctx->enable_encrypt = hapd_enable_encrypt;
-	kay_ctx->set_replay_protect = hapd_set_replay_protect;
-	kay_ctx->set_current_cipher_suite = hapd_set_current_cipher_suite;
-	kay_ctx->enable_controlled_port = hapd_enable_controlled_port;
-	kay_ctx->get_receive_lowest_pn = hapd_get_receive_lowest_pn;
-	kay_ctx->get_transmit_next_pn = hapd_get_transmit_next_pn;
-	kay_ctx->set_transmit_next_pn = hapd_set_transmit_next_pn;
-	kay_ctx->create_receive_sc = hapd_create_receive_sc;
-	kay_ctx->delete_receive_sc = hapd_delete_receive_sc;
-	kay_ctx->create_receive_sa = hapd_create_receive_sa;
-	kay_ctx->delete_receive_sa = hapd_delete_receive_sa;
-	kay_ctx->enable_receive_sa = hapd_enable_receive_sa;
-	kay_ctx->disable_receive_sa = hapd_disable_receive_sa;
-	kay_ctx->create_transmit_sc = hapd_create_transmit_sc;
-	kay_ctx->delete_transmit_sc = hapd_delete_transmit_sc;
-	kay_ctx->create_transmit_sa = hapd_create_transmit_sa;
-	kay_ctx->delete_transmit_sa = hapd_delete_transmit_sa;
-	kay_ctx->enable_transmit_sa = hapd_enable_transmit_sa;
-	kay_ctx->disable_transmit_sa = hapd_disable_transmit_sa;
-
-	res = ieee802_1x_kay_init(kay_ctx, policy,
-				  hapd->conf->macsec_replay_protect,
-				  hapd->conf->macsec_replay_window,
-				  hapd->conf->macsec_port,
-				  hapd->conf->mka_priority, hapd->conf->iface,
-				  hapd->own_addr);
-	/* ieee802_1x_kay_init() frees kay_ctx on failure */
-	if (!res)
-		return -1;
-
-	hapd->kay = res;
-
-	return 0;
-}
-
-
-void ieee802_1x_dealloc_kay_sm_hapd(struct hostapd_data *hapd)
-{
-	if (!hapd->kay)
-		return;
-
-	ieee802_1x_kay_deinit(hapd->kay);
-	hapd->kay = NULL;
-}
-
-
-static int ieee802_1x_auth_get_session_id(struct hostapd_data *hapd,
-					  struct sta_info *sta, u8 *sid,
-					  size_t *len)
-{
-	const u8 *session_id;
-	size_t id_len, need_len;
-
-	session_id = ieee802_1x_get_session_id(sta->eapol_sm, &id_len);
-	if (!session_id) {
-		wpa_printf(MSG_DEBUG,
-			   "MACsec: Failed to get SessionID from EAPOL state machines");
-		return -1;
-	}
-
-	need_len = 1 + 2 * 32 /* random size */;
-	if (need_len > id_len) {
-		wpa_printf(MSG_DEBUG, "EAP Session-Id not long enough");
-		return -1;
-	}
-
-	os_memcpy(sid, session_id, need_len);
-	*len = need_len;
-
-	return 0;
-}
-
-
-static int ieee802_1x_auth_get_msk(struct hostapd_data *hapd,
-				   struct sta_info *sta, u8 *msk, size_t *len)
-{
-	const u8 *key;
-	size_t keylen;
-
-	if (!sta->eapol_sm)
-		return -1;
-
-	key = ieee802_1x_get_key(sta->eapol_sm, &keylen);
-	if (key == NULL) {
-		wpa_printf(MSG_DEBUG,
-			   "MACsec: Failed to get MSK from EAPOL state machines");
-		return -1;
-	}
-	wpa_printf(MSG_DEBUG, "MACsec: Successfully fetched key (len=%lu)",
-		   (unsigned long) keylen);
-	wpa_hexdump_key(MSG_DEBUG, "MSK: ", key, keylen);
-
-	if (keylen > *len)
-		keylen = *len;
-	os_memcpy(msk, key, keylen);
-	*len = keylen;
-
-	return 0;
-}
-
-
-void * ieee802_1x_notify_create_actor_hapd(struct hostapd_data *hapd,
-					   struct sta_info *sta)
-{
-	u8 *sid;
-	size_t sid_len = 128;
-	struct mka_key_name *ckn;
-	struct mka_key *cak;
-	struct mka_key *msk;
-	void *res = NULL;
-
-	if (!hapd->kay || hapd->kay->policy == DO_NOT_SECURE)
-		return NULL;
-
-	wpa_printf(MSG_DEBUG,
-		   "IEEE 802.1X: External notification - Create MKA for "
-		   MACSTR, MAC2STR(sta->addr));
-
-	msk = os_zalloc(sizeof(*msk));
-	sid = os_zalloc(sid_len);
-	ckn = os_zalloc(sizeof(*ckn));
-	cak = os_zalloc(sizeof(*cak));
-	if (!msk || !sid || !ckn || !cak)
-		goto fail;
-
-	msk->len = DEFAULT_KEY_LEN;
-	if (ieee802_1x_auth_get_msk(hapd, sta, msk->key, &msk->len)) {
-		wpa_printf(MSG_ERROR, "IEEE 802.1X: Could not get MSK");
-		goto fail;
-	}
-
-	if (ieee802_1x_auth_get_session_id(hapd, sta, sid, &sid_len))
-	{
-		wpa_printf(MSG_ERROR,
-			   "IEEE 802.1X: Could not get EAP Session Id");
-		goto fail;
-	}
-
-	wpa_hexdump(MSG_DEBUG, "own_addr", hapd->own_addr, ETH_ALEN);
-	wpa_hexdump(MSG_DEBUG, "sta_addr", sta->addr, ETH_ALEN);
-
-	/* Derive CAK from MSK */
-	cak->len = DEFAULT_KEY_LEN;
-	if (ieee802_1x_cak_aes_cmac(msk->key, msk->len, hapd->own_addr,
-				    sta->addr, cak->key, cak->len)) {
-		wpa_printf(MSG_ERROR, "IEEE 802.1X: Deriving CAK failed");
-		goto fail;
-	}
-	wpa_hexdump_key(MSG_DEBUG, "Derived CAK", cak->key, cak->len);
-
-	/* Derive CKN from MSK */
-	ckn->len = DEFAULT_CKN_LEN;
-	if (ieee802_1x_ckn_aes_cmac(msk->key, msk->len, hapd->own_addr,
-				    sta->addr, sid, sid_len, ckn->name)) {
-		wpa_printf(MSG_ERROR, "IEEE 802.1X: Deriving CKN failed");
-		goto fail;
-	}
-	wpa_hexdump(MSG_DEBUG, "Derived CKN", ckn->name, ckn->len);
-
-	res = ieee802_1x_kay_create_mka(hapd->kay, ckn, cak, 0, EAP_EXCHANGE,
-					TRUE);
-
-fail:
-	bin_clear_free(msk, sizeof(*msk));
-	os_free(sid);
-	os_free(ckn);
-	bin_clear_free(cak, sizeof(*cak));
-
-	return res;
-}
-
-
-void * ieee802_1x_create_preshared_mka_hapd(struct hostapd_data *hapd,
-					    struct sta_info *sta)
-{
-	struct mka_key *cak;
-	struct mka_key_name *ckn;
-	void *res = NULL;
-
-	if ((hapd->conf->mka_psk_set & MKA_PSK_SET) != MKA_PSK_SET)
-		goto end;
-
-	ckn = os_zalloc(sizeof(*ckn));
-	if (!ckn)
-		goto end;
-
-	cak = os_zalloc(sizeof(*cak));
-	if (!cak)
-		goto free_ckn;
-
-	if (ieee802_1x_alloc_kay_sm_hapd(hapd, sta) < 0 || !hapd->kay)
-		goto free_cak;
-
-	if (hapd->kay->policy == DO_NOT_SECURE)
-		goto dealloc;
-
-	cak->len = hapd->conf->mka_cak_len;
-	os_memcpy(cak->key, hapd->conf->mka_cak, cak->len);
-
-	ckn->len = hapd->conf->mka_ckn_len;;
-	os_memcpy(ckn->name, hapd->conf->mka_ckn, ckn->len);
-
-	res = ieee802_1x_kay_create_mka(hapd->kay, ckn, cak, 0, PSK, TRUE);
-	if (res)
-		goto free_cak;
-
-dealloc:
-	/* Failed to create MKA */
-	ieee802_1x_dealloc_kay_sm_hapd(hapd);
-free_cak:
-	os_free(cak);
-free_ckn:
-	os_free(ckn);
-end:
-	return res;
-}
diff --git a/src/ap/wpa_auth_kay.h b/src/ap/wpa_auth_kay.h
deleted file mode 100644
index 0dd7e41..0000000
--- a/src/ap/wpa_auth_kay.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * IEEE 802.1X-2010 KaY Interface
- * Copyright (c) 2019, The Linux Foundation
- *
- * This software may be distributed under the terms of the BSD license.
- * See README for more details.
- */
-
-#ifndef WPA_AUTH_KAY_H
-#define WPA_AUTH_KAY_H
-
-#ifdef CONFIG_MACSEC
-
-int ieee802_1x_alloc_kay_sm_hapd(struct hostapd_data *hapd,
-				 struct sta_info *sta);
-void * ieee802_1x_notify_create_actor_hapd(struct hostapd_data *hapd,
-					   struct sta_info *sta);
-void ieee802_1x_dealloc_kay_sm_hapd(struct hostapd_data *hapd);
-
-void * ieee802_1x_create_preshared_mka_hapd(struct hostapd_data *hapd,
-					    struct sta_info *sta);
-
-#else /* CONFIG_MACSEC */
-
-static inline int ieee802_1x_alloc_kay_sm_hapd(struct hostapd_data *hapd,
-					       struct sta_info *sta)
-{
-	return 0;
-}
-
-static inline void *
-ieee802_1x_notify_create_actor_hapd(struct hostapd_data *hapd,
-				    struct sta_info *sta)
-{
-	return NULL;
-}
-
-static inline void ieee802_1x_dealloc_kay_sm_hapd(struct hostapd_data *hapd)
-{
-}
-
-static inline void *
-ieee802_1x_create_preshared_mka_hapd(struct hostapd_data *hapd,
-				     struct sta_info *sta)
-{
-	return NULL;
-}
-
-#endif /* CONFIG_MACSEC */
-
-#endif /* WPA_AUTH_KAY_H */