diff --git a/hostapd_wave/Makefile b/hostapd_wave/Makefile
index 0bffdf046cc3349e1d361fc2d2c960661bda2ee5..1bc0e16cb645a6c9057f7f97a7e35507319708d5 100644
--- a/hostapd_wave/Makefile
+++ b/hostapd_wave/Makefile
@@ -42,6 +42,8 @@ endif
 PKG_BUILD_DIR_HAPD:=$(PKG_BUILD_DIR)/hostapd
 PKG_BUILD_DIR_WPAS:=$(PKG_BUILD_DIR)/wpa_supplicant
 
+PKG_BUILD_DEPENDS:=libopenssl libnl librt PACKAGE_hostapd_2_3_wave_5_1_1:hostapd_2_3_wave_5_1_1
+
 PKG_CONFIG_DEPENDS:=\
 	CONFIG_WIRELESS_STA
 
diff --git a/hostapd_wave/patches/0322-hostapd-add-radar-detected-event.patch b/hostapd_wave/patches/0322-hostapd-add-radar-detected-event.patch
index e48623ef4e215c39a2d57d5c5424d88257fa0f9f..a8b926d5b5b90da4b768e24b9020812168989665 100644
--- a/hostapd_wave/patches/0322-hostapd-add-radar-detected-event.patch
+++ b/hostapd_wave/patches/0322-hostapd-add-radar-detected-event.patch
@@ -1,6 +1,22 @@
+From 73893ce48a45769a8ed5cd0e9a1741ca0c5182a7 Mon Sep 17 00:00:00 2001
+From: vulsmike <mikelis.vuls@intel.com>
+Date: Fri, 23 Nov 2018 15:23:03 +0200
+Subject: [PATCH] hostapd-add-radar-detected-event
+
+---
+ src/ap/drv_callbacks.c             | 19 +++++++++++++++++++
+ src/common/ltq-vendor.h            |  1 +
+ src/common/wpa_ctrl.h              |  1 +
+ src/drivers/driver.h               | 20 ++++++++++++++++++++
+ src/drivers/driver_common.c        |  1 +
+ src/drivers/driver_nl80211_event.c | 16 ++++++++++++++++
+ 6 files changed, 58 insertions(+)
+
+diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c
+index a355da0..ce2b220 100644
 --- a/src/ap/drv_callbacks.c
 +++ b/src/ap/drv_callbacks.c
-@@ -1443,6 +1443,22 @@ static void hostapd_event_ltq_wds_discon
+@@ -1441,6 +1441,22 @@ static void hostapd_event_ltq_wds_disconnect_rx(struct hostapd_data *hapd,
  	hostapd_notif_disassoc(hapd, wds_sta->mac_addr);
  }
  
@@ -23,7 +39,7 @@
  struct hostapd_channel_data * hostapd_get_mode_channel(
  	struct hostapd_iface *iface, unsigned int freq)
  {
-@@ -1742,6 +1758,9 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -1740,6 +1756,9 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
  			data->ltq_wds_sta_info_data.data,
  			data->ltq_wds_sta_info_data.data_len);
  		break;
@@ -33,9 +49,35 @@
  	case EVENT_ASSOC:
  		if (!data)
  			return;
+diff --git a/src/common/ltq-vendor.h b/src/common/ltq-vendor.h
+index 2bad35b..d310c07 100644
+--- a/src/common/ltq-vendor.h
++++ b/src/common/ltq-vendor.h
+@@ -59,6 +59,7 @@ enum ltq_nl80211_vendor_events {
+ 	LTQ_NL80211_VENDOR_EVENT_WDS_CONNECT = 4,
+ 	LTQ_NL80211_VENDOR_EVENT_WDS_DISCONNECT = 5,
+ 	LTQ_NL80211_VENDOR_EVENT_CSA_RECEIVED = 6,
++	LTQ_NL80211_VENDOR_EVENT_RADAR_DETECTED = 7,
+ };
+ 
+ #endif /* LTQ_VENDOR_H */
+diff --git a/src/common/wpa_ctrl.h b/src/common/wpa_ctrl.h
+index 5becfec..9260b0a 100644
+--- a/src/common/wpa_ctrl.h
++++ b/src/common/wpa_ctrl.h
+@@ -318,6 +318,7 @@ extern "C" {
+ #define HOSTAPD_DISCONNECTED "HOSTAPD-DISCONNECTED"
+ #define UNCONNECTED_STA_RSSI "UNCONNECTED-STA-RSSI "
+ #define CSA_RECEIVED "CSA-RECEIVED "
++#define LTQ_RADAR "LTQ-DFS-RADAR-DETECTED "
+ 
+ #define AP_STA_WNM_NOTIF "AP-STA-WNM-NOTIF "
+ 
+diff --git a/src/drivers/driver.h b/src/drivers/driver.h
+index 2cee364..a7d654e 100644
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -4494,6 +4494,7 @@ enum wpa_event_type {
+@@ -4457,6 +4457,7 @@ enum wpa_event_type {
  	EVENT_LTQ_WDS_CONNECT,
  	EVENT_LTQ_WDS_DISCONNECT,
  	EVENT_LTQ_CSA_RECEIVED,
@@ -43,7 +85,7 @@
  
  	/**
  	 * EVENT_SIGNAL_CHANGE - Indicate change in signal strength
-@@ -5311,6 +5312,17 @@ union wpa_event_data {
+@@ -5274,6 +5275,17 @@ union wpa_event_data {
  	} ltq_csa_received;
  
  	/**
@@ -61,7 +103,7 @@
  	 * signal_change - Data for EVENT_SIGNAL_CHANGE events
  	 */
  	struct wpa_signal_info signal_change;
-@@ -5634,6 +5646,14 @@ static inline void drv_event_ltq_csa_rec
+@@ -5597,6 +5609,14 @@ static inline void drv_event_ltq_csa_received (void *ctx, const u8 *data, size_t
    wpa_supplicant_event(ctx, EVENT_LTQ_CSA_RECEIVED, &event);
  }
  
@@ -76,9 +118,23 @@
  /* driver_common.c */
  void wpa_scan_results_free(struct wpa_scan_results *res);
  
+diff --git a/src/drivers/driver_common.c b/src/drivers/driver_common.c
+index 047715c..840f460 100644
+--- a/src/drivers/driver_common.c
++++ b/src/drivers/driver_common.c
+@@ -59,6 +59,7 @@ const char * event_to_string(enum wpa_event_type event)
+ 	E2S(LTQ_WDS_CONNECT);
+ 	E2S(LTQ_WDS_DISCONNECT);
+ 	E2S(LTQ_CSA_RECEIVED);
++	E2S(LTQ_RADAR);
+ 	E2S(SIGNAL_CHANGE);
+ 	E2S(INTERFACE_ENABLED);
+ 	E2S(INTERFACE_DISABLED);
+diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c
+index 6d530a4..fb0880d 100644
 --- a/src/drivers/driver_nl80211_event.c
 +++ b/src/drivers/driver_nl80211_event.c
-@@ -2027,6 +2027,19 @@ static void ltq_nl80211_handle_csa_recei
+@@ -2027,6 +2027,19 @@ static void ltq_nl80211_handle_csa_received (struct wpa_driver_nl80211_data *drv
    drv_event_ltq_csa_received(drv->ctx, data, len);
  }
  
@@ -98,7 +154,7 @@
  static void nl80211_vendor_event_ltq(struct wpa_driver_nl80211_data *drv,
  										u32 subcmd, u8 *data, size_t len)
  {
-@@ -2052,6 +2065,9 @@ static void nl80211_vendor_event_ltq(str
+@@ -2052,6 +2065,9 @@ static void nl80211_vendor_event_ltq(struct wpa_driver_nl80211_data *drv,
      case LTQ_NL80211_VENDOR_EVENT_CSA_RECEIVED:
        ltq_nl80211_handle_csa_received(drv, data, len);
        break;
@@ -108,33 +164,6 @@
  		default:
  			wpa_printf(MSG_DEBUG, "nl80211: Ignore unsupported LTQ vendor event %u", subcmd);
  			break;
---- a/src/common/ltq-vendor.h
-+++ b/src/common/ltq-vendor.h
-@@ -61,6 +61,7 @@ enum ltq_nl80211_vendor_events {
- 	LTQ_NL80211_VENDOR_EVENT_WDS_CONNECT = 4,
- 	LTQ_NL80211_VENDOR_EVENT_WDS_DISCONNECT = 5,
- 	LTQ_NL80211_VENDOR_EVENT_CSA_RECEIVED = 6,
-+	LTQ_NL80211_VENDOR_EVENT_RADAR_DETECTED = 7,
- };
- 
- #endif /* LTQ_VENDOR_H */
---- a/src/common/wpa_ctrl.h
-+++ b/src/common/wpa_ctrl.h
-@@ -320,6 +320,7 @@ extern "C" {
- #define HOSTAPD_DISCONNECTED "HOSTAPD-DISCONNECTED"
- #define UNCONNECTED_STA_RSSI "UNCONNECTED-STA-RSSI "
- #define CSA_RECEIVED "CSA-RECEIVED "
-+#define LTQ_RADAR "LTQ-DFS-RADAR-DETECTED "
- 
- #define AP_STA_WNM_NOTIF "AP-STA-WNM-NOTIF "
- 
---- a/src/drivers/driver_common.c
-+++ b/src/drivers/driver_common.c
-@@ -59,6 +59,7 @@ const char * event_to_string(enum wpa_ev
- 	E2S(LTQ_WDS_CONNECT);
- 	E2S(LTQ_WDS_DISCONNECT);
- 	E2S(LTQ_CSA_RECEIVED);
-+	E2S(LTQ_RADAR);
- 	E2S(SIGNAL_CHANGE);
- 	E2S(INTERFACE_ENABLED);
- 	E2S(INTERFACE_DISABLED);
+-- 
+2.10.1
+
diff --git a/hostapd_wave/patches/0413-hostapd-try-restart-if-init-failed.patch b/hostapd_wave/patches/0413-hostapd-try-restart-if-init-failed.patch
new file mode 100644
index 0000000000000000000000000000000000000000..251a78c53c7d0ba1dd9e22db141cb25cc26e8317
--- /dev/null
+++ b/hostapd_wave/patches/0413-hostapd-try-restart-if-init-failed.patch
@@ -0,0 +1,95 @@
+From 3b94687bd48aa863a1882a4ffc66af1003282ba0 Mon Sep 17 00:00:00 2001
+From: vulsmike <mikelis.vuls@intel.com>
+Date: Fri, 23 Nov 2018 15:23:03 +0200
+Subject: [PATCH] hostapd-try-restart-if-init-failed
+
+---
+ src/ap/dfs.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 49 insertions(+), 9 deletions(-)
+
+diff --git a/src/ap/dfs.c b/src/ap/dfs.c
+index 7bbd20f..0df3cfb 100644
+--- a/src/ap/dfs.c
++++ b/src/ap/dfs.c
+@@ -10,6 +10,7 @@
+ #include "utils/includes.h"
+ 
+ #include "utils/common.h"
++#include "utils/eloop.h"
+ #include "common/ieee802_11_defs.h"
+ #include "common/hw_features_common.h"
+ #include "common/wpa_ctrl.h"
+@@ -823,6 +824,37 @@ int chan_width_enum_to_freq(enum chan_width width)
+ 	}
+ }
+ 
++static void hostapd_cac_finish_iface_restart (struct hostapd_iface *iface)
++{
++	struct hostapd_channel_data *channel = NULL;
++	int secondary_channel;
++	u8 vht_oper_centr_freq_seg0_idx;
++	u8 vht_oper_centr_freq_seg1_idx;
++
++	channel = dfs_get_valid_channel(iface, &secondary_channel,
++					&vht_oper_centr_freq_seg0_idx,
++					&vht_oper_centr_freq_seg1_idx,
++					1);
++
++	if (!channel) {
++		wpa_printf(MSG_ERROR, "No Valid non-DFS channel available");
++		eloop_terminate();
++		return;
++	}
++
++	iface->freq = channel->freq;
++	iface->conf->channel = channel->chan;
++	iface->conf->secondary_channel = secondary_channel;
++	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);
++	return;
++}
++
+ int hostapd_dfs_complete_cac(struct hostapd_iface *iface, int success, int freq,
+ 			     int ht_enabled, int chan_offset, int chan_width,
+ 			     int cf1, int cf2)
+@@ -896,15 +928,23 @@ int hostapd_dfs_complete_cac(struct hostapd_iface *iface, int success, int freq,
+         cf2);
+ #endif
+ 			if (iface->cac_started &&
+-			  freq_params.freq == freq &&
+-			  freq_params.bandwidth == chan_width_enum_to_freq(chan_width) &&
+-			  freq_params.center_freq1 == cf1 &&
+-			  freq_params.center_freq2 == cf2) {
+-			    iface->cac_started = 0;
+-			    if (!iface->block_tx) {
+-			      printf("CAC hostapd_setup_interface_complete\n");
+-			      hostapd_setup_interface_complete(iface, 0);
+-			    }
++			    freq_params.freq == freq &&
++			    freq_params.bandwidth == chan_width_enum_to_freq(chan_width) &&
++			    freq_params.center_freq1 == cf1 &&
++			    freq_params.center_freq2 == cf2) {
++				iface->cac_started = 0;
++				if (!iface->block_tx) {
++					int res;
++					size_t tmp_terminate_on_error = iface->interfaces->terminate_on_error;
++					/* Implemented to catch one known rare racing, when radar detected immediately
++					 * after CAC Finished. (beacon set failed) In this case try to restart iface internally */
++					iface->interfaces->terminate_on_error = 0;
++					res = hostapd_setup_interface_complete(iface, 0);
++					iface->interfaces->terminate_on_error = tmp_terminate_on_error;
++					if (res)
++						hostapd_cac_finish_iface_restart(iface);
++					
++				}
+ 			}
+ 		}
+ 	}
+-- 
+2.10.1
+
diff --git a/hostapd_wave/patches/0414-WLANRTSYS-6509.patch b/hostapd_wave/patches/0414-WLANRTSYS-6509.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2cb4aa508ece67b40debac04cfcb66d6ce256f4e
--- /dev/null
+++ b/hostapd_wave/patches/0414-WLANRTSYS-6509.patch
@@ -0,0 +1,33 @@
+From fb0a8d26944e090f188bf8487f89e1bc73039c71 Mon Sep 17 00:00:00 2001
+From: pukitis <martins.pukitis@intel.com>
+Date: Tue, 27 Nov 2018 15:27:00 +0200
+Subject: [PATCH] WLANRTSYS-6509
+
+---
+ src/ap/hostapd.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
+index c2d00d8..4d85978 100644
+--- a/src/ap/hostapd.c
++++ b/src/ap/hostapd.c
+@@ -1137,8 +1137,6 @@ static int hostapd_setup_bss(struct hostapd_data *hapd, int first)
+ 	}
+ #endif /* CONFIG_NO_RADIUS */
+ 
+-	dl_list_init(&hapd->multi_ap_blacklist);
+-
+ 	if (hostapd_acl_init(hapd)) {
+ 		wpa_printf(MSG_ERROR, "ACL initialization failed.");
+ 		return -1;
+@@ -2198,6 +2196,7 @@ hostapd_alloc_bss_data(struct hostapd_iface *hapd_iface,
+ 	hapd->ctrl_sock = -1;
+ 	dl_list_init(&hapd->ctrl_dst);
+ 	dl_list_init(&hapd->nr_db);
++	dl_list_init(&hapd->multi_ap_blacklist);
+ 
+ 	return hapd;
+ }
+-- 
+2.10.1
+
diff --git a/hostapd_wave/patches/0415-hostapd-remove-csa-to-40-intoler-sta.patch b/hostapd_wave/patches/0415-hostapd-remove-csa-to-40-intoler-sta.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4556913583627cbf5d95ed3a9a3cb9ea31a2c2b1
--- /dev/null
+++ b/hostapd_wave/patches/0415-hostapd-remove-csa-to-40-intoler-sta.patch
@@ -0,0 +1,395 @@
+From 07c06b460a9ee9d03f54b5fd67f9f1b8a007da3b Mon Sep 17 00:00:00 2001
+From: Gal Savion <Gal.Savion@intel.com>
+Date: Wed, 12 Dec 2018 13:38:19 +0200
+Subject: [PATCH] hostapd-remove-csa-to-40-intoler-sta
+
+---
+ src/ap/acs.c           |  26 +-------
+ src/ap/acs.h           |   2 -
+ src/ap/hostapd.c       |   2 -
+ src/ap/hostapd.h       |   1 -
+ src/ap/hw_features.c   |   7 ---
+ src/ap/ieee802_11.h    |   3 -
+ src/ap/ieee802_11_ht.c | 166 ++++---------------------------------------------
+ src/drivers/driver.h   |   2 -
+ 8 files changed, 14 insertions(+), 195 deletions(-)
+
+diff --git a/src/ap/acs.c b/src/ap/acs.c
+index c0e4212..4cf0567 100644
+--- a/src/ap/acs.c
++++ b/src/ap/acs.c
+@@ -2500,11 +2500,9 @@ void acs_print_info_legend(FILE *fp)
+ 
+ const char *sw_reasons[] = {
+   "initial scan",
+-  "intolerant",
+   "radar",
+   "background scan",
+   "periodic update",
+-  "intolerant expired"
+ };
+ 
+ 
+@@ -2535,7 +2533,7 @@ int acs_set_new_chan_if_ok(struct hostapd_iface *iface, int min_rank_cand_idx, i
+   /* got previous, now check threshold */
+   if ((mode->selected_candidate < 0) || /* if previously selected candidate is not known - switch */
+       (mode->candidates[min_rank_cand_idx].width > actual_width) || /* If previously selected candidates width is less */
+-      (switch_reason == SWR_INTOLERANT) || (switch_reason == SWR_RADAR) || (switch_reason == SWR_INITIAL) || /* in these cases, switch regardless of threshold */
++      (switch_reason == SWR_RADAR) || (switch_reason == SWR_INITIAL) || /* in these cases, switch regardless of threshold */
+       (mode->candidates[mode->selected_candidate].rank == -1) || /* If previously selected candidates rank is now invalid, switch regardless of threshold*/
+       ((mode->selected_candidate != min_rank_cand_idx) &&
+        (mode->candidates[min_rank_cand_idx].rank < mode->candidates[mode->selected_candidate].rank * (100 - iface->conf->acs_switch_thresh) / 100)))
+@@ -3152,28 +3150,6 @@ void acs_update_intolerant_channels(struct hostapd_iface *iface, u8 chan)
+   }
+ }
+ 
+-void acs_switch_intolerant(struct hostapd_iface *iface)
+-{
+-  if (acs_recalc_ranks_and_set_chan(iface, SWR_INTOLERANT))
+-    acs_do_switch_channel(iface, 1);
+-  else
+-    wpa_printf(MSG_ERROR, "Must switch, intolerant !");
+-}
+-
+-void acs_switch_intolerant_expired(struct hostapd_iface *iface)
+-{
+-  int res;
+-
+-  res = acs_recalc_ranks_and_set_chan(iface, SWR_INTOLERANT_EXPIRED);
+-  if (res == TRUE) {
+-    if (acs_do_switch_channel(iface, 0) == TRUE && !iface->conf->secondary_channel)
+-      /* reschedule timer if we didn't switch to 40 MHz bandwidth */
+-      hostapd_restart_ap_ht2040_timer(iface);
+-  } else
+-    /* reschedule timer if we didn't switch at all */
+-    hostapd_restart_ap_ht2040_timer(iface);
+-}
+-
+ void acs_update_radar(struct hostapd_iface *iface)
+ {
+   struct hostapd_hw_modes *mode = iface->current_mode;
+diff --git a/src/ap/acs.h b/src/ap/acs.h
+index a47b4aa..9b75676 100644
+--- a/src/ap/acs.h
++++ b/src/ap/acs.h
+@@ -15,8 +15,6 @@
+ enum hostapd_chan_status acs_init(struct hostapd_iface *iface);
+ int acs_recalc_ranks_and_set_chan(struct hostapd_iface *iface, int switch_reason);
+ void acs_update_intolerant_channels(struct hostapd_iface *iface, u8 chan);
+-void acs_switch_intolerant(struct hostapd_iface *iface);
+-void acs_switch_intolerant_expired(struct hostapd_iface *iface);
+ void acs_update_radar(struct hostapd_iface *iface);
+ void acs_radar_switch(struct hostapd_iface *iface);
+ int acs_do_switch_channel(struct hostapd_iface *iface, int block_tx);
+diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
+index c2d00d8..220218a 100644
+--- a/src/ap/hostapd.c
++++ b/src/ap/hostapd.c
+@@ -3230,8 +3230,6 @@ const char * hostapd_channel_switch_text(enum hostapd_channel_switch_reason s)
+     return "UNKNOWN";
+   case HAPD_CHAN_SWITCH_RADAR_DETECTED:
+     return "RADAR";
+-  case HAPD_CHAN_SWITCH_20_40_COEX:
+-    return "20/40_COEXISTANCE";
+   }
+ 
+   return "UNKNOWN";
+diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h
+index 74d01b2..651b269 100644
+--- a/src/ap/hostapd.h
++++ b/src/ap/hostapd.h
+@@ -502,7 +502,6 @@ struct hostapd_iface {
+ 	enum hostapd_channel_switch_reason {
+ 		HAPD_CHAN_SWITCH_OTHER,
+ 		HAPD_CHAN_SWITCH_RADAR_DETECTED,
+-		HAPD_CHAN_SWITCH_20_40_COEX
+ 	} chan_switch_reason;
+ 	struct hostapd_failsafe_freq_params failsafe;
+ 
+diff --git a/src/ap/hw_features.c b/src/ap/hw_features.c
+index e6cbe30..5a546db 100644
+--- a/src/ap/hw_features.c
++++ b/src/ap/hw_features.c
+@@ -568,13 +568,6 @@ static void ieee80211n_check_scan(struct hostapd_iface *iface)
+ 
+ 	iface->secondary_ch = iface->conf->secondary_channel;
+ 	if (!oper40) {
+-#ifdef CONFIG_ACS
+-    if ((iface->conf->acs_algo == ACS_ALGO_SMART) && iface->conf->acs_init_done) {
+-      acs_update_intolerant_channels(iface, iface->conf->channel);
+-      acs_switch_intolerant(iface);
+-      return;
+-    }
+-#endif
+ 		wpa_printf(MSG_INFO, "20/40 MHz operation not permitted on "
+ 			   "channel pri=%d sec=%d based on overlapping BSSes",
+ 			   iface->conf->channel,
+diff --git a/src/ap/ieee802_11.h b/src/ap/ieee802_11.h
+index 69dcd27..985ddc9 100644
+--- a/src/ap/ieee802_11.h
++++ b/src/ap/ieee802_11.h
+@@ -148,9 +148,6 @@ u8 * hostapd_eid_multi_ap(struct hostapd_data *hapd, u8 *eid, size_t len);
+ void ap_copy_sta_supp_op_classes(struct sta_info *sta,
+ 				 const u8 *supp_op_classes,
+ 				 size_t supp_op_classes_len);
+-#ifdef CONFIG_ACS
+-void hostapd_restart_ap_ht2040_timer(struct hostapd_iface *iface);
+-#endif
+ 
+ void ieee802_11_check_4addr_sta_elems(struct ieee802_11_elems *elems, struct sta_info *sta);
+ 
+diff --git a/src/ap/ieee802_11_ht.c b/src/ap/ieee802_11_ht.c
+index 1f8e26c..f00934f 100644
+--- a/src/ap/ieee802_11_ht.c
++++ b/src/ap/ieee802_11_ht.c
+@@ -24,8 +24,6 @@
+ #include "acs.h"
+ 
+ 
+-static void hostapd_switch_csa(struct hostapd_iface *iface);
+-
+ /*    special case for ASSOC RESP:
+       mask out RX MCS Set as a workoaround for some STA vendors*/
+ u8 * hostapd_eid_ht_capabilities_assoc_resp(struct hostapd_data *hapd, u8 *eid,
+@@ -291,20 +289,6 @@ static int is_40_allowed(struct hostapd_iface *iface, int channel)
+ }
+ 
+ 
+-#ifdef CONFIG_ACS
+-void hostapd_restart_ap_ht2040_timer(struct hostapd_iface *iface)
+-{
+-  if (!iface->num_sta_ht40_intolerant) {
+-    unsigned int delay_time;
+-    delay_time = OVERLAPPING_BSS_TRANS_DELAY_FACTOR *
+-      iface->conf->obss_interval;
+-    eloop_cancel_timeout(ap_ht2040_timeout, iface, NULL);
+-    eloop_register_timeout(delay_time, 0, ap_ht2040_timeout, iface, NULL);
+-  }
+-}
+-#endif
+-
+-
+ void hostapd_2040_coex_action(struct hostapd_data *hapd,
+ 			      const struct ieee80211_mgmt *mgmt, size_t len)
+ {
+@@ -380,8 +364,8 @@ void hostapd_2040_coex_action(struct hostapd_data *hapd,
+ 			u8 chan = ic_report->variable[i];
+ 
+ #ifdef CONFIG_ACS
+-    if ((iface->conf->acs_algo == ACS_ALGO_SMART) && iface->conf->acs_init_done)
+-      acs_update_intolerant_channels(iface, chan);
++		if ((iface->conf->acs_algo == ACS_ALGO_SMART) && iface->conf->acs_init_done)
++			acs_update_intolerant_channels(iface, chan);
+ #endif
+ 			if (is_40_allowed(iface, chan))
+ 				continue;
+@@ -398,24 +382,12 @@ void hostapd_2040_coex_action(struct hostapd_data *hapd,
+ 
+ 	if (!is_ht40_allowed &&
+ 	    (iface->drv_flags & WPA_DRIVER_FLAGS_HT_2040_COEX)) {
+-#ifdef CONFIG_ACS
+-    if ((iface->conf->acs_algo == ACS_ALGO_SMART) && iface->conf->acs_init_done) {
+-      acs_update_intolerant_channels(iface, iface->conf->channel);
+-      acs_switch_intolerant(iface);
+-      if (iface->conf->obss_interval && !iface->conf->secondary_channel)
+-        /* If switched to 20 MHz channel, restart timer */
+-        hostapd_restart_ap_ht2040_timer(iface);
+-      return;
+-    }
+-#endif
+ 		if (iface->conf->secondary_channel) {
+ 			hostapd_logger(hapd, mgmt->sa,
+ 				       HOSTAPD_MODULE_IEEE80211,
+ 				       HOSTAPD_LEVEL_INFO,
+ 				       "Switching to 20 MHz operation");
+ 			iface->conf->secondary_channel = 0;
+-
+-			iface->chan_switch_reason = HAPD_CHAN_SWITCH_20_40_COEX;
+ 			ieee802_11_set_beacons(iface);
+ 		}
+ 		if (!iface->num_sta_ht40_intolerant &&
+@@ -439,53 +411,12 @@ static void hostapd_switch_to_20mhz(struct hostapd_data *hapd,
+ {
+ 	if (iface->drv_flags & WPA_DRIVER_FLAGS_HT_2040_COEX) {
+ 		if (iface->conf->secondary_channel) {
+-      struct csa_settings csa_settings;
+-      unsigned int i;
+-      int err = 1;
+-
+ 			hostapd_logger(hapd, mgmt->sa,
+-				       HOSTAPD_MODULE_IEEE80211,
+-				       HOSTAPD_LEVEL_INFO,
+-				       "Switching to 20 MHz operation due to OBSS beacon reception at rssi %d", signal);
++				HOSTAPD_MODULE_IEEE80211,
++				HOSTAPD_LEVEL_INFO,
++				"Switching to 20 MHz operation due to OBSS beacon reception at rssi %d", signal);
+ 			iface->conf->secondary_channel = 0;
+-
+-      /* Check if CSA in progress */
+-      if (hostapd_csa_in_progress(iface)) {
+-        wpa_printf(MSG_DEBUG, "will NOT switch to a new channel - CSA already in progress");
+-        return;
+-      }
+-
+-      /* Check if active CAC */
+-      if (iface->cac_started) return;
+-
+-      /* Setup CSA request */
+-      os_memset(&csa_settings, 0, sizeof(csa_settings));
+-      csa_settings.cs_count = 5;
+-      csa_settings.block_tx = 0;
+-
+-      err = hostapd_set_freq_params(&csa_settings.freq_params,
+-        iface->conf->hw_mode,
+-        acs_chan_to_freq(iface->conf->channel),
+-        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,
+-        iface->current_mode->vht_capab);
+-
+-      if (err) {
+-        wpa_printf(MSG_ERROR, "failed to calculate CSA freq params");
+-        /* possibly recover actual iface params */
+-        hostapd_disable_iface(iface);
+-        return;
+-      }
+-
+-      for (i = 0; i < iface->num_bss; i++) {
+-        err = hostapd_switch_channel(iface->bss[i], &csa_settings);
+-        if (err) return;
+-      }
++			ieee802_11_set_beacons(iface);
+ 		}
+ 
+ 		if (!iface->num_sta_ht40_intolerant) {
+@@ -522,18 +453,10 @@ void hostapd_obss_beacon(struct hostapd_data *hapd,
+ 		if (le_to_host16(ht_cap->ht_capabilities_info) &
+ 		    HT_CAP_INFO_40MHZ_INTOLERANT) {
+ #ifdef CONFIG_ACS
+-      if ((iface->conf->acs_algo == ACS_ALGO_SMART) && iface->conf->acs_init_done) {
+-        acs_update_intolerant_channels(iface, iface->conf->channel);
+-        if (iface->conf->secondary_channel) {
+-          acs_switch_intolerant(iface);
+-          if (!iface->conf->secondary_channel)
+-            /* If switched to 20 MHz channel, restart timer */
+-            hostapd_restart_ap_ht2040_timer(iface);
+-        }
+-      }
+-			else
++			if ((iface->conf->acs_algo == ACS_ALGO_SMART) && iface->conf->acs_init_done)
++				acs_update_intolerant_channels(iface, iface->conf->channel);
+ #endif
+-        hostapd_switch_to_20mhz(hapd, iface, mgmt, rssi_level);
++			hostapd_switch_to_20mhz(hapd, iface, mgmt, rssi_level);
+ 		}
+ 	}
+ }
+@@ -590,18 +513,10 @@ void ht40_intolerant_add(struct hostapd_iface *iface, struct sta_info *sta)
+ 	iface->num_sta_ht40_intolerant++;
+ 	eloop_cancel_timeout(ap_ht2040_timeout, iface, NULL);
+ 
+-#ifdef CONFIG_ACS
+-  if ((iface->conf->acs_algo == ACS_ALGO_SMART) && iface->conf->acs_init_done) {
+-    acs_update_intolerant_channels(iface, iface->conf->channel);
+-    acs_switch_intolerant(iface);
+-    return;
+-  }
+-#endif
+-
+ 	if (iface->conf->secondary_channel &&
+ 	    (iface->drv_flags & WPA_DRIVER_FLAGS_HT_2040_COEX)) {
+ 		iface->conf->secondary_channel = 0;
+-		hostapd_switch_csa(iface);
++		ieee802_11_set_beacons(iface);
+ 	}
+ }
+ 
+@@ -736,62 +651,7 @@ void ap_ht2040_timeout(void *eloop_data, void *user_data)
+ {
+ 	struct hostapd_iface *iface = eloop_data;
+ 
+-#ifdef CONFIG_ACS
+-  if ((iface->conf->acs_algo == ACS_ALGO_SMART) && iface->conf->acs_init_done) {
+-    acs_switch_intolerant_expired(iface);
+-  } else
+-#endif
+-  {
+-    wpa_printf(MSG_INFO, "Switching to 40 MHz operation");
+-
+-    iface->conf->secondary_channel = iface->secondary_ch;
+-
+-    iface->chan_switch_reason = HAPD_CHAN_SWITCH_20_40_COEX;
+-    hostapd_switch_csa(iface);
+-  }
+-}
+-
+-static void hostapd_switch_csa(struct hostapd_iface *iface)
+-{
+-	struct csa_settings csa_settings;
+-	unsigned int i;
+-	int err = 1;
+-
+-	/* Check if CSA in progress */
+-	if (hostapd_csa_in_progress(iface)) {
+-		wpa_printf(MSG_DEBUG, "will NOT switch to a new channel - CSA already in progress");
+-		return;
+-	}
+-
+-	/* Check if active CAC */
+-	if (iface->cac_started) return;
+-
+-	/* Setup CSA request */
+-	os_memset(&csa_settings, 0, sizeof(csa_settings));
+-	csa_settings.cs_count = 5;
+-	csa_settings.block_tx = 0;
+-
+-	err = hostapd_set_freq_params(&csa_settings.freq_params,
+-		iface->conf->hw_mode,
+-		acs_chan_to_freq(iface->conf->channel),
+-		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,
+-		iface->current_mode->vht_capab);
+-
+-	if (err) {
+-		wpa_printf(MSG_ERROR, "failed to calculate CSA freq params");
+-		/* possibly recover actual iface params */
+-		hostapd_disable_iface(iface);
+-		return;
+-	}
+-
+-	for (i = 0; i < iface->num_bss; i++) {
+-		err = hostapd_switch_channel(iface->bss[i], &csa_settings);
+-		if (err) return;
+-	}
++	wpa_printf(MSG_INFO, "Switching to 40 MHz operation");
++	iface->conf->secondary_channel = iface->secondary_ch;
++	ieee802_11_set_beacons(iface);
+ }
+diff --git a/src/drivers/driver.h b/src/drivers/driver.h
+index 301e706..0de8f93 100644
+--- a/src/drivers/driver.h
++++ b/src/drivers/driver.h
+@@ -284,11 +284,9 @@ enum {
+ 
+ enum {
+   SWR_INITIAL,
+-  SWR_INTOLERANT,
+   SWR_RADAR,
+   SWR_BG_SCAN,
+   SWR_UPDATE,
+-  SWR_INTOLERANT_EXPIRED,
+   SWR_LAST
+ };
+ 
+-- 
+2.10.1
+
diff --git a/hostapd_wave/patches/0416-hostapd-owl-configurable.patch b/hostapd_wave/patches/0416-hostapd-owl-configurable.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4ed20cfec259b00b4cb0ccc35a889826738efc95
--- /dev/null
+++ b/hostapd_wave/patches/0416-hostapd-owl-configurable.patch
@@ -0,0 +1,54 @@
+From 14c8bbecdb879af47e4f667657a381e44db543c2 Mon Sep 17 00:00:00 2001
+From: vulsmike <mikelis.vuls@intel.coim>
+Date: Mon, 18 Feb 2019 12:45:17 +0200
+Subject: [PATCH] hostapd-owl-configurable
+
+---
+ hostapd/config_file.c | 3 +++
+ src/ap/ap_config.h    | 1 +
+ src/ap/beacon.c       | 3 ++-
+ 3 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/hostapd/config_file.c b/hostapd/config_file.c
+index 57eb6d4..2074261 100644
+--- a/hostapd/config_file.c
++++ b/hostapd/config_file.c
+@@ -3259,6 +3259,9 @@ static int hostapd_config_fill(struct hostapd_config *conf,
+ 			}
+ 		}
+ 		bss->mesh_mode = val;
++	}
++	else if (os_strcmp(buf, "owl") == 0) {
++		conf->owl = atoi(pos);
+ #ifdef CONFIG_IEEE80211W
+ 	} else if (os_strcmp(buf, "ieee80211w") == 0) {
+ 		bss->ieee80211w = atoi(pos);
+diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
+index 3af7b03..9dadfbf 100644
+--- a/src/ap/ap_config.h
++++ b/src/ap/ap_config.h
+@@ -795,6 +795,7 @@ struct hostapd_config {
+ 
+ 	char *atf_config_file;     /* Air Time Fairness configuration filename */
+ 	struct atf_config atf_cfg; /* Air Time Fairness configuration */
++	u8 owl; /* Forwarding incoming probe reqests to upper layers */
+ };
+ 
+ #ifdef CONFIG_ACS
+diff --git a/src/ap/beacon.c b/src/ap/beacon.c
+index 5f5253e..1e6579c 100644
+--- a/src/ap/beacon.c
++++ b/src/ap/beacon.c
+@@ -729,7 +729,8 @@ void handle_probe_req(struct hostapd_data *hapd,
+ 	if (len < IEEE80211_HDRLEN)
+ 		return;
+ 
+-	_notify_probe_req(hapd, (const u8 *)mgmt, len);
++	if (hapd->iconf->owl)
++		_notify_probe_req(hapd, (const u8 *)mgmt, len);
+ 
+ 	ie = ((const u8 *) mgmt) + IEEE80211_HDRLEN;
+ 	if (hapd->iconf->track_sta_max_num)
+-- 
+2.10.1
+
diff --git a/hostapd_wave/patches/0417-rebased-v2.6-0001-WPA-Ignore-unauthenticated-encrypted-EAPOL-Key-data.patch b/hostapd_wave/patches/0417-rebased-v2.6-0001-WPA-Ignore-unauthenticated-encrypted-EAPOL-Key-data.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a62b52c6b9a83576a52943b08c50fa86eb146df6
--- /dev/null
+++ b/hostapd_wave/patches/0417-rebased-v2.6-0001-WPA-Ignore-unauthenticated-encrypted-EAPOL-Key-data.patch
@@ -0,0 +1,44 @@
+From 3e34cfdff6b192fe337c6fb3f487f73e96582961 Mon Sep 17 00:00:00 2001
+From: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+Date: Sun, 15 Jul 2018 01:25:53 +0200
+Subject: [PATCH] WPA: Ignore unauthenticated encrypted EAPOL-Key data
+
+Ignore unauthenticated encrypted EAPOL-Key data in supplicant
+processing. When using WPA2, these are frames that have the Encrypted
+flag set, but not the MIC flag.
+
+When using WPA2, EAPOL-Key frames that had the Encrypted flag set but
+not the MIC flag, had their data field decrypted without first verifying
+the MIC. In case the data field was encrypted using RC4 (i.e., when
+negotiating TKIP as the pairwise cipher), this meant that
+unauthenticated but decrypted data would then be processed. An adversary
+could abuse this as a decryption oracle to recover sensitive information
+in the data field of EAPOL-Key messages (e.g., the group key).
+(CVE-2018-14526)
+
+Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+---
+ src/rsn_supp/wpa.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff -upr wpa_supplicant-2.6.orig/src/rsn_supp/wpa.c wpa_supplicant-2.6/src/rsn_supp/wpa.c
+--- wpa_supplicant-2.6.orig/src/rsn_supp/wpa.c	2016-10-02 21:51:11.000000000 +0300
++++ wpa_supplicant-2.6/src/rsn_supp/wpa.c	2018-08-08 16:55:11.506831029 +0300
+@@ -2016,6 +2016,17 @@ int wpa_sm_rx_eapol(struct wpa_sm *sm, c
+ 
+ 	if ((sm->proto == WPA_PROTO_RSN || sm->proto == WPA_PROTO_OSEN) &&
+ 	    (key_info & WPA_KEY_INFO_ENCR_KEY_DATA)) {
++		/*
++		 * Only decrypt the Key Data field if the frame's authenticity
++		 * was verified. When using AES-SIV (FILS), the MIC flag is not
++		 * set, so this check should only be performed if mic_len != 0
++		 * which is the case in this code branch.
++		 */
++		if (!(key_info & WPA_KEY_INFO_MIC)) {
++			wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
++				"WPA: Ignore EAPOL-Key with encrypted but unauthenticated data");
++			goto out;
++		}
+ 		if (wpa_supplicant_decrypt_key_data(sm, key, ver, key_data,
+ 						    &key_data_len))
+ 			goto out;
diff --git a/hostapd_wave/patches/0418-hostapd-atf-unauthorized-sta-fix.patch b/hostapd_wave/patches/0418-hostapd-atf-unauthorized-sta-fix.patch
new file mode 100644
index 0000000000000000000000000000000000000000..31391f383faf3d37704d32fdf8e8f6a414983cf1
--- /dev/null
+++ b/hostapd_wave/patches/0418-hostapd-atf-unauthorized-sta-fix.patch
@@ -0,0 +1,28 @@
+From 8ca083bd42270e8083493082cd7d73b990a65dc2 Mon Sep 17 00:00:00 2001
+From: vulsmike <mikelis.vuls@intel.coim>
+Date: Mon, 4 Mar 2019 16:20:44 +0200
+Subject: [PATCH] hostapd-atf-unauthorized-sta-fix
+
+---
+ src/ap/atf.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/ap/atf.c b/src/ap/atf.c
+index 7ede0e0..c9131cc 100644
+--- a/src/ap/atf.c
++++ b/src/ap/atf.c
+@@ -355,9 +355,8 @@ static int update_atf_active_status_for_station (struct sta_info* sta,
+ 
+ 	if ((sta_has_quota[idx] & bit) == 0) {
+ 		/* STA does not have ATF quota yet. Shall we give it?*/
+-		/* Give quota if STA is in Driver and it has an 'authorized' flag. */
+-		if ((sta_in_driver[idx] & bit) != 0 &&
+-				(sta->flags & WLAN_STA_AUTHORIZED) != 0) {
++		/* Give quota if STA is in Driver */
++		if ((sta_in_driver[idx] & bit) != 0) {
+ 			sta_has_quota[idx] |= bit;
+ 			return 1; /* Station changed its status */
+ 		}
+-- 
+2.10.1
+