Parcourir la source

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 il y a 7 ans
Parent
commit
e9a1701052
1 fichiers modifiés avec 9 ajouts et 0 suppressions
  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));