Browse Source

qcacld-3.0: Drop duplicate Beacon Report request

Currently, driver does not check for duplication of rrm
request. If driver receives any duplicate rrm request,
then driver sends pilot frame for second rrm request which
is not acceptable.
Add changes to drop all duplicate rrm requests to fix this.

Change-Id: I44a67a4119ae55ac94f5c9ecdb01032f6fd39c7c
CRs-Fixed: 2195990
Abhinav Kumar 7 years ago
parent
commit
fcc22e0b94

+ 2 - 1
core/mac/src/pe/include/rrm_global.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2012, 2014-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2012, 2014-2018 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -217,6 +217,7 @@ typedef struct sRrmPEContext {
 	int8_t txMgmtPower;
 	/* Dialog token for the request initiated from station. */
 	uint8_t DialogToken;
+	uint16_t prev_rrm_report_seq_num;
 	tpRRMReq pCurrentReq;
 } tRrmPEContext, *tpRrmPEContext;
 

+ 12 - 0
core/mac/src/pe/lim/lim_process_action_frame.c

@@ -1298,6 +1298,7 @@ __lim_process_radio_measure_request(tpAniSirGlobal pMac, uint8_t *pRxPacketInfo,
 	tDot11fRadioMeasurementRequest *frm;
 	uint32_t frameLen, nStatus;
 	uint8_t *pBody;
+	uint16_t curr_seq_num;
 
 	pHdr = WMA_GET_RX_MAC_HEADER(pRxPacketInfo);
 	pBody = WMA_GET_RX_MPDU_DATA(pRxPacketInfo);
@@ -1307,6 +1308,17 @@ __lim_process_radio_measure_request(tpAniSirGlobal pMac, uint8_t *pRxPacketInfo,
 		return;
 	}
 
+	curr_seq_num = ((pHdr->seqControl.seqNumHi <<
+			 HIGH_SEQ_NUM_OFFSET) |
+			pHdr->seqControl.seqNumLo);
+	if (curr_seq_num == pMac->rrm.rrmPEContext.prev_rrm_report_seq_num &&
+	    pMac->rrm.rrmPEContext.pCurrentReq) {
+		pe_err("rrm report req frame, seq num: %d is already in progress, drop it",
+			curr_seq_num);
+		return;
+	}
+	/* Save seq no of currently processing rrm report req frame */
+	pMac->rrm.rrmPEContext.prev_rrm_report_seq_num = curr_seq_num;
 	lim_send_sme_mgmt_frame_ind(pMac, pHdr->fc.subType, (uint8_t *)pHdr,
 		frameLen + sizeof(tSirMacMgmtHdr), 0,
 		WMA_GET_RX_CH(pRxPacketInfo), psessionEntry,

+ 1 - 0
core/mac/src/pe/rrm/rrm_api.c

@@ -1254,6 +1254,7 @@ tSirRetStatus rrm_initialize(tpAniSirGlobal pMac)
 	pMac->rrm.rrmPEContext.DialogToken = 0;
 
 	pMac->rrm.rrmPEContext.rrmEnable = 0;
+	pMac->rrm.rrmPEContext.prev_rrm_report_seq_num = 0xFFFF;
 
 	qdf_mem_set(pRRMCaps, sizeof(tRRMCaps), 0);
 	pRRMCaps->LinkMeasurement = 1;