qcacld-3.0: Implement ECSA Action Frame

qcacld-2.0 to qcacld-3.0 propagation.

Implement:
1. Send & receive logic of ECSA action frame from P2P-CLI/GO
2. Trigger channel change on P2P GO side once ECSA action frame
   is received by,
  i) Adding CSA & ESCA IE in beacon template and updating
     FW to send it out
  ii) Notifying supplicant of channel change for P2P GO.

This change include UMAC changes.

CRs-fixed: 895240
Change-Id: Ie6c9154fb44ec75c699e37aaba660c637869c099
diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h
index 22d3c25..3fc95da 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -5396,4 +5396,28 @@
 	PS_DUTY_CYCLING_QPOWER = 5
 };
 
+/**
+ * struct sir_sme_ext_change_chan_req - channel change request
+ * @message_type: message id
+ * @length: msg length
+ * @new_channel: new channel
+ * @session_id: session id
+ */
+struct sir_sme_ext_cng_chan_req {
+	uint16_t  message_type; /* eWNI_SME_EXT_CHANGE_CHANNEL */
+	uint16_t  length;
+	uint32_t  new_channel;
+	uint8_t   session_id;
+};
+
+/**
+ * struct sir_sme_ext_change_chan_ind.
+ * @session_id: session id
+ * @new_channel: new channel to change
+ */
+struct sir_sme_ext_cng_chan_ind {
+	uint8_t  session_id;
+	uint8_t  new_channel;
+};
+
 #endif /* __SIR_API_H */
diff --git a/core/mac/inc/sir_mac_prot_def.h b/core/mac/inc/sir_mac_prot_def.h
index ccc2dce..20c1516 100644
--- a/core/mac/inc/sir_mac_prot_def.h
+++ b/core/mac/inc/sir_mac_prot_def.h
@@ -214,6 +214,8 @@
 
 /* Public Action for 20/40 BSS Coexistence */
 #define SIR_MAC_ACTION_2040_BSS_COEXISTENCE     0
+#define SIR_MAC_ACTION_EXT_CHANNEL_SWITCH_ID    4
+
 
 #ifdef WLAN_FEATURE_11W
 /* 11w SA query request/response action frame category code */
@@ -355,6 +357,10 @@
 #define SIR_MAC_EXTENDED_RATE_EID      50
 #define SIR_MAC_EXTENDED_RATE_EID_MIN      0
 #define SIR_MAC_EXTENDED_RATE_EID_MAX      255
+#define SIR_MAC_CHNL_EXTENDED_SWITCH_ANN_EID 60
+#define SIR_MAC_CHNL_EXTENDED_SWITCH_ANN_EID_MIN    0
+#define SIR_MAC_CHNL_EXTENDED_SWITCH_ANN_EID_MAX    255
+
 /* reserved       51-69 */
 #define SIR_MAC_RM_ENABLED_CAPABILITY_EID      70
 #define SIR_MAC_RM_ENABLED_CAPABILITY_EID_MIN  5
diff --git a/core/mac/inc/wni_api.h b/core/mac/inc/wni_api.h
index 9c279ea..ca7bf58 100644
--- a/core/mac/inc/wni_api.h
+++ b/core/mac/inc/wni_api.h
@@ -247,6 +247,8 @@
 	eWNI_SME_ROC_CMD,
 	eWNI_SME_SET_THERMAL_LEVEL_IND,
 	eWNI_SME_SET_IE_REQ,
+	eWNI_SME_EXT_CHANGE_CHANNEL,
+	eWNI_SME_EXT_CHANGE_CHANNEL_IND,
 	eWNI_SME_MSG_TYPES_END
 };
 
diff --git a/core/mac/src/cfg/cfgUtil/dot11f.frms b/core/mac/src/cfg/cfgUtil/dot11f.frms
index 04165e7..3c9004a 100644
--- a/core/mac/src/cfg/cfgUtil/dot11f.frms
+++ b/core/mac/src/cfg/cfgUtil/dot11f.frms
@@ -390,6 +390,15 @@
     userPositionArray[16];
 }
 
+FF ext_chan_switch_ann_action(4)
+{
+   {
+     switch_mode: 8;
+     op_class: 8;
+     new_channel: 8;
+     switch_count: 8;
+   }
+}
 
 /////////////////////////////////////////////////////////////////////////////
 //                                  TLVs                                   //
@@ -3600,6 +3609,13 @@
     OPTIE  Vendor3IE;
 }
 
+FRAME ext_channel_switch_action_frame
+{
+    FF     Category;
+    FF     Action;
+    FF     ext_chan_switch_ann_action;
+}
+
 // Local Variables:
 // mode: c++
 // fill-column: 77
diff --git a/core/mac/src/include/dot11f.h b/core/mac/src/include/dot11f.h
index 0258abd..09dfde6 100644
--- a/core/mac/src/include/dot11f.h
+++ b/core/mac/src/include/dot11f.h
@@ -35,7 +35,7 @@
  *
  *
  * This file was automatically generated by 'framesc'
- * Wed Oct 14 10:14:42 2015 from the following file(s):
+ * Mon Nov 16 10:55:21 2015 from the following file(s):
  *
  * dot11f.frms
  *
@@ -544,6 +544,32 @@
 					 uint8_t *);
 
 
+typedef struct sDot11fFfext_chan_switch_ann_action {
+	uint32_t   switch_mode:8;
+	uint32_t      op_class:8;
+	uint32_t   new_channel:8;
+	uint32_t  switch_count:8;
+} tDot11fFfext_chan_switch_ann_action;
+
+#define DOT11F_FF_EXT_CHAN_SWITCH_ANN_ACTION_LEN (4)
+
+void dot11f_unpack_ff_ext_chan_switch_ann_action(tpAniSirGlobal, uint8_t *,
+						 tDot11fFfext_chan_switch_ann_action *);
+
+void dot11f_pack_ff_ext_chan_switch_ann_action(tpAniSirGlobal,
+					       tDot11fFfext_chan_switch_ann_action *,
+					       uint8_t *);
+
+
+#define EXT_CHAN_SWITCH_ANN_ACTION_SWITCH_MODE_OFFSET  0
+#define EXT_CHAN_SWITCH_ANN_ACTION_SWITCH_MODE_WIDTH   8
+#define EXT_CHAN_SWITCH_ANN_ACTION_OP_CLASS_OFFSET     8
+#define EXT_CHAN_SWITCH_ANN_ACTION_OP_CLASS_WIDTH      8
+#define EXT_CHAN_SWITCH_ANN_ACTION_NEW_CHANNEL_OFFSET  16
+#define EXT_CHAN_SWITCH_ANN_ACTION_NEW_CHANNEL_WIDTH   8
+#define EXT_CHAN_SWITCH_ANN_ACTION_SWITCH_COUNT_OFFSET 24
+#define EXT_CHAN_SWITCH_ANN_ACTION_SWITCH_COUNT_WIDTH  8
+
 /*********************************************************************
  * TLVs                                                              *
  ********************************************************************/
@@ -8890,6 +8916,32 @@
 } /* End extern "C". */
 #endif /* C++ */
 
+typedef struct sDot11fext_channel_switch_action_frame {
+	tDot11fFfCategory                          Category;
+	tDot11fFfAction                            Action;
+	tDot11fFfext_chan_switch_ann_action        ext_chan_switch_ann_action;
+} tDot11fext_channel_switch_action_frame;
+
+#define DOT11F_EXT_CHANNEL_SWITCH_ACTION_FRAME (46)
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+
+uint32_t dot11f_unpack_ext_channel_switch_action_frame(tpAniSirGlobal pCtx,
+	uint8_t *pBuf, uint32_t nBuf,
+	tDot11fext_channel_switch_action_frame * pFrm);
+uint32_t dot11f_pack_ext_channel_switch_action_frame(tpAniSirGlobal pCtx,
+	tDot11fext_channel_switch_action_frame *pFrm, uint8_t *pBuf,
+	uint32_t nBuf, uint32_t *pnConsumed);
+uint32_t dot11f_get_packed_ext_channel_switch_action_frame_size(tpAniSirGlobal pCtx,
+	tDot11fext_channel_switch_action_frame *pFrm,
+	uint32_t *pnNeeded);
+
+#ifdef __cplusplus
+} /* End extern "C". */
+#endif /* C++ */
+
 typedef struct sDot11fht2040_bss_coexistence_mgmt_action_frame{
 	tDot11fFfCategory                            Category;
 	tDot11fFfAction                              Action;
@@ -8897,7 +8949,7 @@
 	tDot11fIEht2040_bss_intolerant_report        ht2040_bss_intolerant_report;
 } tDot11fht2040_bss_coexistence_mgmt_action_frame;
 
-#define DOT11F_HT2040_BSS_COEXISTENCE_MGMT_ACTION_FRAME (46)
+#define DOT11F_HT2040_BSS_COEXISTENCE_MGMT_ACTION_FRAME (47)
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/core/mac/src/pe/lim/lim_process_action_frame.c b/core/mac/src/pe/lim/lim_process_action_frame.c
index c77ae53..15d0392 100644
--- a/core/mac/src/pe/lim/lim_process_action_frame.c
+++ b/core/mac/src/pe/lim/lim_process_action_frame.c
@@ -56,7 +56,7 @@
 #include "rrm_api.h"
 #endif
 #include "lim_session_utils.h"
-
+#include "cds_concurrency.h"
 #include "wma_types.h"
 
 
@@ -338,6 +338,110 @@
 	return;
 }
 
+/**
+ * lim_process_ext_channel_switch_action_frame()- Process ECSA Action
+ * Frames.
+ * @mac_ctx: pointer to global mac structure
+ * @rx_packet_info: rx packet meta information
+ * @session_entry: Session entry.
+ *
+ * This function is called when ECSA action frame is received.
+ *
+ * Return: void
+ */
+static void
+lim_process_ext_channel_switch_action_frame(tpAniSirGlobal mac_ctx,
+		uint8_t *rx_packet_info, tpPESession session_entry)
+{
+
+	tpSirMacMgmtHdr         hdr;
+	uint8_t                 *body;
+	tDot11fext_channel_switch_action_frame *ext_channel_switch_frame;
+	uint32_t                frame_len;
+	uint32_t                status;
+	uint8_t                 target_channel;
+
+	hdr = WMA_GET_RX_MAC_HEADER(rx_packet_info);
+	body = WMA_GET_RX_MPDU_DATA(rx_packet_info);
+	frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_packet_info);
+
+	lim_log(mac_ctx, LOG1, FL("Received EXT Channel switch action frame"));
+
+	ext_channel_switch_frame =
+		 cdf_mem_malloc(sizeof(*ext_channel_switch_frame));
+	if (NULL == ext_channel_switch_frame) {
+		lim_log(mac_ctx, LOGE, FL("AllocateMemory failed"));
+		return;
+	}
+
+	/* Unpack channel switch frame */
+	status = dot11f_unpack_ext_channel_switch_action_frame(mac_ctx,
+			body, frame_len, ext_channel_switch_frame);
+
+	if (DOT11F_FAILED(status)) {
+
+		lim_log(mac_ctx, LOGE,
+			FL("Failed to parse CHANSW action frame (0x%08x, len %d):"),
+			status, frame_len);
+		cdf_mem_free(ext_channel_switch_frame);
+		return;
+	} else if (DOT11F_WARNED(status)) {
+
+		lim_log(mac_ctx, LOGW,
+		  FL("There were warnings while unpacking CHANSW Request (0x%08x, %d bytes):"),
+		  status, frame_len);
+	}
+
+	target_channel =
+	 ext_channel_switch_frame->ext_chan_switch_ann_action.new_channel;
+
+	/* Free ext_channel_switch_frame here as its no longer needed */
+	cdf_mem_free(ext_channel_switch_frame);
+	/*
+	 * Now, validate if channel change is required for the passed
+	 * channel and if is valid in the current regulatory domain,
+	 * and no concurrent session is running.
+	 */
+	if (!((session_entry->currentOperChannel != target_channel) &&
+	 ((cds_get_channel_state(target_channel)
+				== CHANNEL_STATE_ENABLE) ||
+	 (cds_get_channel_state(target_channel) == CHANNEL_STATE_DFS &&
+	 !cds_concurrent_open_sessions_running())))) {
+		lim_log(mac_ctx, LOGE, FL("Channel %d is not valid"),
+							target_channel);
+		return;
+	}
+
+	if (eLIM_AP_ROLE == session_entry->limSystemRole) {
+
+		struct sir_sme_ext_cng_chan_ind *ext_cng_chan_ind;
+		tSirMsgQ mmh_msg;
+
+		ext_cng_chan_ind = cdf_mem_malloc(sizeof(*ext_cng_chan_ind));
+		if (NULL == ext_cng_chan_ind) {
+			lim_log(mac_ctx, LOGP,
+			  FL("AllocateMemory failed for ext_cng_chan_ind"));
+			return;
+		}
+
+		cdf_mem_zero(ext_cng_chan_ind,
+			sizeof(*ext_cng_chan_ind));
+		ext_cng_chan_ind->session_id =
+					session_entry->smeSessionId;
+
+		/* No need to extract op mode as BW will be decided in
+		 *  in SAP FSM depending on previous BW.
+		 */
+		ext_cng_chan_ind->new_channel = target_channel;
+
+		mmh_msg.type = eWNI_SME_EXT_CHANGE_CHANNEL_IND;
+		mmh_msg.bodyptr = ext_cng_chan_ind;
+		mmh_msg.bodyval = 0;
+		lim_sys_process_mmh_msg_api(mac_ctx, &mmh_msg, ePROT);
+	}
+	return;
+} /*** end lim_process_ext_channel_switch_action_frame() ***/
+
 #ifdef WLAN_FEATURE_11AC
 /**
  * __lim_process_operating_mode_action_frame() - To process op mode frames
@@ -1943,7 +2047,10 @@
 				WMA_GET_RX_CH(rx_pkt_info), session, rssi);
 		break;
 #endif
-
+		case SIR_MAC_ACTION_EXT_CHANNEL_SWITCH_ID:
+			lim_process_ext_channel_switch_action_frame(mac_ctx,
+							rx_pkt_info, session);
+			break;
 		default:
 			lim_log(mac_ctx, LOGE,
 				FL("Unhandled public action frame -- %x "),
diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c
index 25e7ed1..bdd66b3 100644
--- a/core/mac/src/pe/lim/lim_process_message_queue.c
+++ b/core/mac/src/pe/lim/lim_process_message_queue.c
@@ -1353,6 +1353,7 @@
 #if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
 	case eWNI_SME_GET_TSM_STATS_REQ:
 #endif  /* FEATURE_WLAN_ESE && FEATURE_WLAN_ESE_UPLOAD */
+	case eWNI_SME_EXT_CHANGE_CHANNEL:
 	/* These messages are from HDD.No need to respond to HDD */
 		lim_process_normal_hdd_msg(mac_ctx, msg, false);
 		break;
diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c
index 811a24f..b0b8552 100644
--- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c
+++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c
@@ -64,6 +64,7 @@
 #if defined WLAN_FEATURE_VOWIFI_11R
 #include <lim_ft.h>
 #endif
+#include "cds_regdomain_common.h"
 
 /*
  * This overhead is time for sending NOA start to host in case of GO/sending
@@ -114,6 +115,10 @@
 
 extern void pe_register_wma_handle(tpAniSirGlobal pMac);
 
+static void lim_process_ext_change_channel(tpAniSirGlobal mac_ctx,
+						uint32_t *msg);
+
+
 /**
  * lim_process_set_hw_mode() - Send set HW mode command to WMA
  * @mac: Globacl MAC pointer
@@ -4988,6 +4993,9 @@
 	case eWNI_SME_SET_IE_REQ:
 		lim_process_set_ie_req(pMac, pMsgBuf);
 		break;
+	case eWNI_SME_EXT_CHANGE_CHANNEL:
+		lim_process_ext_change_channel(pMac, pMsgBuf);
+		break;
 	default:
 		cdf_mem_free((void *)pMsg->bodyptr);
 		pMsg->bodyptr = NULL;
@@ -5465,6 +5473,58 @@
 }
 
 /**
+ * send_extended_chan_switch_action_frame()- function to send ECSA
+ * action frame for each sta connected to SAP/GO and AP in case of
+ * STA .
+ * @mac_ctx: pointer to global mac structure
+ * @new_channel: new channel to switch to.
+ * @ch_bandwidth: BW of channel to calculate op_class
+ * @session_entry: pe session
+ *
+ * This function is called to send ECSA frame for STA/CLI and SAP/GO.
+ *
+ * Return: void
+ */
+
+static void send_extended_chan_switch_action_frame(tpAniSirGlobal mac_ctx,
+				uint16_t new_channel, uint8_t ch_bandwidth,
+						tpPESession session_entry)
+{
+	uint16_t op_class;
+	uint8_t switch_mode = 0, i;
+	tpDphHashNode psta;
+
+
+	op_class = cds_regdm_get_opclass_from_channel(
+				mac_ctx->scan.countryCodeCurrent,
+				new_channel,
+				ch_bandwidth);
+
+	if (LIM_IS_AP_ROLE(session_entry) &&
+		(mac_ctx->sap.SapDfsInfo.disable_dfs_ch_switch == false))
+		switch_mode = 1;
+
+	if (LIM_IS_AP_ROLE(session_entry)) {
+		for (i = 0; i < mac_ctx->lim.maxStation; i++) {
+			psta =
+			  session_entry->dph.dphHashTable.pDphNodeArray + i;
+			if (psta && psta->added)
+				lim_send_extended_chan_switch_action_frame(
+					mac_ctx,
+					psta->staAddr,
+					switch_mode, op_class, new_channel,
+					LIM_MAX_CSA_IE_UPDATES, session_entry);
+		}
+	} else if (LIM_IS_STA_ROLE(session_entry)) {
+		lim_send_extended_chan_switch_action_frame(mac_ctx,
+					session_entry->bssId,
+					switch_mode, op_class, new_channel,
+					LIM_MAX_CSA_IE_UPDATES, session_entry);
+	}
+
+}
+
+/**
  * lim_process_sme_dfs_csa_ie_request() - process sme dfs csa ie req
  *
  * @mac_ctx: Pointer to Global MAC structure
@@ -5595,10 +5655,56 @@
 	lim_send_beacon_ind(mac_ctx, session_entry);
 	lim_log(mac_ctx, LOG1, FL("Updated CSA IE, IE COUNT = %d"),
 		       session_entry->gLimChannelSwitch.switchCount);
+	/* Send ECSA Action frame after updating the beacon */
+	send_extended_chan_switch_action_frame(mac_ctx,
+		session_entry->gLimChannelSwitch.primaryChannel,
+		session_entry->gLimChannelSwitch.ch_width,
+					   session_entry);
 	session_entry->gLimChannelSwitch.switchCount--;
 }
 
 /**
+ * lim_process_ext_change_channel()- function to send ECSA
+ * action frame for STA/CLI .
+ * @mac_ctx: pointer to global mac structure
+ * @msg: params from sme for new channel.
+ *
+ * This function is called to send ECSA frame for STA/CLI.
+ *
+ * Return: void
+ */
+
+static void lim_process_ext_change_channel(tpAniSirGlobal mac_ctx,
+							uint32_t *msg)
+{
+	struct sir_sme_ext_cng_chan_req *ext_chng_channel =
+				(struct sir_sme_ext_cng_chan_req *) msg;
+	tpPESession session_entry = NULL;
+
+	if (NULL == msg) {
+		lim_log(mac_ctx, LOGE, FL("Buffer is Pointing to NULL"));
+		return;
+	}
+	session_entry =
+		pe_find_session_by_sme_session_id(mac_ctx,
+						ext_chng_channel->session_id);
+	if (NULL == session_entry) {
+		lim_log(mac_ctx, LOGE,
+			FL("Session not found for given session %d"),
+			ext_chng_channel->session_id);
+		return;
+	}
+	if (LIM_IS_AP_ROLE(session_entry)) {
+		lim_log(mac_ctx, LOGE,
+			FL("not an STA/CLI session"));
+		return;
+	}
+	send_extended_chan_switch_action_frame(mac_ctx,
+			ext_chng_channel->new_channel,
+				0, session_entry);
+}
+
+/**
  * lim_process_nss_update_request() - process sme nss update req
  *
  * @mac_ctx: Pointer to Global MAC structure
diff --git a/core/mac/src/pe/lim/lim_send_management_frames.c b/core/mac/src/pe/lim/lim_send_management_frames.c
index 74c9cbf..484a5d7 100644
--- a/core/mac/src/pe/lim/lim_send_management_frames.c
+++ b/core/mac/src/pe/lim/lim_send_management_frames.c
@@ -4092,6 +4092,139 @@
 
 } /* End lim_send_channel_switch_mgmt_frame. */
 
+/**
+ * lim_send_extended_chan_switch_action_frame()- function to send ECSA
+ * action frame over the air .
+ * @mac_ctx: pointer to global mac structure
+ * @peer: Destination mac.
+ * @mode: channel switch mode
+ * @new_op_class: new op class
+ * @new_channel: new channel to switch
+ * @count: channel switch count
+ *
+ * This function is called to send ECSA frame.
+ *
+ * Return: success if frame is sent else return failure
+ */
+
+tSirRetStatus
+lim_send_extended_chan_switch_action_frame(tpAniSirGlobal mac_ctx,
+		tSirMacAddr peer, uint8_t mode, uint8_t new_op_class,
+		uint8_t new_channel, uint8_t count, tpPESession session_entry)
+{
+	tDot11fext_channel_switch_action_frame frm;
+	uint8_t                  *frame;
+	tpSirMacMgmtHdr          mac_hdr;
+	uint32_t                 num_bytes, n_payload, status;
+	void                     *packet;
+	CDF_STATUS               cdf_status;
+	uint8_t                  txFlag = 0;
+	uint8_t                  sme_session_id = 0;
+
+	if (session_entry == NULL) {
+		lim_log(mac_ctx, LOGE, FL("Session entry is NULL!!!"));
+		return eSIR_FAILURE;
+	}
+
+	sme_session_id = session_entry->smeSessionId;
+
+	cdf_mem_set(&frm, sizeof(frm), 0);
+
+	frm.Category.category     = SIR_MAC_ACTION_PUBLIC_USAGE;
+	frm.Action.action         = SIR_MAC_ACTION_EXT_CHANNEL_SWITCH_ID;
+
+	frm.ext_chan_switch_ann_action.switch_mode = mode;
+	frm.ext_chan_switch_ann_action.op_class = new_op_class;
+	frm.ext_chan_switch_ann_action.new_channel = new_channel;
+	frm.ext_chan_switch_ann_action.switch_count = count;
+
+
+	status = dot11f_get_packed_ext_channel_switch_action_frame_size(mac_ctx,
+							    &frm, &n_payload);
+	if (DOT11F_FAILED(status)) {
+		lim_log(mac_ctx, LOGP,
+		 FL("Failed to get packed size for Channel Switch 0x%08x."),
+				 status);
+		/* We'll fall back on the worst case scenario*/
+		n_payload = sizeof(tDot11fext_channel_switch_action_frame);
+	} else if (DOT11F_WARNED(status)) {
+		lim_log(mac_ctx, LOGW,
+		 FL("There were warnings while calculating the packed size for a Ext Channel Switch (0x%08x)."),
+		 status);
+	}
+
+	num_bytes = n_payload + sizeof(tSirMacMgmtHdr);
+
+	cdf_status = cds_packet_alloc((uint16_t)num_bytes,
+				(void **) &frame, (void **) &packet);
+
+	if (!CDF_IS_STATUS_SUCCESS(cdf_status)) {
+		lim_log(mac_ctx, LOGP,
+		 FL("Failed to allocate %d bytes for a Ext Channel Switch."),
+								 num_bytes);
+		return eSIR_FAILURE;
+	}
+
+	/* Paranoia*/
+	cdf_mem_set(frame, num_bytes, 0);
+
+	/* Next, we fill out the buffer descriptor */
+	lim_populate_mac_header(mac_ctx, frame, SIR_MAC_MGMT_FRAME,
+		SIR_MAC_MGMT_ACTION, peer, session_entry->selfMacAddr);
+	mac_hdr = (tpSirMacMgmtHdr) frame;
+	cdf_mem_copy((uint8_t *) mac_hdr->bssId,
+				   (uint8_t *) session_entry->bssId,
+				   sizeof(tSirMacAddr));
+
+	status = dot11f_pack_ext_channel_switch_action_frame(mac_ctx, &frm,
+		frame + sizeof(tSirMacMgmtHdr), n_payload, &n_payload);
+	if (DOT11F_FAILED(status)) {
+		lim_log(mac_ctx, LOGE,
+			 FL("Failed to pack a Channel Switch 0x%08x."),
+								 status);
+		cds_packet_free((void *)packet);
+		return eSIR_FAILURE;
+	} else if (DOT11F_WARNED(status)) {
+		lim_log(mac_ctx, LOGW,
+		 FL("There were warnings while packing a Channel Switch 0x%08x."),
+		 status);
+	}
+
+	if ((SIR_BAND_5_GHZ ==
+		lim_get_rf_band(session_entry->currentOperChannel)) ||
+		(session_entry->pePersona == CDF_P2P_CLIENT_MODE) ||
+		(session_entry->pePersona == CDF_P2P_GO_MODE)) {
+		txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
+	}
+
+	lim_log(mac_ctx, LOG1,
+	 FL("Send Ext channel Switch to :"MAC_ADDRESS_STR" with swcount %d, swmode %d , newchannel %d newops %d"),
+		MAC_ADDR_ARRAY(mac_hdr->da),
+		frm.ext_chan_switch_ann_action.switch_count,
+		frm.ext_chan_switch_ann_action.switch_mode,
+		frm.ext_chan_switch_ann_action.new_channel,
+			 frm.ext_chan_switch_ann_action.op_class);
+
+	MTRACE(cdf_trace(CDF_MODULE_ID_PE, TRACE_CODE_TX_MGMT,
+			session_entry->peSessionId, mac_hdr->fc.subType));
+	cdf_status = wma_tx_frame(mac_ctx, packet, (uint16_t) num_bytes,
+						 TXRX_FRM_802_11_MGMT,
+						 ANI_TXDIR_TODS,
+						 7,
+						 lim_tx_complete, frame,
+						 txFlag, sme_session_id, 0);
+	MTRACE(cdf_trace(CDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE,
+			session_entry->peSessionId, cdf_status));
+	if (!CDF_IS_STATUS_SUCCESS(cdf_status)) {
+		lim_log(mac_ctx, LOGE,
+		  FL("Failed to send a Ext Channel Switch %X!"),
+							 cdf_status);
+		/* Pkt will be freed up by the callback */
+		return eSIR_FAILURE;
+	}
+	return eSIR_SUCCESS;
+} /* End lim_send_extended_chan_switch_action_frame */
+
 #ifdef WLAN_FEATURE_11AC
 tSirRetStatus
 lim_send_vht_opmode_notification_frame(tpAniSirGlobal pMac,
diff --git a/core/mac/src/pe/lim/lim_types.h b/core/mac/src/pe/lim/lim_types.h
index 715e775..a61a9ca 100644
--- a/core/mac/src/pe/lim/lim_types.h
+++ b/core/mac/src/pe/lim/lim_types.h
@@ -496,6 +496,10 @@
 						 uint8_t, uint8_t, uint8_t,
 						 tpPESession);
 
+tSirRetStatus lim_send_extended_chan_switch_action_frame(tpAniSirGlobal mac_ctx,
+	tSirMacAddr peer, uint8_t mode, uint8_t new_op_class,
+	uint8_t new_channel, uint8_t count, tpPESession session_entry);
+
 #ifdef WLAN_FEATURE_11AC
 tSirRetStatus lim_send_vht_opmode_notification_frame(tpAniSirGlobal pMac,
 						     tSirMacAddr peer, uint8_t nMode,
diff --git a/core/mac/src/pe/sch/sch_beacon_gen.c b/core/mac/src/pe/sch/sch_beacon_gen.c
index 365b349..7e0b23c 100644
--- a/core/mac/src/pe/sch/sch_beacon_gen.c
+++ b/core/mac/src/pe/sch/sch_beacon_gen.c
@@ -573,6 +573,15 @@
 
 	}
 
+	/* EXT Channel Switch Announcement CHNL_EXTENDED_SWITCH_ANN_EID*/
+	if (beacon2->ext_chan_switch_ann.present) {
+		set_probe_rsp_ie_bitmap(DefProbeRspIeBitmap,
+			SIR_MAC_CHNL_EXTENDED_SWITCH_ANN_EID);
+		cdf_mem_copy((void *)&prb_rsp->ext_chan_switch_ann,
+			(void *)&beacon2->ext_chan_switch_ann,
+			sizeof(beacon2->ext_chan_switch_ann));
+	}
+
 #ifdef FEATURE_AP_MCC_CH_AVOIDANCE
 	if (beacon2->QComVendorIE.present) {
 		set_probe_rsp_ie_bitmap(DefProbeRspIeBitmap,
diff --git a/core/mac/src/sys/legacy/src/utils/src/dot11f.c b/core/mac/src/sys/legacy/src/utils/src/dot11f.c
index 6286a01..aed4bd9 100644
--- a/core/mac/src/sys/legacy/src/utils/src/dot11f.c
+++ b/core/mac/src/sys/legacy/src/utils/src/dot11f.c
@@ -33,7 +33,7 @@
  *
  *
  * This file was automatically generated by 'framesc'
- * Wed Oct 14 10:14:42 2015 from the following file(s):
+ * Mon Nov 16 10:55:21 2015 from the following file(s):
  *
  * dot11f.frms
  *
@@ -767,6 +767,21 @@
 
 #define SigFfVhtUserPositionArray (0x001e)
 
+void dot11f_unpack_ff_ext_chan_switch_ann_action(tpAniSirGlobal pCtx,
+						 uint8_t *pBuf,
+						 tDot11fFfext_chan_switch_ann_action *pDst)
+{
+	uint32_t tmp4__;
+	framesntohl(pCtx, &tmp4__, pBuf, 0);
+	pDst->switch_mode = tmp4__ >> 0 & 0xff;
+	pDst->op_class = tmp4__ >> 8 & 0xff;
+	pDst->new_channel = tmp4__ >> 16 & 0xff;
+	pDst->switch_count = tmp4__ >> 24 & 0xff;
+	(void)pCtx;
+} /* End dot11f_unpack_ff_ext_chan_switch_ann_action. */
+
+#define SigFfext_chan_switch_ann_action (0x001f)
+
 uint32_t dot11f_unpack_tlv_authorized_ma_cs(tpAniSirGlobal pCtx,
 					  uint8_t *pBuf,
 					  uint16_t tlvlen,
@@ -793,13 +808,13 @@
 				    tDot11fTLVVersion2 *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp4__;
+	uint8_t tmp5__;
 	pDst->present = 1;
-	tmp4__ = *pBuf;
+	tmp5__ = *pBuf;
 	pBuf += 1;
 	tlvlen -= 1;
-	pDst->minor = tmp4__ >> 0 & 0xf;
-	pDst->major = tmp4__ >> 4 & 0xf;
+	pDst->minor = tmp5__ >> 0 & 0xf;
+	pDst->major = tmp5__ >> 4 & 0xf;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_tlv_version2. */
@@ -1268,13 +1283,13 @@
 				   tDot11fTLVVersion *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp5__;
+	uint8_t tmp6__;
 	pDst->present = 1;
-	tmp5__ = *pBuf;
+	tmp6__ = *pBuf;
 	pBuf += 1;
 	tlvlen -= 1;
-	pDst->minor = tmp5__ >> 0 & 0xf;
-	pDst->major = tmp5__ >> 4 & 0xf;
+	pDst->minor = tmp6__ >> 0 & 0xf;
+	pDst->major = tmp6__ >> 4 & 0xf;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_tlv_version. */
@@ -1329,16 +1344,16 @@
 			      tDot11fIEGTK *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint16_t tmp6__;
+	uint16_t tmp7__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	framesntohs(pCtx, &tmp6__, pBuf, 0);
+	framesntohs(pCtx, &tmp7__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->keyId = tmp6__ >> 0 & 0x3;
-	pDst->reserved = tmp6__ >> 2 & 0x3feb;
+	pDst->keyId = tmp7__ >> 0 & 0x3;
+	pDst->reserved = tmp7__ >> 2 & 0x3feb;
 	pDst->keyLength = *pBuf;
 	pBuf += 1;
 	ielen -= (uint8_t)1;
@@ -1635,59 +1650,59 @@
 					 tDot11fIERRMEnabledCap *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp7__;
 	uint8_t tmp8__;
 	uint8_t tmp9__;
 	uint8_t tmp10__;
 	uint8_t tmp11__;
+	uint8_t tmp12__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	tmp7__ = *pBuf;
-	pBuf += 1;
-	ielen -= 1;
-	pDst->LinkMeasurement = tmp7__ >> 0 & 0x1;
-	pDst->NeighborRpt = tmp7__ >> 1 & 0x1;
-	pDst->parallel = tmp7__ >> 2 & 0x1;
-	pDst->repeated = tmp7__ >> 3 & 0x1;
-	pDst->BeaconPassive = tmp7__ >> 4 & 0x1;
-	pDst->BeaconActive = tmp7__ >> 5 & 0x1;
-	pDst->BeaconTable = tmp7__ >> 6 & 0x1;
-	pDst->BeaconRepCond = tmp7__ >> 7 & 0x1;
 	tmp8__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->FrameMeasurement = tmp8__ >> 0 & 0x1;
-	pDst->ChannelLoad = tmp8__ >> 1 & 0x1;
-	pDst->NoiseHistogram = tmp8__ >> 2 & 0x1;
-	pDst->statistics = tmp8__ >> 3 & 0x1;
-	pDst->LCIMeasurement = tmp8__ >> 4 & 0x1;
-	pDst->LCIAzimuth = tmp8__ >> 5 & 0x1;
-	pDst->TCMCapability = tmp8__ >> 6 & 0x1;
-	pDst->triggeredTCM = tmp8__ >> 7 & 0x1;
+	pDst->LinkMeasurement = tmp8__ >> 0 & 0x1;
+	pDst->NeighborRpt = tmp8__ >> 1 & 0x1;
+	pDst->parallel = tmp8__ >> 2 & 0x1;
+	pDst->repeated = tmp8__ >> 3 & 0x1;
+	pDst->BeaconPassive = tmp8__ >> 4 & 0x1;
+	pDst->BeaconActive = tmp8__ >> 5 & 0x1;
+	pDst->BeaconTable = tmp8__ >> 6 & 0x1;
+	pDst->BeaconRepCond = tmp8__ >> 7 & 0x1;
 	tmp9__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->APChanReport = tmp9__ >> 0 & 0x1;
-	pDst->RRMMIBEnabled = tmp9__ >> 1 & 0x1;
-	pDst->operatingChanMax = tmp9__ >> 2 & 0x7;
-	pDst->nonOperatinChanMax = tmp9__ >> 5 & 0x7;
+	pDst->FrameMeasurement = tmp9__ >> 0 & 0x1;
+	pDst->ChannelLoad = tmp9__ >> 1 & 0x1;
+	pDst->NoiseHistogram = tmp9__ >> 2 & 0x1;
+	pDst->statistics = tmp9__ >> 3 & 0x1;
+	pDst->LCIMeasurement = tmp9__ >> 4 & 0x1;
+	pDst->LCIAzimuth = tmp9__ >> 5 & 0x1;
+	pDst->TCMCapability = tmp9__ >> 6 & 0x1;
+	pDst->triggeredTCM = tmp9__ >> 7 & 0x1;
 	tmp10__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->MeasurementPilot = tmp10__ >> 0 & 0x7;
-	pDst->MeasurementPilotEnabled = tmp10__ >> 3 & 0x1;
-	pDst->NeighborTSFOffset = tmp10__ >> 4 & 0x1;
-	pDst->RCPIMeasurement = tmp10__ >> 5 & 0x1;
-	pDst->RSNIMeasurement = tmp10__ >> 6 & 0x1;
-	pDst->BssAvgAccessDelay = tmp10__ >> 7 & 0x1;
+	pDst->APChanReport = tmp10__ >> 0 & 0x1;
+	pDst->RRMMIBEnabled = tmp10__ >> 1 & 0x1;
+	pDst->operatingChanMax = tmp10__ >> 2 & 0x7;
+	pDst->nonOperatinChanMax = tmp10__ >> 5 & 0x7;
 	tmp11__ = *pBuf;
-	pDst->BSSAvailAdmission = tmp11__ >> 0 & 0x1;
-	pDst->AntennaInformation = tmp11__ >> 1 & 0x1;
-	pDst->fine_time_meas_rpt = tmp11__ >> 2 & 0x1;
-	pDst->lci_capability = tmp11__ >> 3 & 0x1;
-	pDst->reserved = tmp11__ >> 4 & 0xf;
+	pBuf += 1;
+	ielen -= 1;
+	pDst->MeasurementPilot = tmp11__ >> 0 & 0x7;
+	pDst->MeasurementPilotEnabled = tmp11__ >> 3 & 0x1;
+	pDst->NeighborTSFOffset = tmp11__ >> 4 & 0x1;
+	pDst->RCPIMeasurement = tmp11__ >> 5 & 0x1;
+	pDst->RSNIMeasurement = tmp11__ >> 6 & 0x1;
+	pDst->BssAvgAccessDelay = tmp11__ >> 7 & 0x1;
+	tmp12__ = *pBuf;
+	pDst->BSSAvailAdmission = tmp12__ >> 0 & 0x1;
+	pDst->AntennaInformation = tmp12__ >> 1 & 0x1;
+	pDst->fine_time_meas_rpt = tmp12__ >> 2 & 0x1;
+	pDst->lci_capability = tmp12__ >> 3 & 0x1;
+	pDst->reserved = tmp12__ >> 4 & 0xf;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_rrm_enabled_cap. */
@@ -1746,18 +1761,18 @@
 				   tDot11fIESchedule *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint16_t tmp12__;
+	uint16_t tmp13__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	framesntohs(pCtx, &tmp12__, pBuf, 0);
+	framesntohs(pCtx, &tmp13__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->aggregation = tmp12__ >> 0 & 0x1;
-	pDst->tsid = tmp12__ >> 1 & 0xf;
-	pDst->direction = tmp12__ >> 5 & 0x3;
-	pDst->reserved = tmp12__ >> 7 & 0x1ff;
+	pDst->aggregation = tmp13__ >> 0 & 0x1;
+	pDst->tsid = tmp13__ >> 1 & 0xf;
+	pDst->direction = tmp13__ >> 5 & 0x3;
+	pDst->reserved = tmp13__ >> 7 & 0x1ff;
 	framesntohl(pCtx, &pDst->service_start_time, pBuf, 0);
 	pBuf += 4;
 	ielen -= (uint8_t)4;
@@ -1893,34 +1908,34 @@
 				 tDot11fIETSPEC *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint16_t tmp13__;
-	uint8_t tmp14__;
-	uint16_t tmp15__;
+	uint16_t tmp14__;
+	uint8_t tmp15__;
+	uint16_t tmp16__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	framesntohs(pCtx, &tmp13__, pBuf, 0);
+	framesntohs(pCtx, &tmp14__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->traffic_type = tmp13__ >> 0 & 0x1;
-	pDst->tsid = tmp13__ >> 1 & 0xf;
-	pDst->direction = tmp13__ >> 5 & 0x3;
-	pDst->access_policy = tmp13__ >> 7 & 0x3;
-	pDst->aggregation = tmp13__ >> 9 & 0x1;
-	pDst->psb = tmp13__ >> 10 & 0x1;
-	pDst->user_priority = tmp13__ >> 11 & 0x7;
-	pDst->tsinfo_ack_pol = tmp13__ >> 14 & 0x3;
-	tmp14__ = *pBuf;
+	pDst->traffic_type = tmp14__ >> 0 & 0x1;
+	pDst->tsid = tmp14__ >> 1 & 0xf;
+	pDst->direction = tmp14__ >> 5 & 0x3;
+	pDst->access_policy = tmp14__ >> 7 & 0x3;
+	pDst->aggregation = tmp14__ >> 9 & 0x1;
+	pDst->psb = tmp14__ >> 10 & 0x1;
+	pDst->user_priority = tmp14__ >> 11 & 0x7;
+	pDst->tsinfo_ack_pol = tmp14__ >> 14 & 0x3;
+	tmp15__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->schedule = tmp14__ >> 0 & 0x1;
-	pDst->unused = tmp14__ >> 1 & 0x7f;
-	framesntohs(pCtx, &tmp15__, pBuf, 0);
+	pDst->schedule = tmp15__ >> 0 & 0x1;
+	pDst->unused = tmp15__ >> 1 & 0x7f;
+	framesntohs(pCtx, &tmp16__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->size = tmp15__ >> 0 & 0x7fff;
-	pDst->fixed = tmp15__ >> 15 & 0x1;
+	pDst->size = tmp16__ >> 0 & 0x7fff;
+	pDst->fixed = tmp16__ >> 15 & 0x1;
 	framesntohs(pCtx, &pDst->max_msdu_size, pBuf, 0);
 	pBuf += 2;
 	ielen -= (uint8_t)2;
@@ -1974,50 +1989,50 @@
 				  tDot11fIEVHTCaps *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint32_t tmp16__;
-	uint16_t tmp17__;
+	uint32_t tmp17__;
 	uint16_t tmp18__;
+	uint16_t tmp19__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	framesntohl(pCtx, &tmp16__, pBuf, 0);
+	framesntohl(pCtx, &tmp17__, pBuf, 0);
 	pBuf += 4;
 	ielen -= 4;
-	pDst->maxMPDULen = tmp16__ >> 0 & 0x3;
-	pDst->supportedChannelWidthSet = tmp16__ >> 2 & 0x3;
-	pDst->ldpcCodingCap = tmp16__ >> 4 & 0x1;
-	pDst->shortGI80MHz = tmp16__ >> 5 & 0x1;
-	pDst->shortGI160and80plus80MHz = tmp16__ >> 6 & 0x1;
-	pDst->txSTBC = tmp16__ >> 7 & 0x1;
-	pDst->rxSTBC = tmp16__ >> 8 & 0x7;
-	pDst->suBeamFormerCap = tmp16__ >> 11 & 0x1;
-	pDst->suBeamformeeCap = tmp16__ >> 12 & 0x1;
-	pDst->csnofBeamformerAntSup = tmp16__ >> 13 & 0x7;
-	pDst->numSoundingDim = tmp16__ >> 16 & 0x7;
-	pDst->muBeamformerCap = tmp16__ >> 19 & 0x1;
-	pDst->muBeamformeeCap = tmp16__ >> 20 & 0x1;
-	pDst->vhtTXOPPS = tmp16__ >> 21 & 0x1;
-	pDst->htcVHTCap = tmp16__ >> 22 & 0x1;
-	pDst->maxAMPDULenExp = tmp16__ >> 23 & 0x7;
-	pDst->vhtLinkAdaptCap = tmp16__ >> 26 & 0x3;
-	pDst->rxAntPattern = tmp16__ >> 28 & 0x1;
-	pDst->txAntPattern = tmp16__ >> 29 & 0x1;
-	pDst->reserved1 = tmp16__ >> 30 & 0x3;
+	pDst->maxMPDULen = tmp17__ >> 0 & 0x3;
+	pDst->supportedChannelWidthSet = tmp17__ >> 2 & 0x3;
+	pDst->ldpcCodingCap = tmp17__ >> 4 & 0x1;
+	pDst->shortGI80MHz = tmp17__ >> 5 & 0x1;
+	pDst->shortGI160and80plus80MHz = tmp17__ >> 6 & 0x1;
+	pDst->txSTBC = tmp17__ >> 7 & 0x1;
+	pDst->rxSTBC = tmp17__ >> 8 & 0x7;
+	pDst->suBeamFormerCap = tmp17__ >> 11 & 0x1;
+	pDst->suBeamformeeCap = tmp17__ >> 12 & 0x1;
+	pDst->csnofBeamformerAntSup = tmp17__ >> 13 & 0x7;
+	pDst->numSoundingDim = tmp17__ >> 16 & 0x7;
+	pDst->muBeamformerCap = tmp17__ >> 19 & 0x1;
+	pDst->muBeamformeeCap = tmp17__ >> 20 & 0x1;
+	pDst->vhtTXOPPS = tmp17__ >> 21 & 0x1;
+	pDst->htcVHTCap = tmp17__ >> 22 & 0x1;
+	pDst->maxAMPDULenExp = tmp17__ >> 23 & 0x7;
+	pDst->vhtLinkAdaptCap = tmp17__ >> 26 & 0x3;
+	pDst->rxAntPattern = tmp17__ >> 28 & 0x1;
+	pDst->txAntPattern = tmp17__ >> 29 & 0x1;
+	pDst->reserved1 = tmp17__ >> 30 & 0x3;
 	framesntohs(pCtx, &pDst->rxMCSMap, pBuf, 0);
 	pBuf += 2;
 	ielen -= (uint8_t)2;
-	framesntohs(pCtx, &tmp17__, pBuf, 0);
+	framesntohs(pCtx, &tmp18__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->rxHighSupDataRate = tmp17__ >> 0 & 0x1fff;
-	pDst->reserved2 = tmp17__ >> 13 & 0x7;
+	pDst->rxHighSupDataRate = tmp18__ >> 0 & 0x1fff;
+	pDst->reserved2 = tmp18__ >> 13 & 0x7;
 	framesntohs(pCtx, &pDst->txMCSMap, pBuf, 0);
 	pBuf += 2;
 	ielen -= (uint8_t)2;
-	framesntohs(pCtx, &tmp18__, pBuf, 0);
-	pDst->txSupDataRate = tmp18__ >> 0 & 0x1fff;
-	pDst->reserved3 = tmp18__ >> 13 & 0x7;
+	framesntohs(pCtx, &tmp19__, pBuf, 0);
+	pDst->txSupDataRate = tmp19__ >> 0 & 0x1fff;
+	pDst->reserved3 = tmp19__ >> 13 & 0x7;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_vht_caps. */
@@ -2058,7 +2073,7 @@
 				      tDot11fIEWMMSchedule *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint16_t tmp19__;
+	uint16_t tmp20__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -2070,13 +2085,13 @@
 		pDst->present = 0;
 		return status | DOT11F_BAD_FIXED_VALUE;
 	}
-	framesntohs(pCtx, &tmp19__, pBuf, 0);
+	framesntohs(pCtx, &tmp20__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->aggregation = tmp19__ >> 0 & 0x1;
-	pDst->tsid = tmp19__ >> 1 & 0xf;
-	pDst->direction = tmp19__ >> 5 & 0x3;
-	pDst->reserved = tmp19__ >> 7 & 0x1ff;
+	pDst->aggregation = tmp20__ >> 0 & 0x1;
+	pDst->tsid = tmp20__ >> 1 & 0xf;
+	pDst->direction = tmp20__ >> 5 & 0x3;
+	pDst->reserved = tmp20__ >> 7 & 0x1ff;
 	framesntohl(pCtx, &pDst->service_start_time, pBuf, 0);
 	pBuf += 4;
 	ielen -= (uint8_t)4;
@@ -2248,9 +2263,9 @@
 				   tDot11fIEWMMTSPEC *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint16_t tmp20__;
-	uint8_t tmp21__;
-	uint16_t tmp22__;
+	uint16_t tmp21__;
+	uint8_t tmp22__;
+	uint16_t tmp23__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -2262,27 +2277,27 @@
 		pDst->present = 0;
 		return status | DOT11F_BAD_FIXED_VALUE;
 	}
-	framesntohs(pCtx, &tmp20__, pBuf, 0);
+	framesntohs(pCtx, &tmp21__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->traffic_type = tmp20__ >> 0 & 0x1;
-	pDst->tsid = tmp20__ >> 1 & 0xf;
-	pDst->direction = tmp20__ >> 5 & 0x3;
-	pDst->access_policy = tmp20__ >> 7 & 0x3;
-	pDst->aggregation = tmp20__ >> 9 & 0x1;
-	pDst->psb = tmp20__ >> 10 & 0x1;
-	pDst->user_priority = tmp20__ >> 11 & 0x7;
-	pDst->tsinfo_ack_pol = tmp20__ >> 14 & 0x3;
-	tmp21__ = *pBuf;
+	pDst->traffic_type = tmp21__ >> 0 & 0x1;
+	pDst->tsid = tmp21__ >> 1 & 0xf;
+	pDst->direction = tmp21__ >> 5 & 0x3;
+	pDst->access_policy = tmp21__ >> 7 & 0x3;
+	pDst->aggregation = tmp21__ >> 9 & 0x1;
+	pDst->psb = tmp21__ >> 10 & 0x1;
+	pDst->user_priority = tmp21__ >> 11 & 0x7;
+	pDst->tsinfo_ack_pol = tmp21__ >> 14 & 0x3;
+	tmp22__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->tsinfo_rsvd = tmp21__ >> 0 & 0x7f;
-	pDst->burst_size_defn = tmp21__ >> 7 & 0x1;
-	framesntohs(pCtx, &tmp22__, pBuf, 0);
+	pDst->tsinfo_rsvd = tmp22__ >> 0 & 0x7f;
+	pDst->burst_size_defn = tmp22__ >> 7 & 0x1;
+	framesntohs(pCtx, &tmp23__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->size = tmp22__ >> 0 & 0x7fff;
-	pDst->fixed = tmp22__ >> 15 & 0x1;
+	pDst->size = tmp23__ >> 0 & 0x7fff;
+	pDst->fixed = tmp23__ >> 15 & 0x1;
 	framesntohs(pCtx, &pDst->max_msdu_size, pBuf, 0);
 	pBuf += 2;
 	ielen -= (uint8_t)2;
@@ -2524,7 +2539,6 @@
 				       tDot11fIEEDCAParamSet *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp23__;
 	uint8_t tmp24__;
 	uint8_t tmp25__;
 	uint8_t tmp26__;
@@ -2532,6 +2546,7 @@
 	uint8_t tmp28__;
 	uint8_t tmp29__;
 	uint8_t tmp30__;
+	uint8_t tmp31__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -2542,63 +2557,63 @@
 	pDst->reserved = *pBuf;
 	pBuf += 1;
 	ielen -= (uint8_t)1;
-	tmp23__ = *pBuf;
-	pBuf += 1;
-	ielen -= 1;
-	pDst->acbe_aifsn = tmp23__ >> 0 & 0xf;
-	pDst->acbe_acm = tmp23__ >> 4 & 0x1;
-	pDst->acbe_aci = tmp23__ >> 5 & 0x3;
-	pDst->unused1 = tmp23__ >> 7 & 0x1;
 	tmp24__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acbe_acwmin = tmp24__ >> 0 & 0xf;
-	pDst->acbe_acwmax = tmp24__ >> 4 & 0xf;
-	framesntohs(pCtx, &pDst->acbe_txoplimit, pBuf, 0);
-	pBuf += 2;
-	ielen -= (uint8_t)2;
+	pDst->acbe_aifsn = tmp24__ >> 0 & 0xf;
+	pDst->acbe_acm = tmp24__ >> 4 & 0x1;
+	pDst->acbe_aci = tmp24__ >> 5 & 0x3;
+	pDst->unused1 = tmp24__ >> 7 & 0x1;
 	tmp25__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acbk_aifsn = tmp25__ >> 0 & 0xf;
-	pDst->acbk_acm = tmp25__ >> 4 & 0x1;
-	pDst->acbk_aci = tmp25__ >> 5 & 0x3;
-	pDst->unused2 = tmp25__ >> 7 & 0x1;
+	pDst->acbe_acwmin = tmp25__ >> 0 & 0xf;
+	pDst->acbe_acwmax = tmp25__ >> 4 & 0xf;
+	framesntohs(pCtx, &pDst->acbe_txoplimit, pBuf, 0);
+	pBuf += 2;
+	ielen -= (uint8_t)2;
 	tmp26__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acbk_acwmin = tmp26__ >> 0 & 0xf;
-	pDst->acbk_acwmax = tmp26__ >> 4 & 0xf;
-	framesntohs(pCtx, &pDst->acbk_txoplimit, pBuf, 0);
-	pBuf += 2;
-	ielen -= (uint8_t)2;
+	pDst->acbk_aifsn = tmp26__ >> 0 & 0xf;
+	pDst->acbk_acm = tmp26__ >> 4 & 0x1;
+	pDst->acbk_aci = tmp26__ >> 5 & 0x3;
+	pDst->unused2 = tmp26__ >> 7 & 0x1;
 	tmp27__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acvi_aifsn = tmp27__ >> 0 & 0xf;
-	pDst->acvi_acm = tmp27__ >> 4 & 0x1;
-	pDst->acvi_aci = tmp27__ >> 5 & 0x3;
-	pDst->unused3 = tmp27__ >> 7 & 0x1;
+	pDst->acbk_acwmin = tmp27__ >> 0 & 0xf;
+	pDst->acbk_acwmax = tmp27__ >> 4 & 0xf;
+	framesntohs(pCtx, &pDst->acbk_txoplimit, pBuf, 0);
+	pBuf += 2;
+	ielen -= (uint8_t)2;
 	tmp28__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acvi_acwmin = tmp28__ >> 0 & 0xf;
-	pDst->acvi_acwmax = tmp28__ >> 4 & 0xf;
-	framesntohs(pCtx, &pDst->acvi_txoplimit, pBuf, 0);
-	pBuf += 2;
-	ielen -= (uint8_t)2;
+	pDst->acvi_aifsn = tmp28__ >> 0 & 0xf;
+	pDst->acvi_acm = tmp28__ >> 4 & 0x1;
+	pDst->acvi_aci = tmp28__ >> 5 & 0x3;
+	pDst->unused3 = tmp28__ >> 7 & 0x1;
 	tmp29__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acvo_aifsn = tmp29__ >> 0 & 0xf;
-	pDst->acvo_acm = tmp29__ >> 4 & 0x1;
-	pDst->acvo_aci = tmp29__ >> 5 & 0x3;
-	pDst->unused4 = tmp29__ >> 7 & 0x1;
+	pDst->acvi_acwmin = tmp29__ >> 0 & 0xf;
+	pDst->acvi_acwmax = tmp29__ >> 4 & 0xf;
+	framesntohs(pCtx, &pDst->acvi_txoplimit, pBuf, 0);
+	pBuf += 2;
+	ielen -= (uint8_t)2;
 	tmp30__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acvo_acwmin = tmp30__ >> 0 & 0xf;
-	pDst->acvo_acwmax = tmp30__ >> 4 & 0xf;
+	pDst->acvo_aifsn = tmp30__ >> 0 & 0xf;
+	pDst->acvo_acm = tmp30__ >> 4 & 0x1;
+	pDst->acvo_aci = tmp30__ >> 5 & 0x3;
+	pDst->unused4 = tmp30__ >> 7 & 0x1;
+	tmp31__ = *pBuf;
+	pBuf += 1;
+	ielen -= 1;
+	pDst->acvo_acwmin = tmp31__ >> 0 & 0xf;
+	pDst->acvo_acwmax = tmp31__ >> 4 & 0xf;
 	framesntohs(pCtx, &pDst->acvo_txoplimit, pBuf, 0);
 	(void)pCtx;
 	return status;
@@ -2613,16 +2628,16 @@
 				  tDot11fIEERPInfo *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp31__;
+	uint8_t tmp32__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	tmp31__ = *pBuf;
-	pDst->non_erp_present = tmp31__ >> 0 & 0x1;
-	pDst->use_prot = tmp31__ >> 1 & 0x1;
-	pDst->barker_preamble = tmp31__ >> 2 & 0x1;
-	pDst->unused = tmp31__ >> 3 & 0x1f;
+	tmp32__ = *pBuf;
+	pDst->non_erp_present = tmp32__ >> 0 & 0x1;
+	pDst->use_prot = tmp32__ >> 1 & 0x1;
+	pDst->barker_preamble = tmp32__ >> 2 & 0x1;
+	pDst->unused = tmp32__ >> 3 & 0x1f;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_erp_info. */
@@ -2660,7 +2675,7 @@
 					 tDot11fIEESERadMgmtCap *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp32__;
+	uint8_t tmp33__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -2668,9 +2683,9 @@
 	pDst->mgmt_state = *pBuf;
 	pBuf += 1;
 	ielen -= (uint8_t)1;
-	tmp32__ = *pBuf;
-	pDst->mbssid_mask = tmp32__ >> 0 & 0x7;
-	pDst->reserved = tmp32__ >> 3 & 0x1f;
+	tmp33__ = *pBuf;
+	pDst->mbssid_mask = tmp33__ >> 0 & 0x7;
+	pDst->reserved = tmp33__ >> 3 & 0x1f;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_ese_rad_mgmt_cap. */
@@ -2937,16 +2952,16 @@
 				 tDot11fIEFTInfo *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint16_t tmp33__;
+	uint16_t tmp34__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	framesntohs(pCtx, &tmp33__, pBuf, 0);
+	framesntohs(pCtx, &tmp34__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->reserved = tmp33__ >> 0 & 0xff;
-	pDst->IECount = tmp33__ >> 8 & 0xff;
+	pDst->reserved = tmp34__ >> 0 & 0xff;
+	pDst->IECount = tmp34__ >> 8 & 0xff;
 	DOT11F_MEMCPY(pCtx, pDst->MIC, pBuf, 16);
 	pBuf += 16;
 	ielen -= (uint8_t)16;
@@ -2976,79 +2991,79 @@
 				 tDot11fIEHTCaps *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint16_t tmp34__;
-	uint8_t tmp35__;
-	uint16_t tmp36__;
-	uint32_t tmp37__;
-	uint8_t tmp38__;
+	uint16_t tmp35__;
+	uint8_t tmp36__;
+	uint16_t tmp37__;
+	uint32_t tmp38__;
+	uint8_t tmp39__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	framesntohs(pCtx, &tmp34__, pBuf, 0);
+	framesntohs(pCtx, &tmp35__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->advCodingCap = tmp34__ >> 0 & 0x1;
-	pDst->supportedChannelWidthSet = tmp34__ >> 1 & 0x1;
-	pDst->mimoPowerSave = tmp34__ >> 2 & 0x3;
-	pDst->greenField = tmp34__ >> 4 & 0x1;
-	pDst->shortGI20MHz = tmp34__ >> 5 & 0x1;
-	pDst->shortGI40MHz = tmp34__ >> 6 & 0x1;
-	pDst->txSTBC = tmp34__ >> 7 & 0x1;
-	pDst->rxSTBC = tmp34__ >> 8 & 0x3;
-	pDst->delayedBA = tmp34__ >> 10 & 0x1;
-	pDst->maximalAMSDUsize = tmp34__ >> 11 & 0x1;
-	pDst->dsssCckMode40MHz = tmp34__ >> 12 & 0x1;
-	pDst->psmp = tmp34__ >> 13 & 0x1;
-	pDst->stbcControlFrame = tmp34__ >> 14 & 0x1;
-	pDst->lsigTXOPProtection = tmp34__ >> 15 & 0x1;
-	tmp35__ = *pBuf;
+	pDst->advCodingCap = tmp35__ >> 0 & 0x1;
+	pDst->supportedChannelWidthSet = tmp35__ >> 1 & 0x1;
+	pDst->mimoPowerSave = tmp35__ >> 2 & 0x3;
+	pDst->greenField = tmp35__ >> 4 & 0x1;
+	pDst->shortGI20MHz = tmp35__ >> 5 & 0x1;
+	pDst->shortGI40MHz = tmp35__ >> 6 & 0x1;
+	pDst->txSTBC = tmp35__ >> 7 & 0x1;
+	pDst->rxSTBC = tmp35__ >> 8 & 0x3;
+	pDst->delayedBA = tmp35__ >> 10 & 0x1;
+	pDst->maximalAMSDUsize = tmp35__ >> 11 & 0x1;
+	pDst->dsssCckMode40MHz = tmp35__ >> 12 & 0x1;
+	pDst->psmp = tmp35__ >> 13 & 0x1;
+	pDst->stbcControlFrame = tmp35__ >> 14 & 0x1;
+	pDst->lsigTXOPProtection = tmp35__ >> 15 & 0x1;
+	tmp36__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->maxRxAMPDUFactor = tmp35__ >> 0 & 0x3;
-	pDst->mpduDensity = tmp35__ >> 2 & 0x7;
-	pDst->reserved1 = tmp35__ >> 5 & 0x7;
+	pDst->maxRxAMPDUFactor = tmp36__ >> 0 & 0x3;
+	pDst->mpduDensity = tmp36__ >> 2 & 0x7;
+	pDst->reserved1 = tmp36__ >> 5 & 0x7;
 	DOT11F_MEMCPY(pCtx, pDst->supportedMCSSet, pBuf, 16);
 	pBuf += 16;
 	ielen -= (uint8_t)16;
-	framesntohs(pCtx, &tmp36__, pBuf, 0);
+	framesntohs(pCtx, &tmp37__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->pco = tmp36__ >> 0 & 0x1;
-	pDst->transitionTime = tmp36__ >> 1 & 0x3;
-	pDst->reserved2 = tmp36__ >> 3 & 0x1f;
-	pDst->mcsFeedback = tmp36__ >> 8 & 0x3;
-	pDst->reserved3 = tmp36__ >> 10 & 0x3f;
-	framesntohl(pCtx, &tmp37__, pBuf, 0);
+	pDst->pco = tmp37__ >> 0 & 0x1;
+	pDst->transitionTime = tmp37__ >> 1 & 0x3;
+	pDst->reserved2 = tmp37__ >> 3 & 0x1f;
+	pDst->mcsFeedback = tmp37__ >> 8 & 0x3;
+	pDst->reserved3 = tmp37__ >> 10 & 0x3f;
+	framesntohl(pCtx, &tmp38__, pBuf, 0);
 	pBuf += 4;
 	ielen -= 4;
-	pDst->txBF = tmp37__ >> 0 & 0x1;
-	pDst->rxStaggeredSounding = tmp37__ >> 1 & 0x1;
-	pDst->txStaggeredSounding = tmp37__ >> 2 & 0x1;
-	pDst->rxZLF = tmp37__ >> 3 & 0x1;
-	pDst->txZLF = tmp37__ >> 4 & 0x1;
-	pDst->implicitTxBF = tmp37__ >> 5 & 0x1;
-	pDst->calibration = tmp37__ >> 6 & 0x3;
-	pDst->explicitCSITxBF = tmp37__ >> 8 & 0x1;
-	pDst->explicitUncompressedSteeringMatrix = tmp37__ >> 9 & 0x1;
-	pDst->explicitBFCSIFeedback = tmp37__ >> 10 & 0x7;
-	pDst->explicitUncompressedSteeringMatrixFeedback = tmp37__ >> 13 & 0x7;
-	pDst->explicitCompressedSteeringMatrixFeedback = tmp37__ >> 16 & 0x7;
-	pDst->csiNumBFAntennae = tmp37__ >> 19 & 0x3;
-	pDst->uncompressedSteeringMatrixBFAntennae = tmp37__ >> 21 & 0x3;
-	pDst->compressedSteeringMatrixBFAntennae = tmp37__ >> 23 & 0x3;
-	pDst->reserved4 = tmp37__ >> 25 & 0x7f;
-	tmp38__ = *pBuf;
+	pDst->txBF = tmp38__ >> 0 & 0x1;
+	pDst->rxStaggeredSounding = tmp38__ >> 1 & 0x1;
+	pDst->txStaggeredSounding = tmp38__ >> 2 & 0x1;
+	pDst->rxZLF = tmp38__ >> 3 & 0x1;
+	pDst->txZLF = tmp38__ >> 4 & 0x1;
+	pDst->implicitTxBF = tmp38__ >> 5 & 0x1;
+	pDst->calibration = tmp38__ >> 6 & 0x3;
+	pDst->explicitCSITxBF = tmp38__ >> 8 & 0x1;
+	pDst->explicitUncompressedSteeringMatrix = tmp38__ >> 9 & 0x1;
+	pDst->explicitBFCSIFeedback = tmp38__ >> 10 & 0x7;
+	pDst->explicitUncompressedSteeringMatrixFeedback = tmp38__ >> 13 & 0x7;
+	pDst->explicitCompressedSteeringMatrixFeedback = tmp38__ >> 16 & 0x7;
+	pDst->csiNumBFAntennae = tmp38__ >> 19 & 0x3;
+	pDst->uncompressedSteeringMatrixBFAntennae = tmp38__ >> 21 & 0x3;
+	pDst->compressedSteeringMatrixBFAntennae = tmp38__ >> 23 & 0x3;
+	pDst->reserved4 = tmp38__ >> 25 & 0x7f;
+	tmp39__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->antennaSelection = tmp38__ >> 0 & 0x1;
-	pDst->explicitCSIFeedbackTx = tmp38__ >> 1 & 0x1;
-	pDst->antennaIndicesFeedbackTx = tmp38__ >> 2 & 0x1;
-	pDst->explicitCSIFeedback = tmp38__ >> 3 & 0x1;
-	pDst->antennaIndicesFeedback = tmp38__ >> 4 & 0x1;
-	pDst->rxAS = tmp38__ >> 5 & 0x1;
-	pDst->txSoundingPPDUs = tmp38__ >> 6 & 0x1;
-	pDst->reserved5 = tmp38__ >> 7 & 0x1;
+	pDst->antennaSelection = tmp39__ >> 0 & 0x1;
+	pDst->explicitCSIFeedbackTx = tmp39__ >> 1 & 0x1;
+	pDst->antennaIndicesFeedbackTx = tmp39__ >> 2 & 0x1;
+	pDst->explicitCSIFeedback = tmp39__ >> 3 & 0x1;
+	pDst->antennaIndicesFeedback = tmp39__ >> 4 & 0x1;
+	pDst->rxAS = tmp39__ >> 5 & 0x1;
+	pDst->txSoundingPPDUs = tmp39__ >> 6 & 0x1;
+	pDst->reserved5 = tmp39__ >> 7 & 0x1;
 	pDst->num_rsvd = (uint8_t)(ielen);
 	if (ielen > 32) {
 		pDst->present = 0;
@@ -3069,9 +3084,9 @@
 				 tDot11fIEHTInfo *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp39__;
-	uint16_t tmp40__;
+	uint8_t tmp40__;
 	uint16_t tmp41__;
+	uint16_t tmp42__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -3079,32 +3094,32 @@
 	pDst->primaryChannel = *pBuf;
 	pBuf += 1;
 	ielen -= (uint8_t)1;
-	tmp39__ = *pBuf;
+	tmp40__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->secondaryChannelOffset = tmp39__ >> 0 & 0x3;
-	pDst->recommendedTxWidthSet = tmp39__ >> 2 & 0x1;
-	pDst->rifsMode = tmp39__ >> 3 & 0x1;
-	pDst->controlledAccessOnly = tmp39__ >> 4 & 0x1;
-	pDst->serviceIntervalGranularity = tmp39__ >> 5 & 0x7;
-	framesntohs(pCtx, &tmp40__, pBuf, 0);
-	pBuf += 2;
-	ielen -= 2;
-	pDst->opMode = tmp40__ >> 0 & 0x3;
-	pDst->nonGFDevicesPresent = tmp40__ >> 2 & 0x1;
-	pDst->transmitBurstLimit = tmp40__ >> 3 & 0x1;
-	pDst->obssNonHTStaPresent = tmp40__ >> 4 & 0x1;
-	pDst->reserved = tmp40__ >> 5 & 0x7ff;
+	pDst->secondaryChannelOffset = tmp40__ >> 0 & 0x3;
+	pDst->recommendedTxWidthSet = tmp40__ >> 2 & 0x1;
+	pDst->rifsMode = tmp40__ >> 3 & 0x1;
+	pDst->controlledAccessOnly = tmp40__ >> 4 & 0x1;
+	pDst->serviceIntervalGranularity = tmp40__ >> 5 & 0x7;
 	framesntohs(pCtx, &tmp41__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->basicSTBCMCS = tmp41__ >> 0 & 0x7f;
-	pDst->dualCTSProtection = tmp41__ >> 7 & 0x1;
-	pDst->secondaryBeacon = tmp41__ >> 8 & 0x1;
-	pDst->lsigTXOPProtectionFullSupport = tmp41__ >> 9 & 0x1;
-	pDst->pcoActive = tmp41__ >> 10 & 0x1;
-	pDst->pcoPhase = tmp41__ >> 11 & 0x1;
-	pDst->reserved2 = tmp41__ >> 12 & 0xf;
+	pDst->opMode = tmp41__ >> 0 & 0x3;
+	pDst->nonGFDevicesPresent = tmp41__ >> 2 & 0x1;
+	pDst->transmitBurstLimit = tmp41__ >> 3 & 0x1;
+	pDst->obssNonHTStaPresent = tmp41__ >> 4 & 0x1;
+	pDst->reserved = tmp41__ >> 5 & 0x7ff;
+	framesntohs(pCtx, &tmp42__, pBuf, 0);
+	pBuf += 2;
+	ielen -= 2;
+	pDst->basicSTBCMCS = tmp42__ >> 0 & 0x7f;
+	pDst->dualCTSProtection = tmp42__ >> 7 & 0x1;
+	pDst->secondaryBeacon = tmp42__ >> 8 & 0x1;
+	pDst->lsigTXOPProtectionFullSupport = tmp42__ >> 9 & 0x1;
+	pDst->pcoActive = tmp42__ >> 10 & 0x1;
+	pDst->pcoPhase = tmp42__ >> 11 & 0x1;
+	pDst->reserved2 = tmp42__ >> 12 & 0xf;
 	DOT11F_MEMCPY(pCtx, pDst->basicMCSSet, pBuf, 16);
 	pBuf += 16;
 	ielen -= (uint8_t)16;
@@ -3183,9 +3198,9 @@
 					    tDot11fIEMeasurementReport *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp42__;
 	uint8_t tmp43__;
 	uint8_t tmp44__;
+	uint8_t tmp45__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -3193,13 +3208,13 @@
 	pDst->token = *pBuf;
 	pBuf += 1;
 	ielen -= (uint8_t)1;
-	tmp42__ = *pBuf;
+	tmp43__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->late = tmp42__ >> 0 & 0x1;
-	pDst->incapable = tmp42__ >> 1 & 0x1;
-	pDst->refused = tmp42__ >> 2 & 0x1;
-	pDst->unused = tmp42__ >> 3 & 0x1f;
+	pDst->late = tmp43__ >> 0 & 0x1;
+	pDst->incapable = tmp43__ >> 1 & 0x1;
+	pDst->refused = tmp43__ >> 2 & 0x1;
+	pDst->unused = tmp43__ >> 3 & 0x1f;
 	pDst->type = *pBuf;
 	pBuf += 1;
 	ielen -= (uint8_t)1;
@@ -3217,15 +3232,15 @@
 			framesntohs(pCtx, &pDst->report.Basic.meas_duration, pBuf, 0);
 			pBuf += 2;
 			ielen -= (uint8_t)2;
-			tmp43__ = *pBuf;
+			tmp44__ = *pBuf;
 			pBuf += 1;
 			ielen -= 1;
-			pDst->report.Basic.bss = tmp43__ >> 0 & 0x1;
-			pDst->report.Basic.ofdm_preamble = tmp43__ >> 1 & 0x1;
-			pDst->report.Basic.unid_signal = tmp43__ >> 2 & 0x1;
-			pDst->report.Basic.rader = tmp43__ >> 3 & 0x1;
-			pDst->report.Basic.unmeasured = tmp43__ >> 4 & 0x1;
-			pDst->report.Basic.unused = tmp43__ >> 5 & 0x7;
+			pDst->report.Basic.bss = tmp44__ >> 0 & 0x1;
+			pDst->report.Basic.ofdm_preamble = tmp44__ >> 1 & 0x1;
+			pDst->report.Basic.unid_signal = tmp44__ >> 2 & 0x1;
+			pDst->report.Basic.rader = tmp44__ >> 3 & 0x1;
+			pDst->report.Basic.unmeasured = tmp44__ >> 4 & 0x1;
+			pDst->report.Basic.unused = tmp44__ >> 5 & 0x7;
 			break;
 		case 1:
 			pDst->report.CCA.channel = *pBuf;
@@ -3289,11 +3304,11 @@
 			framesntohs(pCtx, &pDst->report.Beacon.meas_duration, pBuf, 0);
 			pBuf += 2;
 			ielen -= (uint8_t)2;
-			tmp44__ = *pBuf;
+			tmp45__ = *pBuf;
 			pBuf += 1;
 			ielen -= 1;
-			pDst->report.Beacon.condensed_PHY = tmp44__ >> 0 & 0x7f;
-			pDst->report.Beacon.reported_frame_type = tmp44__ >> 7 & 0x1;
+			pDst->report.Beacon.condensed_PHY = tmp45__ >> 0 & 0x7f;
+			pDst->report.Beacon.reported_frame_type = tmp45__ >> 7 & 0x1;
 			pDst->report.Beacon.RCPI = *pBuf;
 			pBuf += 1;
 			ielen -= (uint8_t)1;
@@ -3362,7 +3377,7 @@
 					     tDot11fIEMeasurementRequest *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp45__;
+	uint8_t tmp46__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -3370,15 +3385,15 @@
 	pDst->measurement_token = *pBuf;
 	pBuf += 1;
 	ielen -= (uint8_t)1;
-	tmp45__ = *pBuf;
+	tmp46__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->parallel = tmp45__ >> 0 & 0x1;
-	pDst->enable = tmp45__ >> 1 & 0x1;
-	pDst->request = tmp45__ >> 2 & 0x1;
-	pDst->report = tmp45__ >> 3 & 0x1;
-	pDst->durationMandatory = tmp45__ >> 4 & 0x1;
-	pDst->unused = tmp45__ >> 5 & 0x7;
+	pDst->parallel = tmp46__ >> 0 & 0x1;
+	pDst->enable = tmp46__ >> 1 & 0x1;
+	pDst->request = tmp46__ >> 2 & 0x1;
+	pDst->report = tmp46__ >> 3 & 0x1;
+	pDst->durationMandatory = tmp46__ >> 4 & 0x1;
+	pDst->unused = tmp46__ >> 5 & 0x7;
 	pDst->measurement_type = *pBuf;
 	pBuf += 1;
 	ielen -= (uint8_t)1;
@@ -3457,7 +3472,7 @@
 					 tDot11fIEMobilityDomain *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp46__;
+	uint8_t tmp47__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -3465,10 +3480,10 @@
 	framesntohs(pCtx, &pDst->MDID, pBuf, 0);
 	pBuf += 2;
 	ielen -= (uint8_t)2;
-	tmp46__ = *pBuf;
-	pDst->overDSCap = tmp46__ >> 0 & 0x1;
-	pDst->resourceReqCap = tmp46__ >> 1 & 0x1;
-	pDst->reserved = tmp46__ >> 2 & 0x3f;
+	tmp47__ = *pBuf;
+	pDst->overDSCap = tmp47__ >> 0 & 0x1;
+	pDst->resourceReqCap = tmp47__ >> 1 & 0x1;
+	pDst->reserved = tmp47__ >> 2 & 0x3f;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_mobility_domain. */
@@ -3509,8 +3524,8 @@
 					 tDot11fIENeighborReport *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp47__;
 	uint8_t tmp48__;
+	uint8_t tmp49__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -3518,23 +3533,23 @@
 	DOT11F_MEMCPY(pCtx, pDst->bssid, pBuf, 6);
 	pBuf += 6;
 	ielen -= (uint8_t)6;
-	tmp47__ = *pBuf;
-	pBuf += 1;
-	ielen -= 1;
-	pDst->APReachability = tmp47__ >> 0 & 0x3;
-	pDst->Security = tmp47__ >> 2 & 0x1;
-	pDst->KeyScope = tmp47__ >> 3 & 0x1;
-	pDst->SpecMgmtCap = tmp47__ >> 4 & 0x1;
-	pDst->QosCap = tmp47__ >> 5 & 0x1;
-	pDst->apsd = tmp47__ >> 6 & 0x1;
-	pDst->rrm = tmp47__ >> 7 & 0x1;
 	tmp48__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->DelayedBA = tmp48__ >> 0 & 0x1;
-	pDst->ImmBA = tmp48__ >> 1 & 0x1;
-	pDst->MobilityDomain = tmp48__ >> 2 & 0x1;
-	pDst->reserved = tmp48__ >> 3 & 0x1f;
+	pDst->APReachability = tmp48__ >> 0 & 0x3;
+	pDst->Security = tmp48__ >> 2 & 0x1;
+	pDst->KeyScope = tmp48__ >> 3 & 0x1;
+	pDst->SpecMgmtCap = tmp48__ >> 4 & 0x1;
+	pDst->QosCap = tmp48__ >> 5 & 0x1;
+	pDst->apsd = tmp48__ >> 6 & 0x1;
+	pDst->rrm = tmp48__ >> 7 & 0x1;
+	tmp49__ = *pBuf;
+	pBuf += 1;
+	ielen -= 1;
+	pDst->DelayedBA = tmp49__ >> 0 & 0x1;
+	pDst->ImmBA = tmp49__ >> 1 & 0x1;
+	pDst->MobilityDomain = tmp49__ >> 2 & 0x1;
+	pDst->reserved = tmp49__ >> 3 & 0x1f;
 	framesntohs(pCtx, &pDst->reserved1, pBuf, 0);
 	pBuf += 2;
 	ielen -= (uint8_t)2;
@@ -3603,16 +3618,16 @@
 					 tDot11fIEOperatingMode *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp49__;
+	uint8_t tmp50__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	tmp49__ = *pBuf;
-	pDst->chanWidth = tmp49__ >> 0 & 0x3;
-	pDst->reserved = tmp49__ >> 2 & 0x3;
-	pDst->rxNSS = tmp49__ >> 4 & 0x7;
-	pDst->rxNSSType = tmp49__ >> 7 & 0x1;
+	tmp50__ = *pBuf;
+	pDst->chanWidth = tmp50__ >> 0 & 0x3;
+	pDst->reserved = tmp50__ >> 2 & 0x3;
+	pDst->rxNSS = tmp50__ >> 4 & 0x7;
+	pDst->rxNSSType = tmp50__ >> 7 & 0x1;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_operating_mode. */
@@ -3928,17 +3943,17 @@
 					 tDot11fIEPUBufferStatus *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp50__;
+	uint8_t tmp51__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	tmp50__ = *pBuf;
-	pDst->ac_bk_traffic_aval = tmp50__ >> 0 & 0x1;
-	pDst->ac_be_traffic_aval = tmp50__ >> 1 & 0x1;
-	pDst->ac_vi_traffic_aval = tmp50__ >> 2 & 0x1;
-	pDst->ac_vo_traffic_aval = tmp50__ >> 3 & 0x1;
-	pDst->reserved = tmp50__ >> 4 & 0xf;
+	tmp51__ = *pBuf;
+	pDst->ac_bk_traffic_aval = tmp51__ >> 0 & 0x1;
+	pDst->ac_be_traffic_aval = tmp51__ >> 1 & 0x1;
+	pDst->ac_vi_traffic_aval = tmp51__ >> 2 & 0x1;
+	pDst->ac_vo_traffic_aval = tmp51__ >> 3 & 0x1;
+	pDst->reserved = tmp51__ >> 4 & 0xf;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_pu_buffer_status. */
@@ -4036,17 +4051,17 @@
 				    tDot11fIEQOSCapsAp *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp51__;
+	uint8_t tmp52__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	tmp51__ = *pBuf;
-	pDst->count = tmp51__ >> 0 & 0xf;
-	pDst->qack = tmp51__ >> 4 & 0x1;
-	pDst->qreq = tmp51__ >> 5 & 0x1;
-	pDst->txopreq = tmp51__ >> 6 & 0x1;
-	pDst->reserved = tmp51__ >> 7 & 0x1;
+	tmp52__ = *pBuf;
+	pDst->count = tmp52__ >> 0 & 0xf;
+	pDst->qack = tmp52__ >> 4 & 0x1;
+	pDst->qreq = tmp52__ >> 5 & 0x1;
+	pDst->txopreq = tmp52__ >> 6 & 0x1;
+	pDst->reserved = tmp52__ >> 7 & 0x1;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_qos_caps_ap. */
@@ -4060,19 +4075,19 @@
 					 tDot11fIEQOSCapsStation *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp52__;
+	uint8_t tmp53__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	tmp52__ = *pBuf;
-	pDst->acvo_uapsd = tmp52__ >> 0 & 0x1;
-	pDst->acvi_uapsd = tmp52__ >> 1 & 0x1;
-	pDst->acbk_uapsd = tmp52__ >> 2 & 0x1;
-	pDst->acbe_uapsd = tmp52__ >> 3 & 0x1;
-	pDst->qack = tmp52__ >> 4 & 0x1;
-	pDst->max_sp_length = tmp52__ >> 5 & 0x3;
-	pDst->more_data_ack = tmp52__ >> 7 & 0x1;
+	tmp53__ = *pBuf;
+	pDst->acvo_uapsd = tmp53__ >> 0 & 0x1;
+	pDst->acvi_uapsd = tmp53__ >> 1 & 0x1;
+	pDst->acbk_uapsd = tmp53__ >> 2 & 0x1;
+	pDst->acbe_uapsd = tmp53__ >> 3 & 0x1;
+	pDst->qack = tmp53__ >> 4 & 0x1;
+	pDst->max_sp_length = tmp53__ >> 5 & 0x3;
+	pDst->more_data_ack = tmp53__ >> 7 & 0x1;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_qos_caps_station. */
@@ -4622,7 +4637,7 @@
 			       tDot11fIEWAPI *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint16_t tmp53__;
+	uint16_t tmp54__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -4659,11 +4674,11 @@
 	DOT11F_MEMCPY(pCtx, pDst->multicast_cipher_suite, pBuf, 4);
 	pBuf += 4;
 	ielen -= (uint8_t)4;
-	framesntohs(pCtx, &tmp53__, pBuf, 0);
+	framesntohs(pCtx, &tmp54__, pBuf, 0);
 	pBuf += 2;
 	ielen -= 2;
-	pDst->preauth = tmp53__ >> 0 & 0x1;
-	pDst->reserved = tmp53__ >> 1 & 0x7fff;
+	pDst->preauth = tmp54__ >> 0 & 0x1;
+	pDst->reserved = tmp54__ >> 1 & 0x7fff;
 	if (!ielen) {
 		pDst->bkid_count = 0U;
 		return 0U;
@@ -4760,7 +4775,7 @@
 				  tDot11fIEWMMCaps *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp54__;
+	uint8_t tmp55__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -4772,12 +4787,12 @@
 		pDst->present = 0;
 		return status | DOT11F_BAD_FIXED_VALUE;
 	}
-	tmp54__ = *pBuf;
-	pDst->reserved = tmp54__ >> 0 & 0xf;
-	pDst->qack = tmp54__ >> 4 & 0x1;
-	pDst->queue_request = tmp54__ >> 5 & 0x1;
-	pDst->txop_request = tmp54__ >> 6 & 0x1;
-	pDst->more_ack = tmp54__ >> 7 & 0x1;
+	tmp55__ = *pBuf;
+	pDst->reserved = tmp55__ >> 0 & 0xf;
+	pDst->qack = tmp55__ >> 4 & 0x1;
+	pDst->queue_request = tmp55__ >> 5 & 0x1;
+	pDst->txop_request = tmp55__ >> 6 & 0x1;
+	pDst->more_ack = tmp55__ >> 7 & 0x1;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_wmm_caps. */
@@ -4791,7 +4806,7 @@
 				    tDot11fIEWMMInfoAp *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp55__;
+	uint8_t tmp56__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -4799,10 +4814,10 @@
 	pDst->version = *pBuf;
 	pBuf += 1;
 	ielen -= (uint8_t)1;
-	tmp55__ = *pBuf;
-	pDst->param_set_count = tmp55__ >> 0 & 0xf;
-	pDst->reserved = tmp55__ >> 4 & 0x7;
-	pDst->uapsd = tmp55__ >> 7 & 0x1;
+	tmp56__ = *pBuf;
+	pDst->param_set_count = tmp56__ >> 0 & 0xf;
+	pDst->reserved = tmp56__ >> 4 & 0x7;
+	pDst->uapsd = tmp56__ >> 7 & 0x1;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_wmm_info_ap. */
@@ -4816,7 +4831,7 @@
 					 tDot11fIEWMMInfoStation *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp56__;
+	uint8_t tmp57__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -4824,14 +4839,14 @@
 	pDst->version = *pBuf;
 	pBuf += 1;
 	ielen -= (uint8_t)1;
-	tmp56__ = *pBuf;
-	pDst->acvo_uapsd = tmp56__ >> 0 & 0x1;
-	pDst->acvi_uapsd = tmp56__ >> 1 & 0x1;
-	pDst->acbk_uapsd = tmp56__ >> 2 & 0x1;
-	pDst->acbe_uapsd = tmp56__ >> 3 & 0x1;
-	pDst->reserved1 = tmp56__ >> 4 & 0x1;
-	pDst->max_sp_length = tmp56__ >> 5 & 0x3;
-	pDst->reserved2 = tmp56__ >> 7 & 0x1;
+	tmp57__ = *pBuf;
+	pDst->acvo_uapsd = tmp57__ >> 0 & 0x1;
+	pDst->acvi_uapsd = tmp57__ >> 1 & 0x1;
+	pDst->acbk_uapsd = tmp57__ >> 2 & 0x1;
+	pDst->acbe_uapsd = tmp57__ >> 3 & 0x1;
+	pDst->reserved1 = tmp57__ >> 4 & 0x1;
+	pDst->max_sp_length = tmp57__ >> 5 & 0x3;
+	pDst->reserved2 = tmp57__ >> 7 & 0x1;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_wmm_info_station. */
@@ -4845,7 +4860,6 @@
 				    tDot11fIEWMMParams *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp57__;
 	uint8_t tmp58__;
 	uint8_t tmp59__;
 	uint8_t tmp60__;
@@ -4853,6 +4867,7 @@
 	uint8_t tmp62__;
 	uint8_t tmp63__;
 	uint8_t tmp64__;
+	uint8_t tmp65__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
@@ -4870,63 +4885,63 @@
 	pDst->reserved2 = *pBuf;
 	pBuf += 1;
 	ielen -= (uint8_t)1;
-	tmp57__ = *pBuf;
-	pBuf += 1;
-	ielen -= 1;
-	pDst->acbe_aifsn = tmp57__ >> 0 & 0xf;
-	pDst->acbe_acm = tmp57__ >> 4 & 0x1;
-	pDst->acbe_aci = tmp57__ >> 5 & 0x3;
-	pDst->unused1 = tmp57__ >> 7 & 0x1;
 	tmp58__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acbe_acwmin = tmp58__ >> 0 & 0xf;
-	pDst->acbe_acwmax = tmp58__ >> 4 & 0xf;
-	framesntohs(pCtx, &pDst->acbe_txoplimit, pBuf, 0);
-	pBuf += 2;
-	ielen -= (uint8_t)2;
+	pDst->acbe_aifsn = tmp58__ >> 0 & 0xf;
+	pDst->acbe_acm = tmp58__ >> 4 & 0x1;
+	pDst->acbe_aci = tmp58__ >> 5 & 0x3;
+	pDst->unused1 = tmp58__ >> 7 & 0x1;
 	tmp59__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acbk_aifsn = tmp59__ >> 0 & 0xf;
-	pDst->acbk_acm = tmp59__ >> 4 & 0x1;
-	pDst->acbk_aci = tmp59__ >> 5 & 0x3;
-	pDst->unused2 = tmp59__ >> 7 & 0x1;
+	pDst->acbe_acwmin = tmp59__ >> 0 & 0xf;
+	pDst->acbe_acwmax = tmp59__ >> 4 & 0xf;
+	framesntohs(pCtx, &pDst->acbe_txoplimit, pBuf, 0);
+	pBuf += 2;
+	ielen -= (uint8_t)2;
 	tmp60__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acbk_acwmin = tmp60__ >> 0 & 0xf;
-	pDst->acbk_acwmax = tmp60__ >> 4 & 0xf;
-	framesntohs(pCtx, &pDst->acbk_txoplimit, pBuf, 0);
-	pBuf += 2;
-	ielen -= (uint8_t)2;
+	pDst->acbk_aifsn = tmp60__ >> 0 & 0xf;
+	pDst->acbk_acm = tmp60__ >> 4 & 0x1;
+	pDst->acbk_aci = tmp60__ >> 5 & 0x3;
+	pDst->unused2 = tmp60__ >> 7 & 0x1;
 	tmp61__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acvi_aifsn = tmp61__ >> 0 & 0xf;
-	pDst->acvi_acm = tmp61__ >> 4 & 0x1;
-	pDst->acvi_aci = tmp61__ >> 5 & 0x3;
-	pDst->unused3 = tmp61__ >> 7 & 0x1;
+	pDst->acbk_acwmin = tmp61__ >> 0 & 0xf;
+	pDst->acbk_acwmax = tmp61__ >> 4 & 0xf;
+	framesntohs(pCtx, &pDst->acbk_txoplimit, pBuf, 0);
+	pBuf += 2;
+	ielen -= (uint8_t)2;
 	tmp62__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acvi_acwmin = tmp62__ >> 0 & 0xf;
-	pDst->acvi_acwmax = tmp62__ >> 4 & 0xf;
-	framesntohs(pCtx, &pDst->acvi_txoplimit, pBuf, 0);
-	pBuf += 2;
-	ielen -= (uint8_t)2;
+	pDst->acvi_aifsn = tmp62__ >> 0 & 0xf;
+	pDst->acvi_acm = tmp62__ >> 4 & 0x1;
+	pDst->acvi_aci = tmp62__ >> 5 & 0x3;
+	pDst->unused3 = tmp62__ >> 7 & 0x1;
 	tmp63__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acvo_aifsn = tmp63__ >> 0 & 0xf;
-	pDst->acvo_acm = tmp63__ >> 4 & 0x1;
-	pDst->acvo_aci = tmp63__ >> 5 & 0x3;
-	pDst->unused4 = tmp63__ >> 7 & 0x1;
+	pDst->acvi_acwmin = tmp63__ >> 0 & 0xf;
+	pDst->acvi_acwmax = tmp63__ >> 4 & 0xf;
+	framesntohs(pCtx, &pDst->acvi_txoplimit, pBuf, 0);
+	pBuf += 2;
+	ielen -= (uint8_t)2;
 	tmp64__ = *pBuf;
 	pBuf += 1;
 	ielen -= 1;
-	pDst->acvo_acwmin = tmp64__ >> 0 & 0xf;
-	pDst->acvo_acwmax = tmp64__ >> 4 & 0xf;
+	pDst->acvo_aifsn = tmp64__ >> 0 & 0xf;
+	pDst->acvo_acm = tmp64__ >> 4 & 0x1;
+	pDst->acvo_aci = tmp64__ >> 5 & 0x3;
+	pDst->unused4 = tmp64__ >> 7 & 0x1;
+	tmp65__ = *pBuf;
+	pBuf += 1;
+	ielen -= 1;
+	pDst->acvo_acwmin = tmp65__ >> 0 & 0xf;
+	pDst->acvo_acwmax = tmp65__ >> 4 & 0xf;
 	framesntohs(pCtx, &pDst->acvo_txoplimit, pBuf, 0);
 	(void)pCtx;
 	return status;
@@ -5550,18 +5565,18 @@
 						 tDot11fIEht2040_bss_coexistence *pDst)
 {
 	uint32_t status = DOT11F_PARSE_SUCCESS;
-	uint8_t tmp65__;
+	uint8_t tmp66__;
 	(void) pBuf; (void)ielen; /* Shutup the compiler */
 	if (pDst->present)
 		status = DOT11F_DUPLICATE_IE;
 	pDst->present = 1;
-	tmp65__ = *pBuf;
-	pDst->info_request = tmp65__ >> 0 & 0x1;
-	pDst->forty_mhz_intolerant = tmp65__ >> 1 & 0x1;
-	pDst->twenty_mhz_bsswidth_req = tmp65__ >> 2 & 0x1;
-	pDst->obss_scan_exemption_req = tmp65__ >> 3 & 0x1;
-	pDst->obss_scan_exemption_grant = tmp65__ >> 4 & 0x1;
-	pDst->unused = tmp65__ >> 5 & 0x7;
+	tmp66__ = *pBuf;
+	pDst->info_request = tmp66__ >> 0 & 0x1;
+	pDst->forty_mhz_intolerant = tmp66__ >> 1 & 0x1;
+	pDst->twenty_mhz_bsswidth_req = tmp66__ >> 2 & 0x1;
+	pDst->obss_scan_exemption_req = tmp66__ >> 3 & 0x1;
+	pDst->obss_scan_exemption_grant = tmp66__ >> 4 & 0x1;
+	pDst->unused = tmp66__ >> 5 & 0x7;
 	(void)pCtx;
 	return status;
 } /* End dot11f_unpack_ie_ht2040_bss_coexistence. */
@@ -8391,6 +8406,36 @@
 
 } /* End dot11f_unpack_wmm_del_ts. */
 
+static const tFFDefn FFS_ext_channel_switch_action_frame[] = {
+	{ "Category", offsetof(tDot11fext_channel_switch_action_frame, Category),
+	SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
+	{ "Action", offsetof(tDot11fext_channel_switch_action_frame, Action),
+	SigFfAction, DOT11F_FF_ACTION_LEN, },
+	{ "ext_chan_switch_ann_action",
+	offsetof(tDot11fext_channel_switch_action_frame,
+	ext_chan_switch_ann_action), SigFfext_chan_switch_ann_action,
+	DOT11F_FF_EXT_CHAN_SWITCH_ANN_ACTION_LEN, },
+	{ NULL, 0, 0, 0,},
+};
+
+static const tIEDefn IES_ext_channel_switch_action_frame[] = {
+	{0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
+
+uint32_t dot11f_unpack_ext_channel_switch_action_frame(tpAniSirGlobal pCtx,
+		uint8_t *pBuf, uint32_t nBuf,
+		tDot11fext_channel_switch_action_frame *pFrm)
+{
+	uint32_t i = 0;
+	uint32_t status = 0;
+	status = unpack_core(pCtx, pBuf, nBuf,
+		      FFS_ext_channel_switch_action_frame, IES_ext_channel_switch_action_frame,
+		      (uint8_t *)pFrm, sizeof(*pFrm));
+
+	(void)i;
+	return status;
+
+} /* End dot11f_unpack_ext_channel_switch_action_frame. */
+
 static const tFFDefn FFS_ht2040_bss_coexistence_mgmt_action_frame[] = {
 	{ "Category", offsetof(tDot11fht2040_bss_coexistence_mgmt_action_frame,
 	Category), SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
@@ -8625,6 +8670,11 @@
 			    pBufRemaining, (tDot11fFfVhtUserPositionArray *)
 			    (pFrm + pFf->offset));
 			break;
+		case SigFfext_chan_switch_ann_action:
+			dot11f_unpack_ff_ext_chan_switch_ann_action(pCtx,
+			    pBufRemaining, (tDot11fFfext_chan_switch_ann_action *)
+			    (pFrm + pFf->offset));
+			break;
 		default:
 			FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR: I don'"
 				   "t know about the FF signature %d-- this is most "
@@ -11374,6 +11424,16 @@
 	return status;
 } /* End dot11f_get_packed_wmm_del_ts_size. */
 
+uint32_t dot11f_get_packed_ext_channel_switch_action_frame_size(tpAniSirGlobal pCtx,
+	tDot11fext_channel_switch_action_frame *pFrm, uint32_t *pnNeeded)
+{
+	uint32_t status = 0;
+	*pnNeeded = 6;
+	status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
+				      IES_ext_channel_switch_action_frame);
+	return status;
+} /* End dot11f_get_packed_ext_channel_switch_action_frame_size. */
+
 uint32_t dot11f_get_packed_ht2040_bss_coexistence_mgmt_action_frameSize(tpAniSirGlobal pCtx,
 	tDot11fht2040_bss_coexistence_mgmt_action_frame *pFrm, uint32_t *pnNeeded)
 {
@@ -12625,25 +12685,25 @@
 				 tDot11fFfCapabilities *pSrc,
 				 uint8_t *pBuf)
 {
-	uint16_t tmp66__;
-	tmp66__ = 0U;
-	tmp66__ |= (pSrc->ess << 0);
-	tmp66__ |= (pSrc->ibss << 1);
-	tmp66__ |= (pSrc->cfPollable << 2);
-	tmp66__ |= (pSrc->cfPollReq << 3);
-	tmp66__ |= (pSrc->privacy << 4);
-	tmp66__ |= (pSrc->shortPreamble << 5);
-	tmp66__ |= (pSrc->pbcc << 6);
-	tmp66__ |= (pSrc->channelAgility << 7);
-	tmp66__ |= (pSrc->spectrumMgt << 8);
-	tmp66__ |= (pSrc->qos << 9);
-	tmp66__ |= (pSrc->shortSlotTime << 10);
-	tmp66__ |= (pSrc->apsd << 11);
-	tmp66__ |= (pSrc->rrm << 12);
-	tmp66__ |= (pSrc->dsssOfdm << 13);
-	tmp66__ |= (pSrc->delayedBA << 14);
-	tmp66__ |= (pSrc->immediateBA << 15);
-	frameshtons(pCtx, pBuf, tmp66__, 0);
+	uint16_t tmp67__;
+	tmp67__ = 0U;
+	tmp67__ |= (pSrc->ess << 0);
+	tmp67__ |= (pSrc->ibss << 1);
+	tmp67__ |= (pSrc->cfPollable << 2);
+	tmp67__ |= (pSrc->cfPollReq << 3);
+	tmp67__ |= (pSrc->privacy << 4);
+	tmp67__ |= (pSrc->shortPreamble << 5);
+	tmp67__ |= (pSrc->pbcc << 6);
+	tmp67__ |= (pSrc->channelAgility << 7);
+	tmp67__ |= (pSrc->spectrumMgt << 8);
+	tmp67__ |= (pSrc->qos << 9);
+	tmp67__ |= (pSrc->shortSlotTime << 10);
+	tmp67__ |= (pSrc->apsd << 11);
+	tmp67__ |= (pSrc->rrm << 12);
+	tmp67__ |= (pSrc->dsssOfdm << 13);
+	tmp67__ |= (pSrc->delayedBA << 14);
+	tmp67__ |= (pSrc->immediateBA << 15);
+	frameshtons(pCtx, pBuf, tmp67__, 0);
 	(void)pCtx;
 } /* End dot11f_pack_ff_capabilities. */
 
@@ -12707,13 +12767,13 @@
 				  tDot11fFfOperatingMode *pSrc,
 				  uint8_t *pBuf)
 {
-	uint8_t tmp67__;
-	tmp67__ = 0U;
-	tmp67__ |= (pSrc->chanWidth << 0);
-	tmp67__ |= (pSrc->reserved << 2);
-	tmp67__ |= (pSrc->rxNSS << 4);
-	tmp67__ |= (pSrc->rxNSSType << 7);
-	*pBuf = tmp67__;
+	uint8_t tmp68__;
+	tmp68__ = 0U;
+	tmp68__ |= (pSrc->chanWidth << 0);
+	tmp68__ |= (pSrc->reserved << 2);
+	tmp68__ |= (pSrc->rxNSS << 4);
+	tmp68__ |= (pSrc->rxNSSType << 7);
+	*pBuf = tmp68__;
 	(void)pCtx;
 } /* End dot11f_pack_ff_operating_mode. */
 
@@ -12753,12 +12813,12 @@
 				   tDot11fFfSMPowerModeSet *pSrc,
 				   uint8_t *pBuf)
 {
-	uint8_t tmp68__;
-	tmp68__ = 0U;
-	tmp68__ |= (pSrc->PowerSave_En << 0);
-	tmp68__ |= (pSrc->Mode << 1);
-	tmp68__ |= (pSrc->reserved << 2);
-	*pBuf = tmp68__;
+	uint8_t tmp69__;
+	tmp69__ = 0U;
+	tmp69__ |= (pSrc->PowerSave_En << 0);
+	tmp69__ |= (pSrc->Mode << 1);
+	tmp69__ |= (pSrc->reserved << 2);
+	*pBuf = tmp69__;
 	(void)pCtx;
 } /* End dot11f_pack_ff_sm_power_mode_set. */
 
@@ -12798,19 +12858,19 @@
 			   tDot11fFfTSInfo *pSrc,
 			   uint8_t *pBuf)
 {
-	uint32_t tmp69__;
-	tmp69__ = 0U;
-	tmp69__ |= (pSrc->traffic_type << 0);
-	tmp69__ |= (pSrc->tsid << 1);
-	tmp69__ |= (pSrc->direction << 5);
-	tmp69__ |= (pSrc->access_policy << 7);
-	tmp69__ |= (pSrc->aggregation << 9);
-	tmp69__ |= (pSrc->psb << 10);
-	tmp69__ |= (pSrc->user_priority << 11);
-	tmp69__ |= (pSrc->tsinfo_ack_pol << 14);
-	tmp69__ |= (pSrc->schedule << 16);
-	tmp69__ |= (pSrc->unused << 17);
-	frameshtonl(pCtx, pBuf, tmp69__, 0);
+	uint32_t tmp70__;
+	tmp70__ = 0U;
+	tmp70__ |= (pSrc->traffic_type << 0);
+	tmp70__ |= (pSrc->tsid << 1);
+	tmp70__ |= (pSrc->direction << 5);
+	tmp70__ |= (pSrc->access_policy << 7);
+	tmp70__ |= (pSrc->aggregation << 9);
+	tmp70__ |= (pSrc->psb << 10);
+	tmp70__ |= (pSrc->user_priority << 11);
+	tmp70__ |= (pSrc->tsinfo_ack_pol << 14);
+	tmp70__ |= (pSrc->schedule << 16);
+	tmp70__ |= (pSrc->unused << 17);
+	frameshtonl(pCtx, pBuf, tmp70__, 0);
 	(void)pCtx;
 } /* End dot11f_pack_ff_ts_info. */
 
@@ -12862,6 +12922,20 @@
 	(void)pCtx;
 } /* End dot11f_pack_ff_vht_user_position_array. */
 
+void dot11f_pack_ff_ext_chan_switch_ann_action(tpAniSirGlobal pCtx,
+					       tDot11fFfext_chan_switch_ann_action *pSrc,
+					       uint8_t *pBuf)
+{
+	uint32_t tmp71__;
+	tmp71__ = 0U;
+	tmp71__ |= (pSrc->switch_mode << 0);
+	tmp71__ |= (pSrc->op_class << 8);
+	tmp71__ |= (pSrc->new_channel << 16);
+	tmp71__ |= (pSrc->switch_count << 24);
+	frameshtonl(pCtx, pBuf, tmp71__, 0);
+	(void)pCtx;
+} /* End dot11f_pack_ff_ext_chan_switch_ann_action. */
+
 uint32_t dot11f_pack_tlv_authorized_ma_cs(tpAniSirGlobal pCtx,
 					tDot11fTLVAuthorizedMACs *pSrc,
 					uint8_t *pBuf,
@@ -12929,7 +13003,7 @@
 	uint8_t *pTlvLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp70__;
+	uint8_t tmp72__;
 	nNeeded += 3;
 	if (nNeeded > nBuf)
 		return DOT11F_BUFFER_OVERFLOW;
@@ -12938,10 +13012,10 @@
 		pBuf += 1; *pnConsumed += 1;
 		pTlvLen = pBuf;
 		pBuf += 1; *pnConsumed += 1;
-		tmp70__ = 0U;
-		tmp70__ |= (pSrc->minor << 0);
-		tmp70__ |= (pSrc->major << 4);
-		*pBuf = tmp70__;
+		tmp72__ = 0U;
+		tmp72__ |= (pSrc->minor << 0);
+		tmp72__ |= (pSrc->major << 4);
+		*pBuf = tmp72__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
@@ -13898,7 +13972,7 @@
 	uint8_t *pTlvLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp71__;
+	uint8_t tmp73__;
 	nNeeded += 5;
 	if (nNeeded > nBuf)
 		return DOT11F_BUFFER_OVERFLOW;
@@ -13907,10 +13981,10 @@
 		pBuf += 2; *pnConsumed += 2;
 		pTlvLen = pBuf;
 		pBuf += 2; *pnConsumed += 2;
-		tmp71__ = 0U;
-		tmp71__ |= (pSrc->minor << 0);
-		tmp71__ |= (pSrc->major << 4);
-		*pBuf = tmp71__;
+		tmp73__ = 0U;
+		tmp73__ |= (pSrc->minor << 0);
+		tmp73__ |= (pSrc->major << 4);
+		*pBuf = tmp73__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
@@ -14048,7 +14122,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint16_t tmp72__;
+	uint16_t tmp74__;
 	nNeeded  +=  (pSrc->num_key + 11);
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -14057,10 +14131,10 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp72__ = 0U;
-		tmp72__ |= (pSrc->keyId << 0);
-		tmp72__ |= (pSrc->reserved << 2);
-		frameshtons(pCtx, pBuf, tmp72__, 0);
+		tmp74__ = 0U;
+		tmp74__ |= (pSrc->keyId << 0);
+		tmp74__ |= (pSrc->reserved << 2);
+		frameshtons(pCtx, pBuf, tmp74__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
@@ -14472,11 +14546,11 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp73__;
-	uint8_t tmp74__;
 	uint8_t tmp75__;
 	uint8_t tmp76__;
 	uint8_t tmp77__;
+	uint8_t tmp78__;
+	uint8_t tmp79__;
 	nNeeded  += 5;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -14485,60 +14559,60 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp73__ = 0U;
-		tmp73__ |= (pSrc->LinkMeasurement << 0);
-		tmp73__ |= (pSrc->NeighborRpt << 1);
-		tmp73__ |= (pSrc->parallel << 2);
-		tmp73__ |= (pSrc->repeated << 3);
-		tmp73__ |= (pSrc->BeaconPassive << 4);
-		tmp73__ |= (pSrc->BeaconActive << 5);
-		tmp73__ |= (pSrc->BeaconTable << 6);
-		tmp73__ |= (pSrc->BeaconRepCond << 7);
-		*pBuf = tmp73__;
-		*pnConsumed += 1;
-		pBuf += 1;
-		nBuf -=  1 ;
-		tmp74__ = 0U;
-		tmp74__ |= (pSrc->FrameMeasurement << 0);
-		tmp74__ |= (pSrc->ChannelLoad << 1);
-		tmp74__ |= (pSrc->NoiseHistogram << 2);
-		tmp74__ |= (pSrc->statistics << 3);
-		tmp74__ |= (pSrc->LCIMeasurement << 4);
-		tmp74__ |= (pSrc->LCIAzimuth << 5);
-		tmp74__ |= (pSrc->TCMCapability << 6);
-		tmp74__ |= (pSrc->triggeredTCM << 7);
-		*pBuf = tmp74__;
-		*pnConsumed += 1;
-		pBuf += 1;
-		nBuf -=  1 ;
 		tmp75__ = 0U;
-		tmp75__ |= (pSrc->APChanReport << 0);
-		tmp75__ |= (pSrc->RRMMIBEnabled << 1);
-		tmp75__ |= (pSrc->operatingChanMax << 2);
-		tmp75__ |= (pSrc->nonOperatinChanMax << 5);
+		tmp75__ |= (pSrc->LinkMeasurement << 0);
+		tmp75__ |= (pSrc->NeighborRpt << 1);
+		tmp75__ |= (pSrc->parallel << 2);
+		tmp75__ |= (pSrc->repeated << 3);
+		tmp75__ |= (pSrc->BeaconPassive << 4);
+		tmp75__ |= (pSrc->BeaconActive << 5);
+		tmp75__ |= (pSrc->BeaconTable << 6);
+		tmp75__ |= (pSrc->BeaconRepCond << 7);
 		*pBuf = tmp75__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
 		tmp76__ = 0U;
-		tmp76__ |= (pSrc->MeasurementPilot << 0);
-		tmp76__ |= (pSrc->MeasurementPilotEnabled << 3);
-		tmp76__ |= (pSrc->NeighborTSFOffset << 4);
-		tmp76__ |= (pSrc->RCPIMeasurement << 5);
-		tmp76__ |= (pSrc->RSNIMeasurement << 6);
-		tmp76__ |= (pSrc->BssAvgAccessDelay << 7);
+		tmp76__ |= (pSrc->FrameMeasurement << 0);
+		tmp76__ |= (pSrc->ChannelLoad << 1);
+		tmp76__ |= (pSrc->NoiseHistogram << 2);
+		tmp76__ |= (pSrc->statistics << 3);
+		tmp76__ |= (pSrc->LCIMeasurement << 4);
+		tmp76__ |= (pSrc->LCIAzimuth << 5);
+		tmp76__ |= (pSrc->TCMCapability << 6);
+		tmp76__ |= (pSrc->triggeredTCM << 7);
 		*pBuf = tmp76__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
 		tmp77__ = 0U;
-		tmp77__ |= (pSrc->BSSAvailAdmission << 0);
-		tmp77__ |= (pSrc->AntennaInformation << 1);
-		tmp77__ |= (pSrc->fine_time_meas_rpt << 2);
-		tmp77__ |= (pSrc->lci_capability << 3);
-		tmp77__ |= (pSrc->reserved << 4);
+		tmp77__ |= (pSrc->APChanReport << 0);
+		tmp77__ |= (pSrc->RRMMIBEnabled << 1);
+		tmp77__ |= (pSrc->operatingChanMax << 2);
+		tmp77__ |= (pSrc->nonOperatinChanMax << 5);
 		*pBuf = tmp77__;
 		*pnConsumed += 1;
+		pBuf += 1;
+		nBuf -=  1 ;
+		tmp78__ = 0U;
+		tmp78__ |= (pSrc->MeasurementPilot << 0);
+		tmp78__ |= (pSrc->MeasurementPilotEnabled << 3);
+		tmp78__ |= (pSrc->NeighborTSFOffset << 4);
+		tmp78__ |= (pSrc->RCPIMeasurement << 5);
+		tmp78__ |= (pSrc->RSNIMeasurement << 6);
+		tmp78__ |= (pSrc->BssAvgAccessDelay << 7);
+		*pBuf = tmp78__;
+		*pnConsumed += 1;
+		pBuf += 1;
+		nBuf -=  1 ;
+		tmp79__ = 0U;
+		tmp79__ |= (pSrc->BSSAvailAdmission << 0);
+		tmp79__ |= (pSrc->AntennaInformation << 1);
+		tmp79__ |= (pSrc->fine_time_meas_rpt << 2);
+		tmp79__ |= (pSrc->lci_capability << 3);
+		tmp79__ |= (pSrc->reserved << 4);
+		*pBuf = tmp79__;
+		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
 		break;
@@ -14617,7 +14691,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint16_t tmp78__;
+	uint16_t tmp80__;
 	nNeeded  += 14;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -14626,12 +14700,12 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp78__ = 0U;
-		tmp78__ |= (pSrc->aggregation << 0);
-		tmp78__ |= (pSrc->tsid << 1);
-		tmp78__ |= (pSrc->direction << 5);
-		tmp78__ |= (pSrc->reserved << 7);
-		frameshtons(pCtx, pBuf, tmp78__, 0);
+		tmp80__ = 0U;
+		tmp80__ |= (pSrc->aggregation << 0);
+		tmp80__ |= (pSrc->tsid << 1);
+		tmp80__ |= (pSrc->direction << 5);
+		tmp80__ |= (pSrc->reserved << 7);
+		frameshtons(pCtx, pBuf, tmp80__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
@@ -14826,9 +14900,9 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint16_t tmp79__;
-	uint8_t tmp80__;
 	uint16_t tmp81__;
+	uint8_t tmp82__;
+	uint16_t tmp83__;
 	nNeeded  += 55;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -14837,30 +14911,30 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp79__ = 0U;
-		tmp79__ |= (pSrc->traffic_type << 0);
-		tmp79__ |= (pSrc->tsid << 1);
-		tmp79__ |= (pSrc->direction << 5);
-		tmp79__ |= (pSrc->access_policy << 7);
-		tmp79__ |= (pSrc->aggregation << 9);
-		tmp79__ |= (pSrc->psb << 10);
-		tmp79__ |= (pSrc->user_priority << 11);
-		tmp79__ |= (pSrc->tsinfo_ack_pol << 14);
-		frameshtons(pCtx, pBuf, tmp79__, 0);
+		tmp81__ = 0U;
+		tmp81__ |= (pSrc->traffic_type << 0);
+		tmp81__ |= (pSrc->tsid << 1);
+		tmp81__ |= (pSrc->direction << 5);
+		tmp81__ |= (pSrc->access_policy << 7);
+		tmp81__ |= (pSrc->aggregation << 9);
+		tmp81__ |= (pSrc->psb << 10);
+		tmp81__ |= (pSrc->user_priority << 11);
+		tmp81__ |= (pSrc->tsinfo_ack_pol << 14);
+		frameshtons(pCtx, pBuf, tmp81__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
-		tmp80__ = 0U;
-		tmp80__ |= (pSrc->schedule << 0);
-		tmp80__ |= (pSrc->unused << 1);
-		*pBuf = tmp80__;
+		tmp82__ = 0U;
+		tmp82__ |= (pSrc->schedule << 0);
+		tmp82__ |= (pSrc->unused << 1);
+		*pBuf = tmp82__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp81__ = 0U;
-		tmp81__ |= (pSrc->size << 0);
-		tmp81__ |= (pSrc->fixed << 15);
-		frameshtons(pCtx, pBuf, tmp81__, 0);
+		tmp83__ = 0U;
+		tmp83__ |= (pSrc->size << 0);
+		tmp83__ |= (pSrc->fixed << 15);
+		frameshtons(pCtx, pBuf, tmp83__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
@@ -14924,9 +14998,9 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint32_t tmp82__;
-	uint16_t tmp83__;
-	uint16_t tmp84__;
+	uint32_t tmp84__;
+	uint16_t tmp85__;
+	uint16_t tmp86__;
 	nNeeded  += 12;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -14935,48 +15009,48 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp82__ = 0U;
-		tmp82__ |= (pSrc->maxMPDULen << 0);
-		tmp82__ |= (pSrc->supportedChannelWidthSet << 2);
-		tmp82__ |= (pSrc->ldpcCodingCap << 4);
-		tmp82__ |= (pSrc->shortGI80MHz << 5);
-		tmp82__ |= (pSrc->shortGI160and80plus80MHz << 6);
-		tmp82__ |= (pSrc->txSTBC << 7);
-		tmp82__ |= (pSrc->rxSTBC << 8);
-		tmp82__ |= (pSrc->suBeamFormerCap << 11);
-		tmp82__ |= (pSrc->suBeamformeeCap << 12);
-		tmp82__ |= (pSrc->csnofBeamformerAntSup << 13);
-		tmp82__ |= (pSrc->numSoundingDim << 16);
-		tmp82__ |= (pSrc->muBeamformerCap << 19);
-		tmp82__ |= (pSrc->muBeamformeeCap << 20);
-		tmp82__ |= (pSrc->vhtTXOPPS << 21);
-		tmp82__ |= (pSrc->htcVHTCap << 22);
-		tmp82__ |= (pSrc->maxAMPDULenExp << 23);
-		tmp82__ |= (pSrc->vhtLinkAdaptCap << 26);
-		tmp82__ |= (pSrc->rxAntPattern << 28);
-		tmp82__ |= (pSrc->txAntPattern << 29);
-		tmp82__ |= (pSrc->reserved1 << 30);
-		frameshtonl(pCtx, pBuf, tmp82__, 0);
+		tmp84__ = 0U;
+		tmp84__ |= (pSrc->maxMPDULen << 0);
+		tmp84__ |= (pSrc->supportedChannelWidthSet << 2);
+		tmp84__ |= (pSrc->ldpcCodingCap << 4);
+		tmp84__ |= (pSrc->shortGI80MHz << 5);
+		tmp84__ |= (pSrc->shortGI160and80plus80MHz << 6);
+		tmp84__ |= (pSrc->txSTBC << 7);
+		tmp84__ |= (pSrc->rxSTBC << 8);
+		tmp84__ |= (pSrc->suBeamFormerCap << 11);
+		tmp84__ |= (pSrc->suBeamformeeCap << 12);
+		tmp84__ |= (pSrc->csnofBeamformerAntSup << 13);
+		tmp84__ |= (pSrc->numSoundingDim << 16);
+		tmp84__ |= (pSrc->muBeamformerCap << 19);
+		tmp84__ |= (pSrc->muBeamformeeCap << 20);
+		tmp84__ |= (pSrc->vhtTXOPPS << 21);
+		tmp84__ |= (pSrc->htcVHTCap << 22);
+		tmp84__ |= (pSrc->maxAMPDULenExp << 23);
+		tmp84__ |= (pSrc->vhtLinkAdaptCap << 26);
+		tmp84__ |= (pSrc->rxAntPattern << 28);
+		tmp84__ |= (pSrc->txAntPattern << 29);
+		tmp84__ |= (pSrc->reserved1 << 30);
+		frameshtonl(pCtx, pBuf, tmp84__, 0);
 		*pnConsumed += 4;
 		pBuf += 4;
 		nBuf -=  4 ;
 		frameshtons(pCtx, pBuf, pSrc->rxMCSMap, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
-		tmp83__ = 0U;
-		tmp83__ |= (pSrc->rxHighSupDataRate << 0);
-		tmp83__ |= (pSrc->reserved2 << 13);
-		frameshtons(pCtx, pBuf, tmp83__, 0);
+		tmp85__ = 0U;
+		tmp85__ |= (pSrc->rxHighSupDataRate << 0);
+		tmp85__ |= (pSrc->reserved2 << 13);
+		frameshtons(pCtx, pBuf, tmp85__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
 		frameshtons(pCtx, pBuf, pSrc->txMCSMap, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
-		tmp84__ = 0U;
-		tmp84__ |= (pSrc->txSupDataRate << 0);
-		tmp84__ |= (pSrc->reserved3 << 13);
-		frameshtons(pCtx, pBuf, tmp84__, 0);
+		tmp86__ = 0U;
+		tmp86__ |= (pSrc->txSupDataRate << 0);
+		tmp86__ |= (pSrc->reserved3 << 13);
+		frameshtons(pCtx, pBuf, tmp86__, 0);
 		*pnConsumed += 2;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  2 ;
@@ -15036,7 +15110,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint16_t tmp85__;
+	uint16_t tmp87__;
 	nNeeded  += 15;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -15058,12 +15132,12 @@
 		*pBuf = pSrc->version;
 		*pnConsumed += 1;
 		pBuf += 1;
-		tmp85__ = 0U;
-		tmp85__ |= (pSrc->aggregation << 0);
-		tmp85__ |= (pSrc->tsid << 1);
-		tmp85__ |= (pSrc->direction << 5);
-		tmp85__ |= (pSrc->reserved << 7);
-		frameshtons(pCtx, pBuf, tmp85__, 0);
+		tmp87__ = 0U;
+		tmp87__ |= (pSrc->aggregation << 0);
+		tmp87__ |= (pSrc->tsid << 1);
+		tmp87__ |= (pSrc->direction << 5);
+		tmp87__ |= (pSrc->reserved << 7);
+		frameshtons(pCtx, pBuf, tmp87__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
@@ -15297,9 +15371,9 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint16_t tmp86__;
-	uint8_t tmp87__;
 	uint16_t tmp88__;
+	uint8_t tmp89__;
+	uint16_t tmp90__;
 	nNeeded  += 38;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -15321,30 +15395,30 @@
 		*pBuf = pSrc->version;
 		*pnConsumed += 1;
 		pBuf += 1;
-		tmp86__ = 0U;
-		tmp86__ |= (pSrc->traffic_type << 0);
-		tmp86__ |= (pSrc->tsid << 1);
-		tmp86__ |= (pSrc->direction << 5);
-		tmp86__ |= (pSrc->access_policy << 7);
-		tmp86__ |= (pSrc->aggregation << 9);
-		tmp86__ |= (pSrc->psb << 10);
-		tmp86__ |= (pSrc->user_priority << 11);
-		tmp86__ |= (pSrc->tsinfo_ack_pol << 14);
-		frameshtons(pCtx, pBuf, tmp86__, 0);
+		tmp88__ = 0U;
+		tmp88__ |= (pSrc->traffic_type << 0);
+		tmp88__ |= (pSrc->tsid << 1);
+		tmp88__ |= (pSrc->direction << 5);
+		tmp88__ |= (pSrc->access_policy << 7);
+		tmp88__ |= (pSrc->aggregation << 9);
+		tmp88__ |= (pSrc->psb << 10);
+		tmp88__ |= (pSrc->user_priority << 11);
+		tmp88__ |= (pSrc->tsinfo_ack_pol << 14);
+		frameshtons(pCtx, pBuf, tmp88__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
-		tmp87__ = 0U;
-		tmp87__ |= (pSrc->tsinfo_rsvd << 0);
-		tmp87__ |= (pSrc->burst_size_defn << 7);
-		*pBuf = tmp87__;
+		tmp89__ = 0U;
+		tmp89__ |= (pSrc->tsinfo_rsvd << 0);
+		tmp89__ |= (pSrc->burst_size_defn << 7);
+		*pBuf = tmp89__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp88__ = 0U;
-		tmp88__ |= (pSrc->size << 0);
-		tmp88__ |= (pSrc->fixed << 15);
-		frameshtons(pCtx, pBuf, tmp88__, 0);
+		tmp90__ = 0U;
+		tmp90__ |= (pSrc->size << 0);
+		tmp90__ |= (pSrc->fixed << 15);
+		frameshtons(pCtx, pBuf, tmp90__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
@@ -15678,14 +15752,14 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp89__;
-	uint8_t tmp90__;
 	uint8_t tmp91__;
 	uint8_t tmp92__;
 	uint8_t tmp93__;
 	uint8_t tmp94__;
 	uint8_t tmp95__;
 	uint8_t tmp96__;
+	uint8_t tmp97__;
+	uint8_t tmp98__;
 	nNeeded  += 18;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -15700,76 +15774,76 @@
 		*pBuf = pSrc->reserved;
 		*pnConsumed += 1;
 		pBuf += 1;
-		tmp89__ = 0U;
-		tmp89__ |= (pSrc->acbe_aifsn << 0);
-		tmp89__ |= (pSrc->acbe_acm << 4);
-		tmp89__ |= (pSrc->acbe_aci << 5);
-		tmp89__ |= (pSrc->unused1 << 7);
-		*pBuf = tmp89__;
+		tmp91__ = 0U;
+		tmp91__ |= (pSrc->acbe_aifsn << 0);
+		tmp91__ |= (pSrc->acbe_acm << 4);
+		tmp91__ |= (pSrc->acbe_aci << 5);
+		tmp91__ |= (pSrc->unused1 << 7);
+		*pBuf = tmp91__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp90__ = 0U;
-		tmp90__ |= (pSrc->acbe_acwmin << 0);
-		tmp90__ |= (pSrc->acbe_acwmax << 4);
-		*pBuf = tmp90__;
+		tmp92__ = 0U;
+		tmp92__ |= (pSrc->acbe_acwmin << 0);
+		tmp92__ |= (pSrc->acbe_acwmax << 4);
+		*pBuf = tmp92__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
 		frameshtons(pCtx, pBuf, pSrc->acbe_txoplimit, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
-		tmp91__ = 0U;
-		tmp91__ |= (pSrc->acbk_aifsn << 0);
-		tmp91__ |= (pSrc->acbk_acm << 4);
-		tmp91__ |= (pSrc->acbk_aci << 5);
-		tmp91__ |= (pSrc->unused2 << 7);
-		*pBuf = tmp91__;
+		tmp93__ = 0U;
+		tmp93__ |= (pSrc->acbk_aifsn << 0);
+		tmp93__ |= (pSrc->acbk_acm << 4);
+		tmp93__ |= (pSrc->acbk_aci << 5);
+		tmp93__ |= (pSrc->unused2 << 7);
+		*pBuf = tmp93__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp92__ = 0U;
-		tmp92__ |= (pSrc->acbk_acwmin << 0);
-		tmp92__ |= (pSrc->acbk_acwmax << 4);
-		*pBuf = tmp92__;
+		tmp94__ = 0U;
+		tmp94__ |= (pSrc->acbk_acwmin << 0);
+		tmp94__ |= (pSrc->acbk_acwmax << 4);
+		*pBuf = tmp94__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
 		frameshtons(pCtx, pBuf, pSrc->acbk_txoplimit, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
-		tmp93__ = 0U;
-		tmp93__ |= (pSrc->acvi_aifsn << 0);
-		tmp93__ |= (pSrc->acvi_acm << 4);
-		tmp93__ |= (pSrc->acvi_aci << 5);
-		tmp93__ |= (pSrc->unused3 << 7);
-		*pBuf = tmp93__;
+		tmp95__ = 0U;
+		tmp95__ |= (pSrc->acvi_aifsn << 0);
+		tmp95__ |= (pSrc->acvi_acm << 4);
+		tmp95__ |= (pSrc->acvi_aci << 5);
+		tmp95__ |= (pSrc->unused3 << 7);
+		*pBuf = tmp95__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp94__ = 0U;
-		tmp94__ |= (pSrc->acvi_acwmin << 0);
-		tmp94__ |= (pSrc->acvi_acwmax << 4);
-		*pBuf = tmp94__;
+		tmp96__ = 0U;
+		tmp96__ |= (pSrc->acvi_acwmin << 0);
+		tmp96__ |= (pSrc->acvi_acwmax << 4);
+		*pBuf = tmp96__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
 		frameshtons(pCtx, pBuf, pSrc->acvi_txoplimit, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
-		tmp95__ = 0U;
-		tmp95__ |= (pSrc->acvo_aifsn << 0);
-		tmp95__ |= (pSrc->acvo_acm << 4);
-		tmp95__ |= (pSrc->acvo_aci << 5);
-		tmp95__ |= (pSrc->unused4 << 7);
-		*pBuf = tmp95__;
+		tmp97__ = 0U;
+		tmp97__ |= (pSrc->acvo_aifsn << 0);
+		tmp97__ |= (pSrc->acvo_acm << 4);
+		tmp97__ |= (pSrc->acvo_aci << 5);
+		tmp97__ |= (pSrc->unused4 << 7);
+		*pBuf = tmp97__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp96__ = 0U;
-		tmp96__ |= (pSrc->acvo_acwmin << 0);
-		tmp96__ |= (pSrc->acvo_acwmax << 4);
-		*pBuf = tmp96__;
+		tmp98__ = 0U;
+		tmp98__ |= (pSrc->acvo_acwmin << 0);
+		tmp98__ |= (pSrc->acvo_acwmax << 4);
+		*pBuf = tmp98__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
@@ -15794,7 +15868,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp97__;
+	uint8_t tmp99__;
 	nNeeded  += 1;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -15803,12 +15877,12 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp97__ = 0U;
-		tmp97__ |= (pSrc->non_erp_present << 0);
-		tmp97__ |= (pSrc->use_prot << 1);
-		tmp97__ |= (pSrc->barker_preamble << 2);
-		tmp97__ |= (pSrc->unused << 3);
-		*pBuf = tmp97__;
+		tmp99__ = 0U;
+		tmp99__ |= (pSrc->non_erp_present << 0);
+		tmp99__ |= (pSrc->use_prot << 1);
+		tmp99__ |= (pSrc->barker_preamble << 2);
+		tmp99__ |= (pSrc->unused << 3);
+		*pBuf = tmp99__;
 		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
@@ -15867,7 +15941,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp98__;
+	uint8_t tmp100__;
 	nNeeded  += 2;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -15887,10 +15961,10 @@
 		*pBuf = pSrc->mgmt_state;
 		*pnConsumed += 1;
 		pBuf += 1;
-		tmp98__ = 0U;
-		tmp98__ |= (pSrc->mbssid_mask << 0);
-		tmp98__ |= (pSrc->reserved << 3);
-		*pBuf = tmp98__;
+		tmp100__ = 0U;
+		tmp100__ |= (pSrc->mbssid_mask << 0);
+		tmp100__ |= (pSrc->reserved << 3);
+		*pBuf = tmp100__;
 		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
@@ -16241,7 +16315,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint16_t tmp99__;
+	uint16_t tmp101__;
 	uint32_t status = DOT11F_PARSE_SUCCESS;
 	status = dot11f_get_packed_ieft_info(pCtx, pSrc, &nNeeded);
 	if (!DOT11F_SUCCEEDED(status))
@@ -16253,10 +16327,10 @@
 		++pBuf; --nBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; --nBuf; ++(*pnConsumed);
-		tmp99__ = 0U;
-		tmp99__ |= (pSrc->reserved << 0);
-		tmp99__ |= (pSrc->IECount << 8);
-		frameshtons(pCtx, pBuf, tmp99__, 0);
+		tmp101__ = 0U;
+		tmp101__ |= (pSrc->reserved << 0);
+		tmp101__ |= (pSrc->IECount << 8);
+		frameshtons(pCtx, pBuf, tmp101__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
@@ -16294,11 +16368,11 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint16_t tmp100__;
-	uint8_t tmp101__;
 	uint16_t tmp102__;
-	uint32_t tmp103__;
-	uint8_t tmp104__;
+	uint8_t tmp103__;
+	uint16_t tmp104__;
+	uint32_t tmp105__;
+	uint8_t tmp106__;
 	nNeeded  +=  (pSrc->num_rsvd + 26);
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -16307,77 +16381,77 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp100__ = 0U;
-		tmp100__ |= (pSrc->advCodingCap << 0);
-		tmp100__ |= (pSrc->supportedChannelWidthSet << 1);
-		tmp100__ |= (pSrc->mimoPowerSave << 2);
-		tmp100__ |= (pSrc->greenField << 4);
-		tmp100__ |= (pSrc->shortGI20MHz << 5);
-		tmp100__ |= (pSrc->shortGI40MHz << 6);
-		tmp100__ |= (pSrc->txSTBC << 7);
-		tmp100__ |= (pSrc->rxSTBC << 8);
-		tmp100__ |= (pSrc->delayedBA << 10);
-		tmp100__ |= (pSrc->maximalAMSDUsize << 11);
-		tmp100__ |= (pSrc->dsssCckMode40MHz << 12);
-		tmp100__ |= (pSrc->psmp << 13);
-		tmp100__ |= (pSrc->stbcControlFrame << 14);
-		tmp100__ |= (pSrc->lsigTXOPProtection << 15);
-		frameshtons(pCtx, pBuf, tmp100__, 0);
+		tmp102__ = 0U;
+		tmp102__ |= (pSrc->advCodingCap << 0);
+		tmp102__ |= (pSrc->supportedChannelWidthSet << 1);
+		tmp102__ |= (pSrc->mimoPowerSave << 2);
+		tmp102__ |= (pSrc->greenField << 4);
+		tmp102__ |= (pSrc->shortGI20MHz << 5);
+		tmp102__ |= (pSrc->shortGI40MHz << 6);
+		tmp102__ |= (pSrc->txSTBC << 7);
+		tmp102__ |= (pSrc->rxSTBC << 8);
+		tmp102__ |= (pSrc->delayedBA << 10);
+		tmp102__ |= (pSrc->maximalAMSDUsize << 11);
+		tmp102__ |= (pSrc->dsssCckMode40MHz << 12);
+		tmp102__ |= (pSrc->psmp << 13);
+		tmp102__ |= (pSrc->stbcControlFrame << 14);
+		tmp102__ |= (pSrc->lsigTXOPProtection << 15);
+		frameshtons(pCtx, pBuf, tmp102__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
-		tmp101__ = 0U;
-		tmp101__ |= (pSrc->maxRxAMPDUFactor << 0);
-		tmp101__ |= (pSrc->mpduDensity << 2);
-		tmp101__ |= (pSrc->reserved1 << 5);
-		*pBuf = tmp101__;
+		tmp103__ = 0U;
+		tmp103__ |= (pSrc->maxRxAMPDUFactor << 0);
+		tmp103__ |= (pSrc->mpduDensity << 2);
+		tmp103__ |= (pSrc->reserved1 << 5);
+		*pBuf = tmp103__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
 		DOT11F_MEMCPY(pCtx, pBuf, pSrc->supportedMCSSet, 16);
 		*pnConsumed += 16;
 		pBuf += 16;
-		tmp102__ = 0U;
-		tmp102__ |= (pSrc->pco << 0);
-		tmp102__ |= (pSrc->transitionTime << 1);
-		tmp102__ |= (pSrc->reserved2 << 3);
-		tmp102__ |= (pSrc->mcsFeedback << 8);
-		tmp102__ |= (pSrc->reserved3 << 10);
-		frameshtons(pCtx, pBuf, tmp102__, 0);
+		tmp104__ = 0U;
+		tmp104__ |= (pSrc->pco << 0);
+		tmp104__ |= (pSrc->transitionTime << 1);
+		tmp104__ |= (pSrc->reserved2 << 3);
+		tmp104__ |= (pSrc->mcsFeedback << 8);
+		tmp104__ |= (pSrc->reserved3 << 10);
+		frameshtons(pCtx, pBuf, tmp104__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
-		tmp103__ = 0U;
-		tmp103__ |= (pSrc->txBF << 0);
-		tmp103__ |= (pSrc->rxStaggeredSounding << 1);
-		tmp103__ |= (pSrc->txStaggeredSounding << 2);
-		tmp103__ |= (pSrc->rxZLF << 3);
-		tmp103__ |= (pSrc->txZLF << 4);
-		tmp103__ |= (pSrc->implicitTxBF << 5);
-		tmp103__ |= (pSrc->calibration << 6);
-		tmp103__ |= (pSrc->explicitCSITxBF << 8);
-		tmp103__ |= (pSrc->explicitUncompressedSteeringMatrix << 9);
-		tmp103__ |= (pSrc->explicitBFCSIFeedback << 10);
-		tmp103__ |= (pSrc->explicitUncompressedSteeringMatrixFeedback << 13);
-		tmp103__ |= (pSrc->explicitCompressedSteeringMatrixFeedback << 16);
-		tmp103__ |= (pSrc->csiNumBFAntennae << 19);
-		tmp103__ |= (pSrc->uncompressedSteeringMatrixBFAntennae << 21);
-		tmp103__ |= (pSrc->compressedSteeringMatrixBFAntennae << 23);
-		tmp103__ |= (pSrc->reserved4 << 25);
-		frameshtonl(pCtx, pBuf, tmp103__, 0);
+		tmp105__ = 0U;
+		tmp105__ |= (pSrc->txBF << 0);
+		tmp105__ |= (pSrc->rxStaggeredSounding << 1);
+		tmp105__ |= (pSrc->txStaggeredSounding << 2);
+		tmp105__ |= (pSrc->rxZLF << 3);
+		tmp105__ |= (pSrc->txZLF << 4);
+		tmp105__ |= (pSrc->implicitTxBF << 5);
+		tmp105__ |= (pSrc->calibration << 6);
+		tmp105__ |= (pSrc->explicitCSITxBF << 8);
+		tmp105__ |= (pSrc->explicitUncompressedSteeringMatrix << 9);
+		tmp105__ |= (pSrc->explicitBFCSIFeedback << 10);
+		tmp105__ |= (pSrc->explicitUncompressedSteeringMatrixFeedback << 13);
+		tmp105__ |= (pSrc->explicitCompressedSteeringMatrixFeedback << 16);
+		tmp105__ |= (pSrc->csiNumBFAntennae << 19);
+		tmp105__ |= (pSrc->uncompressedSteeringMatrixBFAntennae << 21);
+		tmp105__ |= (pSrc->compressedSteeringMatrixBFAntennae << 23);
+		tmp105__ |= (pSrc->reserved4 << 25);
+		frameshtonl(pCtx, pBuf, tmp105__, 0);
 		*pnConsumed += 4;
 		pBuf += 4;
 		nBuf -=  4 ;
-		tmp104__ = 0U;
-		tmp104__ |= (pSrc->antennaSelection << 0);
-		tmp104__ |= (pSrc->explicitCSIFeedbackTx << 1);
-		tmp104__ |= (pSrc->antennaIndicesFeedbackTx << 2);
-		tmp104__ |= (pSrc->explicitCSIFeedback << 3);
-		tmp104__ |= (pSrc->antennaIndicesFeedback << 4);
-		tmp104__ |= (pSrc->rxAS << 5);
-		tmp104__ |= (pSrc->txSoundingPPDUs << 6);
-		tmp104__ |= (pSrc->reserved5 << 7);
-		*pBuf = tmp104__;
+		tmp106__ = 0U;
+		tmp106__ |= (pSrc->antennaSelection << 0);
+		tmp106__ |= (pSrc->explicitCSIFeedbackTx << 1);
+		tmp106__ |= (pSrc->antennaIndicesFeedbackTx << 2);
+		tmp106__ |= (pSrc->explicitCSIFeedback << 3);
+		tmp106__ |= (pSrc->antennaIndicesFeedback << 4);
+		tmp106__ |= (pSrc->rxAS << 5);
+		tmp106__ |= (pSrc->txSoundingPPDUs << 6);
+		tmp106__ |= (pSrc->reserved5 << 7);
+		*pBuf = tmp106__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
@@ -16402,9 +16476,9 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp105__;
-	uint16_t tmp106__;
-	uint16_t tmp107__;
+	uint8_t tmp107__;
+	uint16_t tmp108__;
+	uint16_t tmp109__;
 	nNeeded  +=  (pSrc->num_rsvd + 22);
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -16416,35 +16490,35 @@
 		*pBuf = pSrc->primaryChannel;
 		*pnConsumed += 1;
 		pBuf += 1;
-		tmp105__ = 0U;
-		tmp105__ |= (pSrc->secondaryChannelOffset << 0);
-		tmp105__ |= (pSrc->recommendedTxWidthSet << 2);
-		tmp105__ |= (pSrc->rifsMode << 3);
-		tmp105__ |= (pSrc->controlledAccessOnly << 4);
-		tmp105__ |= (pSrc->serviceIntervalGranularity << 5);
-		*pBuf = tmp105__;
+		tmp107__ = 0U;
+		tmp107__ |= (pSrc->secondaryChannelOffset << 0);
+		tmp107__ |= (pSrc->recommendedTxWidthSet << 2);
+		tmp107__ |= (pSrc->rifsMode << 3);
+		tmp107__ |= (pSrc->controlledAccessOnly << 4);
+		tmp107__ |= (pSrc->serviceIntervalGranularity << 5);
+		*pBuf = tmp107__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp106__ = 0U;
-		tmp106__ |= (pSrc->opMode << 0);
-		tmp106__ |= (pSrc->nonGFDevicesPresent << 2);
-		tmp106__ |= (pSrc->transmitBurstLimit << 3);
-		tmp106__ |= (pSrc->obssNonHTStaPresent << 4);
-		tmp106__ |= (pSrc->reserved << 5);
-		frameshtons(pCtx, pBuf, tmp106__, 0);
+		tmp108__ = 0U;
+		tmp108__ |= (pSrc->opMode << 0);
+		tmp108__ |= (pSrc->nonGFDevicesPresent << 2);
+		tmp108__ |= (pSrc->transmitBurstLimit << 3);
+		tmp108__ |= (pSrc->obssNonHTStaPresent << 4);
+		tmp108__ |= (pSrc->reserved << 5);
+		frameshtons(pCtx, pBuf, tmp108__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
-		tmp107__ = 0U;
-		tmp107__ |= (pSrc->basicSTBCMCS << 0);
-		tmp107__ |= (pSrc->dualCTSProtection << 7);
-		tmp107__ |= (pSrc->secondaryBeacon << 8);
-		tmp107__ |= (pSrc->lsigTXOPProtectionFullSupport << 9);
-		tmp107__ |= (pSrc->pcoActive << 10);
-		tmp107__ |= (pSrc->pcoPhase << 11);
-		tmp107__ |= (pSrc->reserved2 << 12);
-		frameshtons(pCtx, pBuf, tmp107__, 0);
+		tmp109__ = 0U;
+		tmp109__ |= (pSrc->basicSTBCMCS << 0);
+		tmp109__ |= (pSrc->dualCTSProtection << 7);
+		tmp109__ |= (pSrc->secondaryBeacon << 8);
+		tmp109__ |= (pSrc->lsigTXOPProtectionFullSupport << 9);
+		tmp109__ |= (pSrc->pcoActive << 10);
+		tmp109__ |= (pSrc->pcoPhase << 11);
+		tmp109__ |= (pSrc->reserved2 << 12);
+		frameshtons(pCtx, pBuf, tmp109__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
@@ -16536,9 +16610,9 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp108__;
-	uint8_t tmp109__;
 	uint8_t tmp110__;
+	uint8_t tmp111__;
+	uint8_t tmp112__;
 	uint32_t status = DOT11F_PARSE_SUCCESS;
 	status = dot11f_get_packed_ie_measurement_report(pCtx, pSrc, &nNeeded);
 	if (!DOT11F_SUCCEEDED(status))
@@ -16553,12 +16627,12 @@
 		*pBuf = pSrc->token;
 		*pnConsumed += 1;
 		pBuf += 1;
-		tmp108__ = 0U;
-		tmp108__ |= (pSrc->late << 0);
-		tmp108__ |= (pSrc->incapable << 1);
-		tmp108__ |= (pSrc->refused << 2);
-		tmp108__ |= (pSrc->unused << 3);
-		*pBuf = tmp108__;
+		tmp110__ = 0U;
+		tmp110__ |= (pSrc->late << 0);
+		tmp110__ |= (pSrc->incapable << 1);
+		tmp110__ |= (pSrc->refused << 2);
+		tmp110__ |= (pSrc->unused << 3);
+		*pBuf = tmp110__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
@@ -16577,14 +16651,14 @@
 				frameshtons(pCtx, pBuf, pSrc->report.Basic.meas_duration, 0);
 				*pnConsumed += 2;
 				pBuf += 2;
-				tmp109__ = 0U;
-				tmp109__ |= (pSrc->report.Basic.bss << 0);
-				tmp109__ |= (pSrc->report.Basic.ofdm_preamble << 1);
-				tmp109__ |= (pSrc->report.Basic.unid_signal << 2);
-				tmp109__ |= (pSrc->report.Basic.rader << 3);
-				tmp109__ |= (pSrc->report.Basic.unmeasured << 4);
-				tmp109__ |= (pSrc->report.Basic.unused << 5);
-				*pBuf = tmp109__;
+				tmp111__ = 0U;
+				tmp111__ |= (pSrc->report.Basic.bss << 0);
+				tmp111__ |= (pSrc->report.Basic.ofdm_preamble << 1);
+				tmp111__ |= (pSrc->report.Basic.unid_signal << 2);
+				tmp111__ |= (pSrc->report.Basic.rader << 3);
+				tmp111__ |= (pSrc->report.Basic.unmeasured << 4);
+				tmp111__ |= (pSrc->report.Basic.unused << 5);
+				*pBuf = tmp111__;
 				*pnConsumed += 1;
 				/* fieldsEndFlag  = 1 */
 				nBuf -=  1 ;
@@ -16651,10 +16725,10 @@
 				frameshtons(pCtx, pBuf, pSrc->report.Beacon.meas_duration, 0);
 				*pnConsumed += 2;
 				pBuf += 2;
-				tmp110__ = 0U;
-				tmp110__ |= (pSrc->report.Beacon.condensed_PHY << 0);
-				tmp110__ |= (pSrc->report.Beacon.reported_frame_type << 7);
-				*pBuf = tmp110__;
+				tmp112__ = 0U;
+				tmp112__ |= (pSrc->report.Beacon.condensed_PHY << 0);
+				tmp112__ |= (pSrc->report.Beacon.reported_frame_type << 7);
+				*pBuf = tmp112__;
 				*pnConsumed += 1;
 				pBuf += 1;
 				nBuf -=  1 ;
@@ -16703,7 +16777,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp111__;
+	uint8_t tmp113__;
 	uint32_t status = DOT11F_PARSE_SUCCESS;
 	status = dot11f_get_packed_ie_measurement_request(pCtx, pSrc, &nNeeded);
 	if (!DOT11F_SUCCEEDED(status))
@@ -16718,14 +16792,14 @@
 		*pBuf = pSrc->measurement_token;
 		*pnConsumed += 1;
 		pBuf += 1;
-		tmp111__ = 0U;
-		tmp111__ |= (pSrc->parallel << 0);
-		tmp111__ |= (pSrc->enable << 1);
-		tmp111__ |= (pSrc->request << 2);
-		tmp111__ |= (pSrc->report << 3);
-		tmp111__ |= (pSrc->durationMandatory << 4);
-		tmp111__ |= (pSrc->unused << 5);
-		*pBuf = tmp111__;
+		tmp113__ = 0U;
+		tmp113__ |= (pSrc->parallel << 0);
+		tmp113__ |= (pSrc->enable << 1);
+		tmp113__ |= (pSrc->request << 2);
+		tmp113__ |= (pSrc->report << 3);
+		tmp113__ |= (pSrc->durationMandatory << 4);
+		tmp113__ |= (pSrc->unused << 5);
+		*pBuf = tmp113__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
@@ -16812,7 +16886,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp112__;
+	uint8_t tmp114__;
 	nNeeded  += 3;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -16824,11 +16898,11 @@
 		frameshtons(pCtx, pBuf, pSrc->MDID, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
-		tmp112__ = 0U;
-		tmp112__ |= (pSrc->overDSCap << 0);
-		tmp112__ |= (pSrc->resourceReqCap << 1);
-		tmp112__ |= (pSrc->reserved << 2);
-		*pBuf = tmp112__;
+		tmp114__ = 0U;
+		tmp114__ |= (pSrc->overDSCap << 0);
+		tmp114__ |= (pSrc->resourceReqCap << 1);
+		tmp114__ |= (pSrc->reserved << 2);
+		*pBuf = tmp114__;
 		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
@@ -16850,8 +16924,8 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp113__;
-	uint8_t tmp114__;
+	uint8_t tmp115__;
+	uint8_t tmp116__;
 	uint32_t status = DOT11F_PARSE_SUCCESS;
 	status = dot11f_get_packed_ie_neighbor_report(pCtx, pSrc, &nNeeded);
 	if (!DOT11F_SUCCEEDED(status))
@@ -16866,24 +16940,24 @@
 		DOT11F_MEMCPY(pCtx, pBuf, pSrc->bssid, 6);
 		*pnConsumed += 6;
 		pBuf += 6;
-		tmp113__ = 0U;
-		tmp113__ |= (pSrc->APReachability << 0);
-		tmp113__ |= (pSrc->Security << 2);
-		tmp113__ |= (pSrc->KeyScope << 3);
-		tmp113__ |= (pSrc->SpecMgmtCap << 4);
-		tmp113__ |= (pSrc->QosCap << 5);
-		tmp113__ |= (pSrc->apsd << 6);
-		tmp113__ |= (pSrc->rrm << 7);
-		*pBuf = tmp113__;
+		tmp115__ = 0U;
+		tmp115__ |= (pSrc->APReachability << 0);
+		tmp115__ |= (pSrc->Security << 2);
+		tmp115__ |= (pSrc->KeyScope << 3);
+		tmp115__ |= (pSrc->SpecMgmtCap << 4);
+		tmp115__ |= (pSrc->QosCap << 5);
+		tmp115__ |= (pSrc->apsd << 6);
+		tmp115__ |= (pSrc->rrm << 7);
+		*pBuf = tmp115__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp114__ = 0U;
-		tmp114__ |= (pSrc->DelayedBA << 0);
-		tmp114__ |= (pSrc->ImmBA << 1);
-		tmp114__ |= (pSrc->MobilityDomain << 2);
-		tmp114__ |= (pSrc->reserved << 3);
-		*pBuf = tmp114__;
+		tmp116__ = 0U;
+		tmp116__ |= (pSrc->DelayedBA << 0);
+		tmp116__ |= (pSrc->ImmBA << 1);
+		tmp116__ |= (pSrc->MobilityDomain << 2);
+		tmp116__ |= (pSrc->reserved << 3);
+		*pBuf = tmp116__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
@@ -16971,7 +17045,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp115__;
+	uint8_t tmp117__;
 	nNeeded  += 1;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -16980,12 +17054,12 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp115__ = 0U;
-		tmp115__ |= (pSrc->chanWidth << 0);
-		tmp115__ |= (pSrc->reserved << 2);
-		tmp115__ |= (pSrc->rxNSS << 4);
-		tmp115__ |= (pSrc->rxNSSType << 7);
-		*pBuf = tmp115__;
+		tmp117__ = 0U;
+		tmp117__ |= (pSrc->chanWidth << 0);
+		tmp117__ |= (pSrc->reserved << 2);
+		tmp117__ |= (pSrc->rxNSS << 4);
+		tmp117__ |= (pSrc->rxNSSType << 7);
+		*pBuf = tmp117__;
 		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
@@ -17460,7 +17534,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp116__;
+	uint8_t tmp118__;
 	nNeeded  += 1;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -17469,13 +17543,13 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp116__ = 0U;
-		tmp116__ |= (pSrc->ac_bk_traffic_aval << 0);
-		tmp116__ |= (pSrc->ac_be_traffic_aval << 1);
-		tmp116__ |= (pSrc->ac_vi_traffic_aval << 2);
-		tmp116__ |= (pSrc->ac_vo_traffic_aval << 3);
-		tmp116__ |= (pSrc->reserved << 4);
-		*pBuf = tmp116__;
+		tmp118__ = 0U;
+		tmp118__ |= (pSrc->ac_bk_traffic_aval << 0);
+		tmp118__ |= (pSrc->ac_be_traffic_aval << 1);
+		tmp118__ |= (pSrc->ac_vi_traffic_aval << 2);
+		tmp118__ |= (pSrc->ac_vo_traffic_aval << 3);
+		tmp118__ |= (pSrc->reserved << 4);
+		*pBuf = tmp118__;
 		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
@@ -17631,7 +17705,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp117__;
+	uint8_t tmp119__;
 	nNeeded  += 1;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -17640,13 +17714,13 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp117__ = 0U;
-		tmp117__ |= (pSrc->count << 0);
-		tmp117__ |= (pSrc->qack << 4);
-		tmp117__ |= (pSrc->qreq << 5);
-		tmp117__ |= (pSrc->txopreq << 6);
-		tmp117__ |= (pSrc->reserved << 7);
-		*pBuf = tmp117__;
+		tmp119__ = 0U;
+		tmp119__ |= (pSrc->count << 0);
+		tmp119__ |= (pSrc->qack << 4);
+		tmp119__ |= (pSrc->qreq << 5);
+		tmp119__ |= (pSrc->txopreq << 6);
+		tmp119__ |= (pSrc->reserved << 7);
+		*pBuf = tmp119__;
 		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
@@ -17668,7 +17742,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp118__;
+	uint8_t tmp120__;
 	nNeeded  += 1;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -17677,15 +17751,15 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp118__ = 0U;
-		tmp118__ |= (pSrc->acvo_uapsd << 0);
-		tmp118__ |= (pSrc->acvi_uapsd << 1);
-		tmp118__ |= (pSrc->acbk_uapsd << 2);
-		tmp118__ |= (pSrc->acbe_uapsd << 3);
-		tmp118__ |= (pSrc->qack << 4);
-		tmp118__ |= (pSrc->max_sp_length << 5);
-		tmp118__ |= (pSrc->more_data_ack << 7);
-		*pBuf = tmp118__;
+		tmp120__ = 0U;
+		tmp120__ |= (pSrc->acvo_uapsd << 0);
+		tmp120__ |= (pSrc->acvi_uapsd << 1);
+		tmp120__ |= (pSrc->acbk_uapsd << 2);
+		tmp120__ |= (pSrc->acbe_uapsd << 3);
+		tmp120__ |= (pSrc->qack << 4);
+		tmp120__ |= (pSrc->max_sp_length << 5);
+		tmp120__ |= (pSrc->more_data_ack << 7);
+		*pBuf = tmp120__;
 		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
@@ -18322,7 +18396,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint16_t tmp119__;
+	uint16_t tmp121__;
 	uint32_t status = DOT11F_PARSE_SUCCESS;
 	status = dot11f_get_packed_iewapi(pCtx, pSrc, &nNeeded);
 	if (!DOT11F_SUCCEEDED(status))
@@ -18352,10 +18426,10 @@
 		DOT11F_MEMCPY(pCtx, pBuf, pSrc->multicast_cipher_suite, 4);
 		*pnConsumed += 4;
 		pBuf += 4;
-		tmp119__ = 0U;
-		tmp119__ |= (pSrc->preauth << 0);
-		tmp119__ |= (pSrc->reserved << 1);
-		frameshtons(pCtx, pBuf, tmp119__, 0);
+		tmp121__ = 0U;
+		tmp121__ |= (pSrc->preauth << 0);
+		tmp121__ |= (pSrc->reserved << 1);
+		frameshtons(pCtx, pBuf, tmp121__, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
 		nBuf -=  2 ;
@@ -18495,7 +18569,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp120__;
+	uint8_t tmp122__;
 	nNeeded  += 2;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -18517,13 +18591,13 @@
 		*pBuf = pSrc->version;
 		*pnConsumed += 1;
 		pBuf += 1;
-		tmp120__ = 0U;
-		tmp120__ |= (pSrc->reserved << 0);
-		tmp120__ |= (pSrc->qack << 4);
-		tmp120__ |= (pSrc->queue_request << 5);
-		tmp120__ |= (pSrc->txop_request << 6);
-		tmp120__ |= (pSrc->more_ack << 7);
-		*pBuf = tmp120__;
+		tmp122__ = 0U;
+		tmp122__ |= (pSrc->reserved << 0);
+		tmp122__ |= (pSrc->qack << 4);
+		tmp122__ |= (pSrc->queue_request << 5);
+		tmp122__ |= (pSrc->txop_request << 6);
+		tmp122__ |= (pSrc->more_ack << 7);
+		*pBuf = tmp122__;
 		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
@@ -18545,7 +18619,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp121__;
+	uint8_t tmp123__;
 	nNeeded  += 2;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -18567,11 +18641,11 @@
 		*pBuf = pSrc->version;
 		*pnConsumed += 1;
 		pBuf += 1;
-		tmp121__ = 0U;
-		tmp121__ |= (pSrc->param_set_count << 0);
-		tmp121__ |= (pSrc->reserved << 4);
-		tmp121__ |= (pSrc->uapsd << 7);
-		*pBuf = tmp121__;
+		tmp123__ = 0U;
+		tmp123__ |= (pSrc->param_set_count << 0);
+		tmp123__ |= (pSrc->reserved << 4);
+		tmp123__ |= (pSrc->uapsd << 7);
+		*pBuf = tmp123__;
 		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
@@ -18593,7 +18667,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp122__;
+	uint8_t tmp124__;
 	nNeeded  += 2;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -18615,15 +18689,15 @@
 		*pBuf = pSrc->version;
 		*pnConsumed += 1;
 		pBuf += 1;
-		tmp122__ = 0U;
-		tmp122__ |= (pSrc->acvo_uapsd << 0);
-		tmp122__ |= (pSrc->acvi_uapsd << 1);
-		tmp122__ |= (pSrc->acbk_uapsd << 2);
-		tmp122__ |= (pSrc->acbe_uapsd << 3);
-		tmp122__ |= (pSrc->reserved1 << 4);
-		tmp122__ |= (pSrc->max_sp_length << 5);
-		tmp122__ |= (pSrc->reserved2 << 7);
-		*pBuf = tmp122__;
+		tmp124__ = 0U;
+		tmp124__ |= (pSrc->acvo_uapsd << 0);
+		tmp124__ |= (pSrc->acvi_uapsd << 1);
+		tmp124__ |= (pSrc->acbk_uapsd << 2);
+		tmp124__ |= (pSrc->acbe_uapsd << 3);
+		tmp124__ |= (pSrc->reserved1 << 4);
+		tmp124__ |= (pSrc->max_sp_length << 5);
+		tmp124__ |= (pSrc->reserved2 << 7);
+		*pBuf = tmp124__;
 		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
@@ -18645,14 +18719,14 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp123__;
-	uint8_t tmp124__;
 	uint8_t tmp125__;
 	uint8_t tmp126__;
 	uint8_t tmp127__;
 	uint8_t tmp128__;
 	uint8_t tmp129__;
 	uint8_t tmp130__;
+	uint8_t tmp131__;
+	uint8_t tmp132__;
 	nNeeded  += 19;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -18680,76 +18754,76 @@
 		*pBuf = pSrc->reserved2;
 		*pnConsumed += 1;
 		pBuf += 1;
-		tmp123__ = 0U;
-		tmp123__ |= (pSrc->acbe_aifsn << 0);
-		tmp123__ |= (pSrc->acbe_acm << 4);
-		tmp123__ |= (pSrc->acbe_aci << 5);
-		tmp123__ |= (pSrc->unused1 << 7);
-		*pBuf = tmp123__;
+		tmp125__ = 0U;
+		tmp125__ |= (pSrc->acbe_aifsn << 0);
+		tmp125__ |= (pSrc->acbe_acm << 4);
+		tmp125__ |= (pSrc->acbe_aci << 5);
+		tmp125__ |= (pSrc->unused1 << 7);
+		*pBuf = tmp125__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp124__ = 0U;
-		tmp124__ |= (pSrc->acbe_acwmin << 0);
-		tmp124__ |= (pSrc->acbe_acwmax << 4);
-		*pBuf = tmp124__;
+		tmp126__ = 0U;
+		tmp126__ |= (pSrc->acbe_acwmin << 0);
+		tmp126__ |= (pSrc->acbe_acwmax << 4);
+		*pBuf = tmp126__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
 		frameshtons(pCtx, pBuf, pSrc->acbe_txoplimit, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
-		tmp125__ = 0U;
-		tmp125__ |= (pSrc->acbk_aifsn << 0);
-		tmp125__ |= (pSrc->acbk_acm << 4);
-		tmp125__ |= (pSrc->acbk_aci << 5);
-		tmp125__ |= (pSrc->unused2 << 7);
-		*pBuf = tmp125__;
+		tmp127__ = 0U;
+		tmp127__ |= (pSrc->acbk_aifsn << 0);
+		tmp127__ |= (pSrc->acbk_acm << 4);
+		tmp127__ |= (pSrc->acbk_aci << 5);
+		tmp127__ |= (pSrc->unused2 << 7);
+		*pBuf = tmp127__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp126__ = 0U;
-		tmp126__ |= (pSrc->acbk_acwmin << 0);
-		tmp126__ |= (pSrc->acbk_acwmax << 4);
-		*pBuf = tmp126__;
+		tmp128__ = 0U;
+		tmp128__ |= (pSrc->acbk_acwmin << 0);
+		tmp128__ |= (pSrc->acbk_acwmax << 4);
+		*pBuf = tmp128__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
 		frameshtons(pCtx, pBuf, pSrc->acbk_txoplimit, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
-		tmp127__ = 0U;
-		tmp127__ |= (pSrc->acvi_aifsn << 0);
-		tmp127__ |= (pSrc->acvi_acm << 4);
-		tmp127__ |= (pSrc->acvi_aci << 5);
-		tmp127__ |= (pSrc->unused3 << 7);
-		*pBuf = tmp127__;
+		tmp129__ = 0U;
+		tmp129__ |= (pSrc->acvi_aifsn << 0);
+		tmp129__ |= (pSrc->acvi_acm << 4);
+		tmp129__ |= (pSrc->acvi_aci << 5);
+		tmp129__ |= (pSrc->unused3 << 7);
+		*pBuf = tmp129__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp128__ = 0U;
-		tmp128__ |= (pSrc->acvi_acwmin << 0);
-		tmp128__ |= (pSrc->acvi_acwmax << 4);
-		*pBuf = tmp128__;
+		tmp130__ = 0U;
+		tmp130__ |= (pSrc->acvi_acwmin << 0);
+		tmp130__ |= (pSrc->acvi_acwmax << 4);
+		*pBuf = tmp130__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
 		frameshtons(pCtx, pBuf, pSrc->acvi_txoplimit, 0);
 		*pnConsumed += 2;
 		pBuf += 2;
-		tmp129__ = 0U;
-		tmp129__ |= (pSrc->acvo_aifsn << 0);
-		tmp129__ |= (pSrc->acvo_acm << 4);
-		tmp129__ |= (pSrc->acvo_aci << 5);
-		tmp129__ |= (pSrc->unused4 << 7);
-		*pBuf = tmp129__;
+		tmp131__ = 0U;
+		tmp131__ |= (pSrc->acvo_aifsn << 0);
+		tmp131__ |= (pSrc->acvo_acm << 4);
+		tmp131__ |= (pSrc->acvo_aci << 5);
+		tmp131__ |= (pSrc->unused4 << 7);
+		*pBuf = tmp131__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
-		tmp130__ = 0U;
-		tmp130__ |= (pSrc->acvo_acwmin << 0);
-		tmp130__ |= (pSrc->acvo_acwmax << 4);
-		*pBuf = tmp130__;
+		tmp132__ = 0U;
+		tmp132__ |= (pSrc->acvo_acwmin << 0);
+		tmp132__ |= (pSrc->acvo_acwmax << 4);
+		*pBuf = tmp132__;
 		*pnConsumed += 1;
 		pBuf += 1;
 		nBuf -=  1 ;
@@ -19344,7 +19418,7 @@
 	uint8_t *pIeLen = 0;
 	uint32_t nConsumedOnEntry = *pnConsumed;
 	uint32_t nNeeded = 0U;
-	uint8_t tmp131__;
+	uint8_t tmp133__;
 	nNeeded  += 1;
 	while (pSrc->present) {
 		if (nNeeded > nBuf)
@@ -19353,14 +19427,14 @@
 		++pBuf; ++(*pnConsumed);
 		pIeLen = pBuf;
 		++pBuf; ++(*pnConsumed);
-		tmp131__ = 0U;
-		tmp131__ |= (pSrc->info_request << 0);
-		tmp131__ |= (pSrc->forty_mhz_intolerant << 1);
-		tmp131__ |= (pSrc->twenty_mhz_bsswidth_req << 2);
-		tmp131__ |= (pSrc->obss_scan_exemption_req << 3);
-		tmp131__ |= (pSrc->obss_scan_exemption_grant << 4);
-		tmp131__ |= (pSrc->unused << 5);
-		*pBuf = tmp131__;
+		tmp133__ = 0U;
+		tmp133__ |= (pSrc->info_request << 0);
+		tmp133__ |= (pSrc->forty_mhz_intolerant << 1);
+		tmp133__ |= (pSrc->twenty_mhz_bsswidth_req << 2);
+		tmp133__ |= (pSrc->obss_scan_exemption_req << 3);
+		tmp133__ |= (pSrc->obss_scan_exemption_grant << 4);
+		tmp133__ |= (pSrc->unused << 5);
+		*pBuf = tmp133__;
 		*pnConsumed += 1;
 		/* fieldsEndFlag  = 1 */
 		nBuf -=  1 ;
@@ -20157,6 +20231,21 @@
 
 } /* End dot11f_unpack_wmm_del_ts. */
 
+uint32_t dot11f_pack_ext_channel_switch_action_frame(tpAniSirGlobal pCtx,
+	tDot11fext_channel_switch_action_frame *pFrm,
+	uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
+{
+	uint32_t i = 0;
+	uint32_t status = 0;
+	(void)i;
+	*pnConsumed = 0U;
+	status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
+			   FFS_ext_channel_switch_action_frame, IES_ext_channel_switch_action_frame);
+
+	return status;
+
+} /* End dot11f_unpack_ext_channel_switch_action_frame. */
+
 uint32_t dot11f_pack_ht2040_bss_coexistence_mgmt_action_frame(tpAniSirGlobal pCtx,
 	tDot11fht2040_bss_coexistence_mgmt_action_frame *pFrm,
 	uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
@@ -20357,6 +20446,11 @@
 				pCtx, (tDot11fFfVhtUserPositionArray *)
 				(pSrc + pFf->offset), pBufRemaining);
 			break;
+		case SigFfext_chan_switch_ann_action:
+			dot11f_pack_ff_ext_chan_switch_ann_action(
+				pCtx, (tDot11fFfext_chan_switch_ann_action *)
+				(pSrc + pFf->offset), pBufRemaining);
+			break;
 		default:
 			FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR-- I don"
 				"'t know about the Fixed Field %d; this is most l"
diff --git a/core/sap/inc/sap_api.h b/core/sap/inc/sap_api.h
index dc450e2..50a4239 100644
--- a/core/sap/inc/sap_api.h
+++ b/core/sap/inc/sap_api.h
@@ -187,6 +187,7 @@
 	eSAP_ACS_SCAN_SUCCESS_EVENT,
 #endif
 	eSAP_ACS_CHANNEL_SELECTED,
+	eSAP_ECSA_CHANGE_CHAN_IND,
 } eSapHddEvent;
 
 typedef enum {
@@ -407,6 +408,15 @@
 struct sap_roc_ready_ind_s {
 	uint32_t scan_id;
 };
+
+/**
+ * struct sap_ch_change_ind - channel change indication
+ * @new_chan: channel to change
+ */
+struct sap_ch_change_ind {
+	uint16_t new_chan;
+};
+
 /*
  * This struct will be filled in and passed to tpWLAN_SAPEventCB that is
  * provided during wlansap_start_bss call The event id corresponding to
@@ -450,7 +460,7 @@
 		tSap_DfsNolInfo sapDfsNolInfo;
 		struct sap_ch_selected_s sap_ch_selected;
 		struct sap_roc_ready_ind_s sap_roc_ind;
-
+		struct sap_ch_change_ind sap_chan_cng_ind;
 	} sapevt;
 } tSap_Event, *tpSap_Event;
 
diff --git a/core/sap/src/sap_api_link_cntl.c b/core/sap/src/sap_api_link_cntl.c
index 4ea65dc..381f444 100644
--- a/core/sap/src/sap_api_link_cntl.c
+++ b/core/sap/src/sap_api_link_cntl.c
@@ -974,6 +974,10 @@
 		CDF_TRACE(CDF_MODULE_ID_SAP, CDF_TRACE_LEVEL_INFO_HIGH,
 			  FL("Received set channel response"));
 		break;
+	case eCSR_ROAM_EXT_CHG_CHNL_IND:
+		CDF_TRACE(CDF_MODULE_ID_SAP, CDF_TRACE_LEVEL_INFO_HIGH,
+				FL("Received set channel Indication"));
+		break;
 	default:
 		CDF_TRACE(CDF_MODULE_ID_SAP, CDF_TRACE_LEVEL_ERROR,
 			  FL("CSR roam_status not handled roam_status = %s (%d)\n"),
@@ -1198,6 +1202,12 @@
 		sap_ctx->sapsMachine = eSAP_DISCONNECTED;
 		/* Inform cfg80211 and hostapd that BSS is not alive anymore */
 		break;
+	case eCSR_ROAM_EXT_CHG_CHNL_UPDATE_IND:
+		cdf_status = sap_signal_hdd_event(sap_ctx, csr_roam_info,
+				   eSAP_ECSA_CHANGE_CHAN_IND, NULL);
+		if (!CDF_IS_STATUS_SUCCESS(cdf_status))
+			cdf_ret_status = CDF_STATUS_E_FAILURE;
+		break;
 	default:
 		CDF_TRACE(CDF_MODULE_ID_SAP, CDF_TRACE_LEVEL_ERROR,
 			  FL("CSR roam_result = %s (%d) not handled\n"),
diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c
index 3d2021e..1ca439e 100644
--- a/core/sap/src/sap_fsm.c
+++ b/core/sap/src/sap_fsm.c
@@ -2814,7 +2814,14 @@
 		sap_ap_event.sapevt.sapDfsNolInfo.pDfsList = (void *)
 			(&mac_ctx->sap.SapDfsInfo.sapDfsChannelNolList[0]);
 		break;
-
+	case eSAP_ECSA_CHANGE_CHAN_IND:
+		CDF_TRACE(CDF_MODULE_ID_SAP, CDF_TRACE_LEVEL_INFO_HIGH,
+				"In %s, SAP event callback event = %s",
+				__func__, "eSAP_ECSA_CHANGE_CHAN_IND");
+		sap_ap_event.sapHddEventCode = eSAP_ECSA_CHANGE_CHAN_IND;
+		sap_ap_event.sapevt.sap_chan_cng_ind.new_chan =
+					   csr_roaminfo->target_channel;
+		break;
 	default:
 		CDF_TRACE(CDF_MODULE_ID_SAP, CDF_TRACE_LEVEL_ERROR,
 			  FL("SAP Unknown callback event = %d"),
diff --git a/core/sap/src/sap_module.c b/core/sap/src/sap_module.c
index b2df4dc..b54f656 100644
--- a/core/sap/src/sap_module.c
+++ b/core/sap/src/sap_module.c
@@ -2179,7 +2179,7 @@
    SIDE EFFECTS
    ============================================================================*/
 CDF_STATUS
-wlansap_channel_change_request(void *pSapCtx, uint8_t targetChannel)
+wlansap_channel_change_request(void *pSapCtx, uint8_t target_channel)
 {
 	ptSapContext sapContext = NULL;
 	CDF_STATUS cdf_ret_status = CDF_STATUS_E_FAILURE;
@@ -2205,7 +2205,7 @@
 	}
 	mac_ctx = PMAC_STRUCT(hHal);
 	phy_mode = sapContext->csr_roamProfile.phyMode;
-	sapContext->csr_roamProfile.ChannelInfo.ChannelList[0] = targetChannel;
+	sapContext->csr_roamProfile.ChannelInfo.ChannelList[0] = target_channel;
 	/*
 	 * We are getting channel bonding mode from sapDfsInfor structure
 	 * because we've implemented channel width fallback mechanism for DFS
@@ -2214,8 +2214,12 @@
 	cb_mode = mac_ctx->sap.SapDfsInfo.new_cbMode;
 	vht_channel_width = mac_ctx->sap.SapDfsInfo.new_chanWidth;
 	ch_params.ch_width = vht_channel_width;
-	sme_set_ch_params(hHal, phy_mode, targetChannel, 0, &ch_params);
+	sme_set_ch_params(hHal, phy_mode, target_channel, 0, &ch_params);
 	sapContext->ch_params.ch_width = vht_channel_width;
+	/* Update the channel as this will be used to
+	 * send event to supplicant
+	 */
+	sapContext->channel = target_channel;
 	sapContext->csr_roamProfile.ch_params.ch_width = vht_channel_width;
 	cdf_ret_status = sme_roam_channel_change_req(hHal, sapContext->bssid,
 				cb_mode, &sapContext->csr_roamProfile);
diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h
index 3654017..88dead7 100644
--- a/core/sme/inc/csr_api.h
+++ b/core/sme/inc/csr_api.h
@@ -528,6 +528,7 @@
 
 	/* Channel sw update notification */
 	eCSR_ROAM_DFS_CHAN_SW_NOTIFY,
+	eCSR_ROAM_EXT_CHG_CHNL_IND,
 } eRoamCmdStatus;
 
 /* comment inside indicates what roaming callback gets */
@@ -636,6 +637,7 @@
 	eCSR_ROAM_RESULT_CHANNEL_CHANGE_FAILURE,
 	eCSR_ROAM_RESULT_DFS_CHANSW_UPDATE_SUCCESS,
 	eCSR_ROAM_RESULT_DFS_CHANSW_UPDATE_FAILURE,
+	eCSR_ROAM_EXT_CHG_CHNL_UPDATE_IND,
 } eCsrRoamResult;
 
 /*----------------------------------------------------------------------------
@@ -1374,6 +1376,7 @@
 	uint8_t replay_ctr[SIR_REPLAY_CTR_LEN];
 #endif
 	tSirSmeChanInfo chan_info;
+	uint8_t target_channel;
 } tCsrRoamInfo;
 
 typedef struct tagCsrFreqScanInfo {
@@ -1400,6 +1403,7 @@
 	/* Timing and fine Timing measurement capability clubbed together */
 	uint8_t timingMeasCap;
 	tSirSmeChanInfo chan_info;
+	uint8_t target_channel;
 } tSirSmeAssocIndToUpperLayerCnf, *tpSirSmeAssocIndToUpperLayerCnf;
 
 typedef struct tagCsrSummaryStatsInfo {
diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h
index c8e1e36..b931dc4 100644
--- a/core/sme/inc/sme_api.h
+++ b/core/sme/inc/sme_api.h
@@ -946,6 +946,8 @@
 CDF_STATUS sme_handle_dfs_chan_scan(tHalHandle hHal, uint8_t dfs_flag);
 CDF_STATUS sme_set_mas(uint32_t val);
 CDF_STATUS sme_set_miracast(tHalHandle hal, uint8_t filter_type);
+CDF_STATUS sme_ext_change_channel(tHalHandle hHal, uint32_t channel,
+					  uint8_t session_id);
 
 CDF_STATUS sme_configure_modulated_dtim(tHalHandle hal, uint8_t session_id,
 				      uint32_t modulated_dtim);
diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c
index ac42abd..4bfb7d9 100644
--- a/core/sme/src/common/sme_api.c
+++ b/core/sme/src/common/sme_api.c
@@ -1919,6 +1919,48 @@
 	return status;
 }
 
+/**
+ * sme_extended_change_channel_ind()- function to indicate ECSA
+ * action frame is received in lim to SAP
+ * @mac_ctx:  pointer to global mac structure
+ * @msg_buf: contain new channel and session id.
+ *
+ * This function is called to post ECSA action frame
+ * receive event to SAP.
+ *
+ * Return: success if msg indicated to SAP else return failure
+ */
+static CDF_STATUS sme_extended_change_channel_ind(tpAniSirGlobal mac_ctx,
+						void *msg_buf)
+{
+	struct sir_sme_ext_cng_chan_ind *ext_chan_ind;
+	CDF_STATUS status = CDF_STATUS_SUCCESS;
+	uint32_t session_id = 0;
+	tCsrRoamInfo roamInfo = {0};
+	eRoamCmdStatus roam_status;
+	eCsrRoamResult roam_result;
+
+
+	ext_chan_ind = msg_buf;
+	if (NULL == ext_chan_ind) {
+		sms_log(mac_ctx, LOGE,
+			FL("pMsg is NULL for eWNI_SME_EXT_CHANGE_CHANNEL_IND"));
+		return CDF_STATUS_E_FAILURE;
+	}
+	session_id = ext_chan_ind->session_id;
+	roamInfo.target_channel = ext_chan_ind->new_channel;
+	roam_status = eCSR_ROAM_EXT_CHG_CHNL_IND;
+	roam_result = eCSR_ROAM_EXT_CHG_CHNL_UPDATE_IND;
+	sms_log(mac_ctx, LOG1,
+		FL("sapdfs: Received eWNI_SME_EXT_CHANGE_CHANNEL_IND for session id [%d]"),
+		session_id);
+
+	/* Indicate Ext Channel Change event to SAP */
+	csr_roam_call_callback(mac_ctx, session_id, &roamInfo, 0,
+					roam_status, roam_result);
+	return status;
+}
+
 #if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
 /*------------------------------------------------------------------
  *
@@ -2681,6 +2723,10 @@
 			pMac->sme.set_thermal_level_cb(pMac->hHdd,
 								pMsg->bodyval);
 		break;
+	case eWNI_SME_EXT_CHANGE_CHANNEL_IND:
+		 status = sme_extended_change_channel_ind(pMac, pMsg->bodyptr);
+		 cdf_mem_free(pMsg->bodyptr);
+		 break;
 	default:
 
 		if ((pMsg->type >= eWNI_SME_MSG_TYPES_BEGIN)
@@ -8078,6 +8124,45 @@
 	return status;
 }
 
+/**
+ * sme_ext_change_channel()- function to post send ECSA
+ * action frame to csr.
+ * @hHal: Hal context
+ * @channel: new channel to switch
+ * @session_id: senssion it should be sent on.
+ *
+ * This function is called to post ECSA frame to csr.
+ *
+ * Return: success if msg is sent else return failure
+ */
+CDF_STATUS sme_ext_change_channel(tHalHandle h_hal, uint32_t channel,
+						uint8_t session_id)
+{
+	CDF_STATUS status = CDF_STATUS_SUCCESS;
+	tpAniSirGlobal mac_ctx  = PMAC_STRUCT(h_hal);
+	uint8_t channel_state;
+
+	sms_log(mac_ctx, LOGE, FL(" Set Channel %d "), channel);
+	channel_state =
+		cds_get_channel_state(channel);
+
+	if (CHANNEL_STATE_DISABLE == channel_state) {
+		sms_log(mac_ctx, LOGE, FL(" Invalid channel %d "), channel);
+		return CDF_STATUS_E_INVAL;
+	}
+
+	status = sme_acquire_global_lock(&mac_ctx->sme);
+
+	if (CDF_STATUS_SUCCESS == status) {
+		/* update the channel list to the firmware */
+		status = csr_send_ext_change_channel(mac_ctx,
+						channel, session_id);
+		sme_release_global_lock(&mac_ctx->sme);
+	}
+
+	return status;
+}
+
 /* ---------------------------------------------------------------------------
     \fn sme_get_roam_intra_band
     \brief  get Intra band roaming
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index 22df065..d860d6f 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -18345,6 +18345,36 @@
 }
 
 /**
+ * csr_send_ext_change_channel()- function to post send ECSA
+ * action frame to lim.
+ * @mac_ctx: pointer to global mac structure
+ * @channel: new channel to switch
+ * @session_id: senssion it should be sent on.
+ *
+ * This function is called to post ECSA frame to lim.
+ *
+ * Return: success if msg posted to LIM else return failure
+ */
+CDF_STATUS csr_send_ext_change_channel(tpAniSirGlobal mac_ctx, uint32_t channel,
+					uint8_t session_id)
+{
+	CDF_STATUS status = CDF_STATUS_SUCCESS;
+	struct sir_sme_ext_cng_chan_req *msg;
+
+	msg = cdf_mem_malloc(sizeof(*msg));
+	if (NULL == msg)
+		return CDF_STATUS_E_NOMEM;
+
+	cdf_mem_zero(msg, sizeof(*msg));
+	msg->message_type = eWNI_SME_EXT_CHANGE_CHANNEL;
+	msg->length = sizeof(*msg);
+	msg->new_channel = channel;
+	msg->session_id = session_id;
+	status = cds_send_mb_message_to_mac(msg);
+	return status;
+}
+
+/**
  * csr_roam_send_chan_sw_ie_request() - Request to transmit CSA IE
  * @mac_ctx:        Global MAC context
  * @bssid:          BSSID
diff --git a/core/sme/src/csr/csr_inside_api.h b/core/sme/src/csr/csr_inside_api.h
index 0c7fef8..0f21bec 100644
--- a/core/sme/src/csr/csr_inside_api.h
+++ b/core/sme/src/csr/csr_inside_api.h
@@ -1056,6 +1056,8 @@
 void csr_clear_votes_for_country_info(tpAniSirGlobal pMac);
 
 #endif
+CDF_STATUS csr_send_ext_change_channel(tpAniSirGlobal mac_ctx,
+				uint32_t channel, uint8_t session_id);
 
 #ifdef QCA_HT_2040_COEX
 CDF_STATUS csr_set_ht2040_mode(tpAniSirGlobal pMac, uint32_t sessionId,