瀏覽代碼

qcacld-3.0: Delete PMF Sta from previous vdev

qcacld-2.0 to qcacld-3.0 propagation

If a PMF Sta is already connected to one interface and try
to switch to other interface without sending deauth/disassoc,
sta entry is not deleted from previous vdev and one more entry
is created on current vdev. Due to this htt is not able to get
valid peer for EAPOL packets and EAPOL packets are dropped leading
to connection failure.
To fix this, Add check to delete PMF Sta from one vdev when
assoc request is received on another vdev.

Change-Id: Ida2e20fe08af3c6ed426822a71db1fd6854a0bea
CRs-Fixed: 1033224
Poddar, Siddarth 8 年之前
父節點
當前提交
7ca1e08421
共有 2 個文件被更改,包括 7 次插入4 次删除
  1. 6 3
      core/mac/src/pe/lim/lim_process_assoc_req_frame.c
  2. 1 1
      core/mac/src/pe/lim/lim_process_auth_frame.c

+ 6 - 3
core/mac/src/pe/lim/lim_process_assoc_req_frame.c

@@ -137,6 +137,7 @@ static void lim_convert_supported_channels(tpAniSirGlobal mac_ctx,
  * lim_check_sta_in_pe_entries() - checks if sta exists in any dph tables.
  * lim_check_sta_in_pe_entries() - checks if sta exists in any dph tables.
  * @mac_ctx: Pointer to Global MAC structure
  * @mac_ctx: Pointer to Global MAC structure
  * @hdr: A pointer to the MAC header
  * @hdr: A pointer to the MAC header
+ * @sessionid - session id for which session is initiated
  *
  *
  * This function is called by lim_process_assoc_req_frame() to check if STA
  * This function is called by lim_process_assoc_req_frame() to check if STA
  * entry already exists in any of the PE entries of the AP. If it exists, deauth
  * entry already exists in any of the PE entries of the AP. If it exists, deauth
@@ -145,7 +146,8 @@ static void lim_convert_supported_channels(tpAniSirGlobal mac_ctx,
  *
  *
  * Return: void
  * Return: void
  */
  */
-void lim_check_sta_in_pe_entries(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr)
+void lim_check_sta_in_pe_entries(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr,
+				 uint16_t sessionid)
 {
 {
 	uint8_t i;
 	uint8_t i;
 	uint16_t assoc_id = 0;
 	uint16_t assoc_id = 0;
@@ -161,7 +163,8 @@ void lim_check_sta_in_pe_entries(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr)
 					&assoc_id, &session->dph.dphHashTable);
 					&assoc_id, &session->dph.dphHashTable);
 			if (sta_ds
 			if (sta_ds
 #ifdef WLAN_FEATURE_11W
 #ifdef WLAN_FEATURE_11W
-			    && !sta_ds->rmfEnabled
+				&& (!sta_ds->rmfEnabled ||
+				    (sessionid != session->peSessionId))
 #endif
 #endif
 			    ) {
 			    ) {
 				lim_log(mac_ctx, LOGE,
 				lim_log(mac_ctx, LOGE,
@@ -1778,7 +1781,7 @@ void lim_process_assoc_req_frame(tpAniSirGlobal mac_ctx, uint8_t *rx_pkt_info,
 		return;
 		return;
 	}
 	}
 
 
-	lim_check_sta_in_pe_entries(mac_ctx, hdr);
+	lim_check_sta_in_pe_entries(mac_ctx, hdr, session->peSessionId);
 
 
 	/* Get pointer to Re/Association Request frame body */
 	/* Get pointer to Re/Association Request frame body */
 	frm_body = WMA_GET_RX_MPDU_DATA(rx_pkt_info);
 	frm_body = WMA_GET_RX_MPDU_DATA(rx_pkt_info);

+ 1 - 1
core/mac/src/pe/lim/lim_process_auth_frame.c

@@ -357,7 +357,7 @@ static void lim_process_auth_frame_type1(tpAniSirGlobal mac_ctx,
 			 * received but ACK lost at STA side, in this case 2nd
 			 * received but ACK lost at STA side, in this case 2nd
 			 * auth frame is already in transmission queue
 			 * auth frame is already in transmission queue
 			 */
 			 */
-			lim_log(mac_ctx, LOGE,
+			lim_log(mac_ctx, LOGW,
 				FL("STA is initiating Auth after ACK lost"));
 				FL("STA is initiating Auth after ACK lost"));
 			return;
 			return;
 		}
 		}