浏览代码

qcacld-3.0: Update addr3 in beacon if addr3 is 0 during roam sync ind

During roam sync indication if the addr3 of the beacon is 0, the
PE session is created with bssid 0. Now if disconnect is received
from AP or heartbeat failure happens, LIM is not able to find the
session from the BSSID and thus VDEV delete is not sent to firmware
but sme session is cleaned up.

If a new connect req is received from supplicant it tries to disconnect
the existing session, but as sme session is not connected, disconnect
is dropped and connect req is processed and thus VDEV start is sent
without VDEV stop leading to firmware crash.

To fix this, if the addr3 of the received beacon/probe in roam sync is
0, update it to BSSID from bssid provided by firmware in the sync
indication.

Change-Id: I9b7e7b6059fbd0e1bb9a59ce28acff469c2ed97b
CRs-Fixed: 2076012
Abhishek Singh 7 年之前
父节点
当前提交
e9a1701052
共有 1 个文件被更改,包括 9 次插入0 次删除
  1. 9 0
      core/mac/src/pe/lim/lim_api.c

+ 9 - 0
core/mac/src/pe/lim/lim_api.c

@@ -1985,6 +1985,15 @@ lim_roam_fill_bss_descr(tpAniSirGlobal pMac,
 	bss_desc_ptr->timeStamp[1]   = parsed_frm_ptr->timeStamp[1];
 	qdf_mem_copy(&bss_desc_ptr->capabilityInfo,
 	&bcn_proberesp_ptr[SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_CAPAB_OFFSET], 2);
+
+	if (qdf_is_macaddr_zero((struct qdf_mac_addr *)mac_hdr->bssId)) {
+		pe_debug("bssid is 0 in beacon/probe update it with bssId %pM in sync ind",
+			roam_offload_synch_ind_ptr->bssid.bytes);
+		qdf_mem_copy(mac_hdr->bssId,
+			roam_offload_synch_ind_ptr->bssid.bytes,
+			sizeof(tSirMacAddr));
+	}
+
 	qdf_mem_copy((uint8_t *) &bss_desc_ptr->bssId,
 			(uint8_t *) mac_hdr->bssId,
 			sizeof(tSirMacAddr));