Ver código fonte

qcacld-3.0: Send assoc response for duplicate assoc request frames

qcacld-2.0 to qcacld-3.0 propagation

Few STA/P2P-client's are sending assoc req frame and waiting for
300-500ms. If they don't receive the assoc resp frame within
this time then they resending the assoc req frame. These frames
are not going to have retry bit set.

In the current design host driver is not handling these duplicate
assoc req frames without retry bit set.

To mitigate this issue, while processing assoc request frame,
if pStaDs entry already exists then send assoc response with
same tid and stop processing the assoc req further.

Change-Id: I6d67f4cd352bbee422301b832742e7386666037f
CRs-Fixed: 868736
Masti, Narayanraddi 9 anos atrás
pai
commit
c8669318e8
1 arquivos alterados com 26 adições e 7 exclusões
  1. 26 7
      core/mac/src/pe/lim/lim_process_assoc_req_frame.c

+ 26 - 7
core/mac/src/pe/lim/lim_process_assoc_req_frame.c

@@ -280,13 +280,32 @@ lim_process_assoc_req_frame(tpAniSirGlobal pMac, uint8_t *pRxPacketInfo,
 	 */
 	pStaDs = dph_lookup_hash_entry(pMac, pHdr->sa, &assoc_id,
 					&psessionEntry->dph.dphHashTable);
-	if ((NULL != pStaDs) && (pHdr->fc.retry > 0)) {
-		lim_log(pMac, LOGE,
-		FL("STA is initiating Assoc Req after ACK lost. Do not process"
-		" sessionid: %d sys subType=%d for role=%d from: "
-		MAC_ADDRESS_STR), psessionEntry->peSessionId,
-		subType, GET_LIM_SYSTEM_ROLE(psessionEntry),
-		MAC_ADDR_ARRAY(pHdr->sa));
+	if ((NULL != pStaDs)) {
+		if (pHdr->fc.retry > 0) {
+			lim_log(pMac, LOGE,
+			FL("STA is initiating Assoc Req after ACK lost. Do not process"
+			" sessionid: %d sys subType=%d for role=%d from: "
+			MAC_ADDRESS_STR), psessionEntry->peSessionId,
+			subType, GET_LIM_SYSTEM_ROLE(psessionEntry),
+			MAC_ADDR_ARRAY(pHdr->sa));
+		} else {
+			/*
+			 * STA might have missed the assoc response,
+			 * so it is sending assoc request frame again.
+			 */
+			lim_send_assoc_rsp_mgmt_frame(pMac, eSIR_SUCCESS,
+				pStaDs->assocId, pStaDs->staAddr,
+				pStaDs->mlmStaContext.subType, pStaDs,
+				psessionEntry);
+			lim_log(pMac, LOGE,
+			FL("DUT already received an assoc request frame "
+			"and STA is sending another assoc req.So, do not "
+			"Process sessionid: %d sys subType=%d for role=%d "
+			"from: "MAC_ADDRESS_STR),
+			psessionEntry->peSessionId, subType,
+			psessionEntry->limSystemRole,
+			MAC_ADDR_ARRAY(pHdr->sa));
+		}
 		return;
 	}