qcacld-3.0: Add correct BSSID in ADDBA resp for NDI

Currently, host driver extracts the BSSID from pe session while
prepare the ADDBA response. For NDI, it caches BSSID as self mac
address. So, peer receives wrong BSSID from ADDBA response.

To fix this, extract the BSSID from ADDBA request frame and sent it
in ADDBA response frame.

Change-Id: I8addf0f128b1befbfdf3fa68a2e37c511ff5a58f
CRs-Fixed: 3617624
This commit is contained in:
Rahul Gusain
2023-09-15 18:50:10 +05:30
committed by Rahul Choudhary
父節點 eaa32f4353
當前提交 62104f1d9d
共有 3 個文件被更改,包括 12 次插入6 次删除

查看文件

@@ -1612,7 +1612,7 @@ static void lim_process_addba_req(struct mac_context *mac_ctx, uint8_t *rx_pkt_i
session, session,
addba_req->addba_extn_element.present, addba_req->addba_extn_element.present,
addba_req->addba_param_set.amsdu_supp, addba_req->addba_param_set.amsdu_supp,
mac_hdr->fc.wep, buff_size); mac_hdr->fc.wep, buff_size, mac_hdr->bssId);
if (qdf_status != QDF_STATUS_SUCCESS) { if (qdf_status != QDF_STATUS_SUCCESS) {
pe_err("Failed to send addba response frame"); pe_err("Failed to send addba response frame");
cdp_addba_resp_tx_completion( cdp_addba_resp_tx_completion(

查看文件

@@ -6226,9 +6226,12 @@ void lim_prepare_tdls_with_mlo(struct pe_session *session,
#endif #endif
QDF_STATUS lim_send_addba_response_frame(struct mac_context *mac_ctx, QDF_STATUS lim_send_addba_response_frame(struct mac_context *mac_ctx,
tSirMacAddr peer_mac, uint16_t tid, tSirMacAddr peer_mac, uint16_t tid,
struct pe_session *session, uint8_t addba_extn_present, struct pe_session *session,
uint8_t amsdu_support, uint8_t is_wep, uint16_t calc_buff_size) uint8_t addba_extn_present,
uint8_t amsdu_support, uint8_t is_wep,
uint16_t calc_buff_size,
tSirMacAddr bssid)
{ {
tDot11faddba_rsp frm; tDot11faddba_rsp frm;
@@ -6407,7 +6410,8 @@ QDF_STATUS lim_send_addba_response_frame(struct mac_context *mac_ctx,
/* Update A3 with the BSSID */ /* Update A3 with the BSSID */
mgmt_hdr = (tpSirMacMgmtHdr) frame_ptr; mgmt_hdr = (tpSirMacMgmtHdr) frame_ptr;
sir_copy_mac_addr(mgmt_hdr->bssId, session->bssId);
sir_copy_mac_addr(mgmt_hdr->bssId, bssid);
/* ADDBA Response is a robust mgmt action frame, /* ADDBA Response is a robust mgmt action frame,
* set the "protect" (aka WEP) bit in the FC * set the "protect" (aka WEP) bit in the FC

查看文件

@@ -1434,6 +1434,7 @@ typedef enum sHalBitVal /* For Bit operations */
* @amsdu_support: amsdu in ampdu support * @amsdu_support: amsdu in ampdu support
* @is_wep: protected bit in fc * @is_wep: protected bit in fc
* @calc_buff_size: Calculated buf size from peer and self capabilities * @calc_buff_size: Calculated buf size from peer and self capabilities
* @bssid: peer BSSID
* *
* This function is called when ADDBA request is successful. ADDBA response is * This function is called when ADDBA request is successful. ADDBA response is
* setup by calling addba_response_setup API and frame is then sent out OTA. * setup by calling addba_response_setup API and frame is then sent out OTA.
@@ -1445,7 +1446,8 @@ QDF_STATUS lim_send_addba_response_frame(struct mac_context *mac_ctx,
struct pe_session *session, struct pe_session *session,
uint8_t addba_extn_present, uint8_t addba_extn_present,
uint8_t amsdu_support, uint8_t is_wep, uint8_t amsdu_support, uint8_t is_wep,
uint16_t calc_buff_size); uint16_t calc_buff_size,
tSirMacAddr bssid);
/** /**
* lim_send_delba_action_frame() - Send delba to peer * lim_send_delba_action_frame() - Send delba to peer