diff --git a/core/mac/src/pe/include/rrm_global.h b/core/mac/src/pe/include/rrm_global.h index d8afcfa50e7f..e963ca276ed8 100644 --- a/core/mac/src/pe/include/rrm_global.h +++ b/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; 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 347b72c87ed2..3a1a691a6974 100644 --- a/core/mac/src/pe/lim/lim_process_action_frame.c +++ b/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, diff --git a/core/mac/src/pe/rrm/rrm_api.c b/core/mac/src/pe/rrm/rrm_api.c index 2dc7996e0c2d..6d61481e8b14 100644 --- a/core/mac/src/pe/rrm/rrm_api.c +++ b/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;