diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 92688a3..291d4d6 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -1,6 +1,6 @@
 /*
  * Driver interface definition
- * Copyright (c) 2003-2017, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -4228,15 +4228,6 @@
 	 * EVENT_P2P_LO_STOP - Notify that P2P listen offload is stopped
 	 */
 	EVENT_P2P_LO_STOP,
-
-	/**
-	 * EVENT_BEACON_LOSS - Beacon loss detected
-	 *
-	 * This event indicates that no Beacon frames has been received from
-	 * the current AP. This may indicate that the AP is not anymore in
-	 * range.
-	 */
-	EVENT_BEACON_LOSS,
 };
 
 
@@ -4826,12 +4817,9 @@
 	/**
 	 * struct low_ack - Data for EVENT_STATION_LOW_ACK events
 	 * @addr: station address
-	 * @num_packets: Number of packets lost (consecutive packets not
-	 * acknowledged)
 	 */
 	struct low_ack {
 		u8 addr[ETH_ALEN];
-		u32 num_packets;
 	} low_ack;
 
 	/**
diff --git a/src/drivers/driver_common.c b/src/drivers/driver_common.c
index b6bcbca..c7107ba 100644
--- a/src/drivers/driver_common.c
+++ b/src/drivers/driver_common.c
@@ -1,6 +1,6 @@
 /*
  * Common driver-related functions
- * Copyright (c) 2003-2017, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2003-2011, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -81,7 +81,6 @@
 	E2S(ACS_CHANNEL_SELECTED);
 	E2S(DFS_CAC_STARTED);
 	E2S(P2P_LO_STOP);
-	E2S(BEACON_LOSS);
 	}
 
 	return "UNKNOWN";
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 1fb113f..5f0a277 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -29,7 +29,6 @@
 #include "common/qca-vendor-attr.h"
 #include "common/ieee802_11_defs.h"
 #include "common/ieee802_11_common.h"
-#include "common/wpa_common.h"
 #include "l2_packet/l2_packet.h"
 #include "netlink.h"
 #include "linux_defines.h"
@@ -676,7 +675,6 @@
 	struct nl80211_wiphy_data *w;
 	int wiphy_idx, found = 0;
 	struct i802_bss *tmp_bss;
-	u8 channel;
 
 	if (bss->wiphy_data != NULL)
 		return bss->wiphy_data;
@@ -696,35 +694,29 @@
 	dl_list_init(&w->bsss);
 	dl_list_init(&w->drvs);
 
-	/* Beacon frames not supported in IEEE 802.11ad */
-	if (ieee80211_freq_to_chan(bss->freq, &channel) !=
-	    HOSTAPD_MODE_IEEE80211AD) {
-		w->nl_cb = nl_cb_alloc(NL_CB_DEFAULT);
-		if (!w->nl_cb) {
-			os_free(w);
-			return NULL;
-		}
-		nl_cb_set(w->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM,
-			  no_seq_check, NULL);
-		nl_cb_set(w->nl_cb, NL_CB_VALID, NL_CB_CUSTOM,
-			  process_beacon_event, w);
-
-		w->nl_beacons = nl_create_handle(bss->drv->global->nl_cb,
-						 "wiphy beacons");
-		if (w->nl_beacons == NULL) {
-			os_free(w);
-			return NULL;
-		}
-
-		if (nl80211_register_beacons(bss->drv, w)) {
-			nl_destroy_handles(&w->nl_beacons);
-			os_free(w);
-			return NULL;
-		}
-
-		nl80211_register_eloop_read(&w->nl_beacons,
-					    nl80211_recv_beacons, w);
+	w->nl_cb = nl_cb_alloc(NL_CB_DEFAULT);
+	if (!w->nl_cb) {
+		os_free(w);
+		return NULL;
 	}
+	nl_cb_set(w->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL);
+	nl_cb_set(w->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, process_beacon_event,
+		  w);
+
+	w->nl_beacons = nl_create_handle(bss->drv->global->nl_cb,
+					 "wiphy beacons");
+	if (w->nl_beacons == NULL) {
+		os_free(w);
+		return NULL;
+	}
+
+	if (nl80211_register_beacons(bss->drv, w)) {
+		nl_destroy_handles(&w->nl_beacons);
+		os_free(w);
+		return NULL;
+	}
+
+	nl80211_register_eloop_read(&w->nl_beacons, nl80211_recv_beacons, w);
 
 	dl_list_add(&nl80211_wiphys, &w->list);
 
@@ -771,8 +763,7 @@
 	if (!dl_list_empty(&w->bsss))
 		return;
 
-	if (w->nl_beacons)
-		nl80211_destroy_eloop_handle(&w->nl_beacons);
+	nl80211_destroy_eloop_handle(&w->nl_beacons);
 
 	nl_cb_put(w->nl_cb);
 	dl_list_del(&w->list);
@@ -2173,9 +2164,6 @@
 	/* RRM Measurement Report */
 	if (nl80211_register_action_frame(bss, (u8 *) "\x05\x01", 2) < 0)
 		ret = -1;
-	/* RRM Link Measurement Report */
-	if (nl80211_register_action_frame(bss, (u8 *) "\x05\x03", 2) < 0)
-		ret = -1;
 	/* RRM Neighbor Report Request */
 	if (nl80211_register_action_frame(bss, (u8 *) "\x05\x04", 2) < 0)
 		ret = -1;
@@ -2247,6 +2235,9 @@
 	if (nl80211_register_spurious_class3(bss))
 		goto out_err;
 
+	if (nl80211_get_wiphy_data_ap(bss) == NULL)
+		goto out_err;
+
 	nl80211_mgmt_handle_register_eloop(bss);
 	return 0;
 
@@ -2501,14 +2492,12 @@
 }
 
 
-static int wpa_driver_nl80211_del_beacon(struct i802_bss *bss)
+static int wpa_driver_nl80211_del_beacon(struct wpa_driver_nl80211_data *drv)
 {
 	struct nl_msg *msg;
-	struct wpa_driver_nl80211_data *drv = bss->drv;
 
 	wpa_printf(MSG_DEBUG, "nl80211: Remove beacon (ifindex=%d)",
 		   drv->ifindex);
-	nl80211_put_wiphy_data_ap(bss);
 	msg = nl80211_drv_msg(drv, 0, NL80211_CMD_DEL_BEACON);
 	return send_and_recv_msgs(drv, msg, NULL, NULL);
 }
@@ -2561,7 +2550,7 @@
 	nl80211_remove_monitor_interface(drv);
 
 	if (is_ap_interface(drv->nlmode))
-		wpa_driver_nl80211_del_beacon(bss);
+		wpa_driver_nl80211_del_beacon(drv);
 
 	if (drv->eapol_sock >= 0) {
 		eloop_unregister_read_sock(drv->eapol_sock);
@@ -2635,30 +2624,30 @@
 	switch (alg) {
 	case WPA_ALG_WEP:
 		if (key_len == 5)
-			return RSN_CIPHER_SUITE_WEP40;
-		return RSN_CIPHER_SUITE_WEP104;
+			return WLAN_CIPHER_SUITE_WEP40;
+		return WLAN_CIPHER_SUITE_WEP104;
 	case WPA_ALG_TKIP:
-		return RSN_CIPHER_SUITE_TKIP;
+		return WLAN_CIPHER_SUITE_TKIP;
 	case WPA_ALG_CCMP:
-		return RSN_CIPHER_SUITE_CCMP;
+		return WLAN_CIPHER_SUITE_CCMP;
 	case WPA_ALG_GCMP:
-		return RSN_CIPHER_SUITE_GCMP;
+		return WLAN_CIPHER_SUITE_GCMP;
 	case WPA_ALG_CCMP_256:
-		return RSN_CIPHER_SUITE_CCMP_256;
+		return WLAN_CIPHER_SUITE_CCMP_256;
 	case WPA_ALG_GCMP_256:
-		return RSN_CIPHER_SUITE_GCMP_256;
+		return WLAN_CIPHER_SUITE_GCMP_256;
 	case WPA_ALG_IGTK:
-		return RSN_CIPHER_SUITE_AES_128_CMAC;
+		return WLAN_CIPHER_SUITE_AES_CMAC;
 	case WPA_ALG_BIP_GMAC_128:
-		return RSN_CIPHER_SUITE_BIP_GMAC_128;
+		return WLAN_CIPHER_SUITE_BIP_GMAC_128;
 	case WPA_ALG_BIP_GMAC_256:
-		return RSN_CIPHER_SUITE_BIP_GMAC_256;
+		return WLAN_CIPHER_SUITE_BIP_GMAC_256;
 	case WPA_ALG_BIP_CMAC_256:
-		return RSN_CIPHER_SUITE_BIP_CMAC_256;
+		return WLAN_CIPHER_SUITE_BIP_CMAC_256;
 	case WPA_ALG_SMS4:
-		return RSN_CIPHER_SUITE_SMS4;
+		return WLAN_CIPHER_SUITE_SMS4;
 	case WPA_ALG_KRK:
-		return RSN_CIPHER_SUITE_KRK;
+		return WLAN_CIPHER_SUITE_KRK;
 	case WPA_ALG_NONE:
 	case WPA_ALG_PMK:
 		wpa_printf(MSG_ERROR, "nl80211: Unexpected encryption algorithm %d",
@@ -2676,21 +2665,21 @@
 {
 	switch (cipher) {
 	case WPA_CIPHER_CCMP_256:
-		return RSN_CIPHER_SUITE_CCMP_256;
+		return WLAN_CIPHER_SUITE_CCMP_256;
 	case WPA_CIPHER_GCMP_256:
-		return RSN_CIPHER_SUITE_GCMP_256;
+		return WLAN_CIPHER_SUITE_GCMP_256;
 	case WPA_CIPHER_CCMP:
-		return RSN_CIPHER_SUITE_CCMP;
+		return WLAN_CIPHER_SUITE_CCMP;
 	case WPA_CIPHER_GCMP:
-		return RSN_CIPHER_SUITE_GCMP;
+		return WLAN_CIPHER_SUITE_GCMP;
 	case WPA_CIPHER_TKIP:
-		return RSN_CIPHER_SUITE_TKIP;
+		return WLAN_CIPHER_SUITE_TKIP;
 	case WPA_CIPHER_WEP104:
-		return RSN_CIPHER_SUITE_WEP104;
+		return WLAN_CIPHER_SUITE_WEP104;
 	case WPA_CIPHER_WEP40:
-		return RSN_CIPHER_SUITE_WEP40;
+		return WLAN_CIPHER_SUITE_WEP40;
 	case WPA_CIPHER_GTK_NOT_USED:
-		return RSN_CIPHER_SUITE_NO_GROUP_ADDRESSED;
+		return WLAN_CIPHER_SUITE_NO_GROUP_ADDR;
 	}
 
 	return 0;
@@ -2703,19 +2692,19 @@
 	int num_suites = 0;
 
 	if (num_suites < max_suites && ciphers & WPA_CIPHER_CCMP_256)
-		suites[num_suites++] = RSN_CIPHER_SUITE_CCMP_256;
+		suites[num_suites++] = WLAN_CIPHER_SUITE_CCMP_256;
 	if (num_suites < max_suites && ciphers & WPA_CIPHER_GCMP_256)
-		suites[num_suites++] = RSN_CIPHER_SUITE_GCMP_256;
+		suites[num_suites++] = WLAN_CIPHER_SUITE_GCMP_256;
 	if (num_suites < max_suites && ciphers & WPA_CIPHER_CCMP)
-		suites[num_suites++] = RSN_CIPHER_SUITE_CCMP;
+		suites[num_suites++] = WLAN_CIPHER_SUITE_CCMP;
 	if (num_suites < max_suites && ciphers & WPA_CIPHER_GCMP)
-		suites[num_suites++] = RSN_CIPHER_SUITE_GCMP;
+		suites[num_suites++] = WLAN_CIPHER_SUITE_GCMP;
 	if (num_suites < max_suites && ciphers & WPA_CIPHER_TKIP)
-		suites[num_suites++] = RSN_CIPHER_SUITE_TKIP;
+		suites[num_suites++] = WLAN_CIPHER_SUITE_TKIP;
 	if (num_suites < max_suites && ciphers & WPA_CIPHER_WEP104)
-		suites[num_suites++] = RSN_CIPHER_SUITE_WEP104;
+		suites[num_suites++] = WLAN_CIPHER_SUITE_WEP104;
 	if (num_suites < max_suites && ciphers & WPA_CIPHER_WEP40)
-		suites[num_suites++] = RSN_CIPHER_SUITE_WEP40;
+		suites[num_suites++] = WLAN_CIPHER_SUITE_WEP40;
 
 	return num_suites;
 }
@@ -2973,8 +2962,8 @@
 			    params->wep_key[i]) ||
 		    nla_put_u32(msg, NL80211_KEY_CIPHER,
 				params->wep_key_len[i] == 5 ?
-				RSN_CIPHER_SUITE_WEP40 :
-				RSN_CIPHER_SUITE_WEP104) ||
+				WLAN_CIPHER_SUITE_WEP40 :
+				WLAN_CIPHER_SUITE_WEP104) ||
 		    nla_put_u8(msg, NL80211_KEY_IDX, i) ||
 		    (i == params->wep_tx_keyidx &&
 		     nla_put_flag(msg, NL80211_KEY_DEFAULT)))
@@ -3786,8 +3775,6 @@
 		   beacon_set);
 	if (beacon_set)
 		cmd = NL80211_CMD_SET_BEACON;
-	else if (!nl80211_get_wiphy_data_ap(bss))
-		return -ENOBUFS;
 
 	wpa_hexdump(MSG_DEBUG, "nl80211: Beacon head",
 		    params->head, params->head_len);
@@ -3869,9 +3856,9 @@
 		   params->key_mgmt_suites);
 	num_suites = 0;
 	if (params->key_mgmt_suites & WPA_KEY_MGMT_IEEE8021X)
-		suites[num_suites++] = RSN_AUTH_KEY_MGMT_UNSPEC_802_1X;
+		suites[num_suites++] = WLAN_AKM_SUITE_8021X;
 	if (params->key_mgmt_suites & WPA_KEY_MGMT_PSK)
-		suites[num_suites++] = RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X;
+		suites[num_suites++] = WLAN_AKM_SUITE_PSK;
 	if (num_suites &&
 	    nla_put(msg, NL80211_ATTR_AKM_SUITES, num_suites * sizeof(u32),
 		    suites))
@@ -4719,7 +4706,6 @@
 	else
 		nl80211_mgmt_unsubscribe(bss, "AP teardown");
 
-	nl80211_put_wiphy_data_ap(bss);
 	bss->beacon_set = 0;
 }
 
@@ -5068,9 +5054,6 @@
 				  struct wpa_driver_associate_params *params,
 				  struct nl_msg *msg)
 {
-	if (nla_put_flag(msg, NL80211_ATTR_IFACE_SOCKET_OWNER))
-		return -1;
-
 	if (params->bssid) {
 		wpa_printf(MSG_DEBUG, "  * bssid=" MACSTR,
 			   MAC2STR(params->bssid));
@@ -5172,39 +5155,39 @@
 	    params->key_mgmt_suite == WPA_KEY_MGMT_PSK_SHA256 ||
 	    params->key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_SUITE_B ||
 	    params->key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_SUITE_B_192) {
-		int mgmt = RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X;
+		int mgmt = WLAN_AKM_SUITE_PSK;
 
 		switch (params->key_mgmt_suite) {
 		case WPA_KEY_MGMT_CCKM:
-			mgmt = RSN_AUTH_KEY_MGMT_CCKM;
+			mgmt = WLAN_AKM_SUITE_CCKM;
 			break;
 		case WPA_KEY_MGMT_IEEE8021X:
-			mgmt = RSN_AUTH_KEY_MGMT_UNSPEC_802_1X;
+			mgmt = WLAN_AKM_SUITE_8021X;
 			break;
 		case WPA_KEY_MGMT_FT_IEEE8021X:
-			mgmt = RSN_AUTH_KEY_MGMT_FT_802_1X;
+			mgmt = WLAN_AKM_SUITE_FT_8021X;
 			break;
 		case WPA_KEY_MGMT_FT_PSK:
-			mgmt = RSN_AUTH_KEY_MGMT_FT_PSK;
+			mgmt = WLAN_AKM_SUITE_FT_PSK;
 			break;
 		case WPA_KEY_MGMT_IEEE8021X_SHA256:
-			mgmt = RSN_AUTH_KEY_MGMT_802_1X_SHA256;
+			mgmt = WLAN_AKM_SUITE_8021X_SHA256;
 			break;
 		case WPA_KEY_MGMT_PSK_SHA256:
-			mgmt = RSN_AUTH_KEY_MGMT_PSK_SHA256;
+			mgmt = WLAN_AKM_SUITE_PSK_SHA256;
 			break;
 		case WPA_KEY_MGMT_OSEN:
-			mgmt = RSN_AUTH_KEY_MGMT_OSEN;
+			mgmt = WLAN_AKM_SUITE_OSEN;
 			break;
 		case WPA_KEY_MGMT_IEEE8021X_SUITE_B:
-			mgmt = RSN_AUTH_KEY_MGMT_802_1X_SUITE_B;
+			mgmt = WLAN_AKM_SUITE_8021X_SUITE_B;
 			break;
 		case WPA_KEY_MGMT_IEEE8021X_SUITE_B_192:
-			mgmt = RSN_AUTH_KEY_MGMT_802_1X_SUITE_B_192;
+			mgmt = WLAN_AKM_SUITE_8021X_SUITE_B_192;
 			break;
 		case WPA_KEY_MGMT_PSK:
 		default:
-			mgmt = RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X;
+			mgmt = WLAN_AKM_SUITE_PSK;
 			break;
 		}
 		wpa_printf(MSG_DEBUG, "  * akm=0x%x", mgmt);
@@ -6756,7 +6739,7 @@
 		wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context");
 		nl80211_teardown_ap(bss);
 		if (!bss->added_if && !drv->first_bss->next)
-			wpa_driver_nl80211_del_beacon(bss);
+			wpa_driver_nl80211_del_beacon(drv);
 		nl80211_destroy_bss(bss);
 		if (!bss->added_if)
 			i802_set_iface_flags(bss, 0);
@@ -7118,7 +7101,7 @@
 	struct wpa_driver_nl80211_data *drv = bss->drv;
 	if (!is_ap_interface(drv->nlmode))
 		return -1;
-	wpa_driver_nl80211_del_beacon(bss);
+	wpa_driver_nl80211_del_beacon(drv);
 	bss->beacon_set = 0;
 
 	/*
@@ -7138,7 +7121,7 @@
 	struct wpa_driver_nl80211_data *drv = bss->drv;
 	if (!is_ap_interface(drv->nlmode))
 		return -1;
-	wpa_driver_nl80211_del_beacon(bss);
+	wpa_driver_nl80211_del_beacon(drv);
 	bss->beacon_set = 0;
 	return 0;
 }
@@ -7827,7 +7810,6 @@
 	struct wpa_driver_nl80211_data *drv = bss->drv;
 	struct nl_msg *msg;
 	enum nl80211_tdls_operation nl80211_oper;
-	int res;
 
 	if (!(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_SUPPORT))
 		return -EOPNOTSUPP;
@@ -7863,11 +7845,7 @@
 		return -ENOBUFS;
 	}
 
-	res = send_and_recv_msgs(drv, msg, NULL, NULL);
-	wpa_printf(MSG_DEBUG, "nl80211: TDLS_OPER: oper=%d mac=" MACSTR
-		   " --> res=%d (%s)", nl80211_oper, MAC2STR(peer), res,
-		   strerror(-res));
-	return res;
+	return send_and_recv_msgs(drv, msg, NULL, NULL);
 }
 
 
diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
index 3d85316..cad3970 100644
--- a/src/drivers/driver_nl80211_capa.c
+++ b/src/drivers/driver_nl80211_capa.c
@@ -12,8 +12,8 @@
 #include <netlink/genl/genl.h>
 
 #include "utils/common.h"
+#include "common/ieee802_11_defs.h"
 #include "common/ieee802_11_common.h"
-#include "common/wpa_common.h"
 #include "common/qca-vendor.h"
 #include "common/qca-vendor-attr.h"
 #include "driver_nl80211.h"
@@ -266,40 +266,40 @@
 			   c >> 24, (c >> 16) & 0xff,
 			   (c >> 8) & 0xff, c & 0xff);
 		switch (c) {
-		case RSN_CIPHER_SUITE_CCMP_256:
+		case WLAN_CIPHER_SUITE_CCMP_256:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_CCMP_256;
 			break;
-		case RSN_CIPHER_SUITE_GCMP_256:
+		case WLAN_CIPHER_SUITE_GCMP_256:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_GCMP_256;
 			break;
-		case RSN_CIPHER_SUITE_CCMP:
+		case WLAN_CIPHER_SUITE_CCMP:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_CCMP;
 			break;
-		case RSN_CIPHER_SUITE_GCMP:
+		case WLAN_CIPHER_SUITE_GCMP:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_GCMP;
 			break;
-		case RSN_CIPHER_SUITE_TKIP:
+		case WLAN_CIPHER_SUITE_TKIP:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_TKIP;
 			break;
-		case RSN_CIPHER_SUITE_WEP104:
+		case WLAN_CIPHER_SUITE_WEP104:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_WEP104;
 			break;
-		case RSN_CIPHER_SUITE_WEP40:
+		case WLAN_CIPHER_SUITE_WEP40:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_WEP40;
 			break;
-		case RSN_CIPHER_SUITE_AES_128_CMAC:
+		case WLAN_CIPHER_SUITE_AES_CMAC:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_BIP;
 			break;
-		case RSN_CIPHER_SUITE_BIP_GMAC_128:
+		case WLAN_CIPHER_SUITE_BIP_GMAC_128:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_BIP_GMAC_128;
 			break;
-		case RSN_CIPHER_SUITE_BIP_GMAC_256:
+		case WLAN_CIPHER_SUITE_BIP_GMAC_256:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_BIP_GMAC_256;
 			break;
-		case RSN_CIPHER_SUITE_BIP_CMAC_256:
+		case WLAN_CIPHER_SUITE_BIP_CMAC_256:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_BIP_CMAC_256;
 			break;
-		case RSN_CIPHER_SUITE_NO_GROUP_ADDRESSED:
+		case WLAN_CIPHER_SUITE_NO_GROUP_ADDR:
 			info->capa->enc |= WPA_DRIVER_CAPA_ENC_GTK_NOT_USED;
 			break;
 		}
diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c
index c18fc22..de539b1 100644
--- a/src/drivers/driver_nl80211_event.c
+++ b/src/drivers/driver_nl80211_event.c
@@ -1,6 +1,6 @@
 /*
  * Driver interaction with Linux nl80211/cfg80211 - Event processing
- * Copyright (c) 2002-2017, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2002-2014, Jouni Malinen <j@w1.fi>
  * Copyright (c) 2007, Johannes Berg <johannes@sipsolutions.net>
  * Copyright (c) 2009-2010, Atheros Communications
  *
@@ -1132,10 +1132,6 @@
 		[NL80211_ATTR_CQM_RSSI_HYST] = { .type = NLA_U8 },
 		[NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT] = { .type = NLA_U32 },
 		[NL80211_ATTR_CQM_PKT_LOSS_EVENT] = { .type = NLA_U32 },
-		[NL80211_ATTR_CQM_TXE_RATE] = { .type = NLA_U32 },
-		[NL80211_ATTR_CQM_TXE_PKTS] = { .type = NLA_U32 },
-		[NL80211_ATTR_CQM_TXE_INTVL] = { .type = NLA_U32 },
-		[NL80211_ATTR_CQM_BEACON_LOSS_EVENT] = { .type = NLA_FLAG },
 	};
 	struct nlattr *cqm[NL80211_ATTR_CQM_MAX + 1];
 	enum nl80211_cqm_rssi_threshold_event event;
@@ -1157,39 +1153,12 @@
 			return;
 		os_memcpy(ed.low_ack.addr, nla_data(tb[NL80211_ATTR_MAC]),
 			  ETH_ALEN);
-		ed.low_ack.num_packets =
-			nla_get_u32(cqm[NL80211_ATTR_CQM_PKT_LOSS_EVENT]);
-		wpa_printf(MSG_DEBUG, "nl80211: Packet loss event for " MACSTR
-			   " (num_packets %u)",
-			   MAC2STR(ed.low_ack.addr), ed.low_ack.num_packets);
 		wpa_supplicant_event(drv->ctx, EVENT_STATION_LOW_ACK, &ed);
 		return;
 	}
 
-	if (cqm[NL80211_ATTR_CQM_BEACON_LOSS_EVENT]) {
-		wpa_printf(MSG_DEBUG, "nl80211: Beacon loss event");
-		wpa_supplicant_event(drv->ctx, EVENT_BEACON_LOSS, NULL);
+	if (cqm[NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT] == NULL)
 		return;
-	}
-
-	if (cqm[NL80211_ATTR_CQM_TXE_RATE] &&
-	    cqm[NL80211_ATTR_CQM_TXE_PKTS] &&
-	    cqm[NL80211_ATTR_CQM_TXE_INTVL] &&
-	    cqm[NL80211_ATTR_MAC]) {
-		wpa_printf(MSG_DEBUG, "nl80211: CQM TXE event for " MACSTR
-			   " (rate: %u pkts: %u interval: %u)",
-			   MAC2STR((u8 *) nla_data(cqm[NL80211_ATTR_MAC])),
-			   nla_get_u32(cqm[NL80211_ATTR_CQM_TXE_RATE]),
-			   nla_get_u32(cqm[NL80211_ATTR_CQM_TXE_PKTS]),
-			   nla_get_u32(cqm[NL80211_ATTR_CQM_TXE_INTVL]));
-		return;
-	}
-
-	if (cqm[NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT] == NULL) {
-		wpa_printf(MSG_DEBUG,
-			   "nl80211: Not a CQM RSSI threshold event");
-		return;
-	}
 	event = nla_get_u32(cqm[NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT]);
 
 	if (event == NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH) {
@@ -1200,12 +1169,8 @@
 		wpa_printf(MSG_DEBUG, "nl80211: Connection quality monitor "
 			   "event: RSSI low");
 		ed.signal_change.above_threshold = 0;
-	} else {
-		wpa_printf(MSG_DEBUG,
-			   "nl80211: Unknown CQM RSSI threshold event: %d",
-			   event);
+	} else
 		return;
-	}
 
 	res = nl80211_get_link_signal(drv, &sig);
 	if (res == 0) {
diff --git a/src/drivers/driver_nl80211_scan.c b/src/drivers/driver_nl80211_scan.c
index b577531..7dcfae2 100644
--- a/src/drivers/driver_nl80211_scan.c
+++ b/src/drivers/driver_nl80211_scan.c
@@ -156,8 +156,10 @@
 	wpa_printf(MSG_DEBUG, "nl80211: Scan timeout - try to abort it");
 #ifdef CONFIG_DRIVER_NL80211_QCA
 	if (drv->vendor_scan_cookie &&
-	    nl80211_abort_vendor_scan(drv, drv->vendor_scan_cookie) == 0)
+	    nl80211_abort_vendor_scan(drv, drv->vendor_scan_cookie) == 0) {
+		drv->vendor_scan_cookie = 0;
 		return;
+	}
 #endif /* CONFIG_DRIVER_NL80211_QCA */
 	if (!drv->vendor_scan_cookie &&
 	    nl80211_abort_scan(drv->first_bss) == 0)
diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
index 458d458..791cd5d 100644
--- a/src/drivers/driver_wext.c
+++ b/src/drivers/driver_wext.c
@@ -1042,7 +1042,6 @@
 	wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_ENABLED, 0);
 
 	eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv, drv->ctx);
-	eloop_cancel_timeout(wpa_driver_wext_send_rfkill, drv, drv->ctx);
 
 	/*
 	 * Clear possibly configured driver parameters in order to make it
diff --git a/src/drivers/nl80211_copy.h b/src/drivers/nl80211_copy.h
index 174f4b3..259c9c7 100644
--- a/src/drivers/nl80211_copy.h
+++ b/src/drivers/nl80211_copy.h
@@ -323,7 +323,7 @@
  * @NL80211_CMD_GET_SCAN: get scan results
  * @NL80211_CMD_TRIGGER_SCAN: trigger a new scan with the given parameters
  *	%NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the
- *	probe requests at CCK rate or not. %NL80211_ATTR_BSSID can be used to
+ *	probe requests at CCK rate or not. %NL80211_ATTR_MAC can be used to
  *	specify a BSSID to scan for; if not included, the wildcard BSSID will
  *	be used.
  * @NL80211_CMD_NEW_SCAN_RESULTS: scan notification (as a reply to
@@ -1820,8 +1820,6 @@
  *	and remove functions. NAN notifications will be sent in unicast to that
  *	socket. Without this attribute, any socket can add functions and the
  *	notifications will be sent to the %NL80211_MCGRP_NAN multicast group.
- *	If set during %NL80211_CMD_ASSOCIATE or %NL80211_CMD_CONNECT the
- *	station will deauthenticate when the socket is closed.
  *
  * @NL80211_ATTR_TDLS_INITIATOR: flag attribute indicating the current end is
  *	the TDLS link initiator.
@@ -1979,9 +1977,6 @@
  * @NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED: Indicates whether or not multicast
  *	packets should be send out as unicast to all stations (flag attribute).
  *
- * @NL80211_ATTR_BSSID: The BSSID of the AP. Note that %NL80211_ATTR_MAC is also
- *	used in various commands/events for specifying the BSSID.
- *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2386,8 +2381,6 @@
 
 	NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED,
 
-	NL80211_ATTR_BSSID,
-
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -4966,9 +4959,8 @@
 /**
  * struct nl80211_bss_select_rssi_adjust - RSSI adjustment parameters.
  *
- * @band: band of BSS that must match for RSSI value adjustment. The value
- *	of this field is according to &enum nl80211_band.
- * @delta: value used to adjust the RSSI value of matching BSS in dB.
+ * @band: band of BSS that must match for RSSI value adjustment.
+ * @delta: value used to adjust the RSSI value of matching BSS.
  */
 struct nl80211_bss_select_rssi_adjust {
 	__u8 band;
