qcacld-3.0: Enhance STA ds check with MLD address
1. Check if STA is present with MLD address, this can happen if STA is non ML, so MLD address will be used as address for connected STA. 2. Check if STA present with same MLD address as current SA, this can happen if SAP is ML, so the MLD address will be used as SA address for connected STA. Change-Id: Id3f64a8937c257ea503a0e847f16e2b251b4ef81 CRs-Fixed: 3871110
This commit is contained in:
parent
096a377b13
commit
95fd9e15d6
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@ -122,6 +122,52 @@ tpDphHashNode dph_lookup_hash_entry(struct mac_context *mac, uint8_t staAddr[],
|
||||
return ptr;
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
/* --------------------------------------------------------------------- */
|
||||
/**
|
||||
* dph_lookup_hash_entry_by_mld_addr
|
||||
*
|
||||
* FUNCTION:
|
||||
* Look up an entry in hash table
|
||||
*
|
||||
* LOGIC:
|
||||
*
|
||||
* ASSUMPTIONS:
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* @param mld_addr MLD MAC address of the station
|
||||
* @param pStaId pointer to the Station ID assigned to the station
|
||||
* @return pointer to STA hash entry if lookup was a success \n
|
||||
* NULL if lookup was a failure
|
||||
*/
|
||||
|
||||
tpDphHashNode dph_lookup_hash_entry_by_mld_addr(
|
||||
struct mac_context *mac,
|
||||
uint8_t mld_addr[],
|
||||
uint16_t *pAssocId,
|
||||
struct dph_hash_table *hash_table)
|
||||
{
|
||||
tpDphHashNode ptr = NULL;
|
||||
uint16_t i = 0;
|
||||
|
||||
if (!hash_table->pHashTable) {
|
||||
pe_err("pHashTable is NULL");
|
||||
return ptr;
|
||||
}
|
||||
|
||||
for (i = 0; i < hash_table->size; i++) {
|
||||
for (ptr = hash_table->pHashTable[i]; ptr; ptr = ptr->next) {
|
||||
if (dph_compare_mac_addr(mld_addr, ptr->mld_addr)) {
|
||||
*pAssocId = ptr->assocId;
|
||||
return ptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
/**
|
||||
* dph_get_hash_entry
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2015, 2017-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
@ -58,6 +58,24 @@ tpDphHashNode dph_lookup_hash_entry(struct mac_context *mac, uint8_t staAddr[],
|
||||
uint16_t *pStaId,
|
||||
struct dph_hash_table *hash_table);
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
tpDphHashNode dph_lookup_hash_entry_by_mld_addr(
|
||||
struct mac_context *mac,
|
||||
uint8_t staAddr[],
|
||||
uint16_t *pStaId,
|
||||
struct dph_hash_table *hash_table);
|
||||
#else
|
||||
static inline
|
||||
tpDphHashNode dph_lookup_hash_entry_by_mld_addr(
|
||||
struct mac_context *mac,
|
||||
uint8_t staAddr[],
|
||||
uint16_t *pStaId,
|
||||
struct dph_hash_table *hash_table)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Get a pointer to the hash node */
|
||||
tpDphHashNode dph_get_hash_entry(struct mac_context *mac, uint16_t staId,
|
||||
struct dph_hash_table *hash_table);
|
||||
|
@ -492,6 +492,7 @@ lim_cleanup_rx_path(struct mac_context *mac, tpDphHashNode sta,
|
||||
* lim_send_del_sta_cnf() - Send Del sta confirmation
|
||||
* @mac: Pointer to Global MAC structure
|
||||
* @sta_dsaddr: sta ds address
|
||||
* @sta_mld_addr: sta mld address
|
||||
* @staDsAssocId: sta ds association id
|
||||
* @mlmStaContext: MLM station context
|
||||
* @status_code: Status code
|
||||
@ -503,6 +504,7 @@ lim_cleanup_rx_path(struct mac_context *mac, tpDphHashNode sta,
|
||||
*/
|
||||
void
|
||||
lim_send_del_sta_cnf(struct mac_context *mac, struct qdf_mac_addr sta_dsaddr,
|
||||
struct qdf_mac_addr sta_mld_addr,
|
||||
uint16_t staDsAssocId,
|
||||
struct lim_sta_context mlmStaContext,
|
||||
tSirResultCodes status_code, struct pe_session *pe_session)
|
||||
@ -633,6 +635,9 @@ lim_send_del_sta_cnf(struct mac_context *mac, struct qdf_mac_addr sta_dsaddr,
|
||||
|
||||
qdf_mem_copy((uint8_t *) &mlmDisassocCnf.peerMacAddr,
|
||||
(uint8_t *) sta_dsaddr.bytes, QDF_MAC_ADDR_SIZE);
|
||||
qdf_mem_copy((uint8_t *)&mlmDisassocCnf.peerMldAddr,
|
||||
(uint8_t *)sta_mld_addr.bytes, QDF_MAC_ADDR_SIZE);
|
||||
|
||||
mlmDisassocCnf.resultCode = status_code;
|
||||
mlmDisassocCnf.disassocTrigger = eLIM_DUPLICATE_ENTRY;
|
||||
/* Update PE session Id */
|
||||
@ -4508,6 +4513,20 @@ void lim_prepare_and_send_del_all_sta_cnf(struct mac_context *mac,
|
||||
(uint32_t *)&mlm_deauth);
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
static void lim_copy_mld_mac_addr(uint8_t *sta_mld_addr,
|
||||
tpDphHashNode sta)
|
||||
{
|
||||
qdf_mem_copy(sta_mld_addr, sta->mld_addr, QDF_MAC_ADDR_SIZE);
|
||||
}
|
||||
#else
|
||||
static inline
|
||||
void lim_copy_mld_mac_addr(uint8_t *sta_mld_addr,
|
||||
tpDphHashNode sta)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* lim_prepare_and_send_del_sta_cnf() - prepares and send del sta cnf
|
||||
*
|
||||
@ -4528,6 +4547,7 @@ lim_prepare_and_send_del_sta_cnf(struct mac_context *mac, tpDphHashNode sta,
|
||||
{
|
||||
uint16_t staDsAssocId = 0;
|
||||
struct qdf_mac_addr sta_dsaddr;
|
||||
struct qdf_mac_addr sta_mld_addr = QDF_MAC_ADDR_ZERO_INIT;
|
||||
struct lim_sta_context mlmStaContext;
|
||||
bool mlo_conn = false;
|
||||
|
||||
@ -4539,6 +4559,7 @@ lim_prepare_and_send_del_sta_cnf(struct mac_context *mac, tpDphHashNode sta,
|
||||
staDsAssocId = sta->assocId;
|
||||
qdf_mem_copy((uint8_t *) sta_dsaddr.bytes,
|
||||
sta->staAddr, QDF_MAC_ADDR_SIZE);
|
||||
lim_copy_mld_mac_addr(sta_mld_addr.bytes, sta);
|
||||
|
||||
mlmStaContext = sta->mlmStaContext;
|
||||
|
||||
@ -4561,7 +4582,8 @@ lim_prepare_and_send_del_sta_cnf(struct mac_context *mac, tpDphHashNode sta,
|
||||
pe_session->limMlmState));
|
||||
}
|
||||
|
||||
lim_send_del_sta_cnf(mac, sta_dsaddr, staDsAssocId, mlmStaContext,
|
||||
lim_send_del_sta_cnf(mac, sta_dsaddr, sta_mld_addr, staDsAssocId,
|
||||
mlmStaContext,
|
||||
status_code, pe_session);
|
||||
}
|
||||
|
||||
@ -4792,3 +4814,65 @@ void lim_extract_ies_from_deauth_disassoc(struct pe_session *session,
|
||||
|
||||
mlme_set_peer_disconnect_ies(session->vdev, &ie);
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
static void lim_get_sta_mld_log(tpDphHashNode sta_ds, tSirMacAddr mld_mac,
|
||||
char *mld_log_str)
|
||||
{
|
||||
if (!qdf_is_macaddr_zero((struct qdf_mac_addr *)mld_mac))
|
||||
qdf_scnprintf(mld_log_str, MAC_ADDR_DUMP_LEN,
|
||||
" SA mld: " QDF_MAC_ADDR_FMT,
|
||||
QDF_MAC_ADDR_REF(mld_mac));
|
||||
|
||||
if (!qdf_is_macaddr_zero((struct qdf_mac_addr *)
|
||||
sta_ds->mld_addr))
|
||||
qdf_scnprintf(mld_log_str, MAC_ADDR_DUMP_LEN,
|
||||
" STA DS mld: " QDF_MAC_ADDR_FMT,
|
||||
QDF_MAC_ADDR_REF(sta_ds->mld_addr));
|
||||
}
|
||||
#else
|
||||
static inline
|
||||
void lim_get_sta_mld_log(tpDphHashNode sta_ds, tSirMacAddr mld_mac,
|
||||
char *mld_log_str)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
tpDphHashNode lim_get_sta_ds(struct mac_context *mac_ctx,
|
||||
tSirMacAddr sa, tSirMacAddr mld_mac,
|
||||
uint16_t *assoc_id,
|
||||
struct pe_session *session)
|
||||
{
|
||||
tpDphHashNode sta_ds = NULL;
|
||||
char mld_log_str[52] = {0};
|
||||
|
||||
/* Check if STA present with SA address */
|
||||
sta_ds = dph_lookup_hash_entry(
|
||||
mac_ctx, sa,
|
||||
assoc_id,
|
||||
&session->dph.dphHashTable);
|
||||
/* Check if STA present with MLD address,
|
||||
* this can happen if SAP is non ML,
|
||||
* so the MLD address will be used as address for connected STA
|
||||
*/
|
||||
if (!sta_ds && !qdf_is_macaddr_zero((struct qdf_mac_addr *)mld_mac))
|
||||
sta_ds = dph_lookup_hash_entry(
|
||||
mac_ctx, mld_mac,
|
||||
assoc_id,
|
||||
&session->dph.dphHashTable);
|
||||
/* Check if STA present with same MLD address as current SA,
|
||||
* this can happen if SAP is ML, so the MLD address will be
|
||||
* used as SA address for connected STA
|
||||
*/
|
||||
if (!sta_ds && wlan_vdev_mlme_is_mlo_vdev(session->vdev))
|
||||
sta_ds = dph_lookup_hash_entry_by_mld_addr(
|
||||
mac_ctx, sa,
|
||||
assoc_id,
|
||||
&session->dph.dphHashTable);
|
||||
if (sta_ds) {
|
||||
lim_get_sta_mld_log(sta_ds, mld_mac, mld_log_str);
|
||||
pe_debug("Vdev %d STA found for " QDF_MAC_ADDR_FMT "%s",
|
||||
session->vdev_id, QDF_MAC_ADDR_REF(sa), mld_log_str);
|
||||
}
|
||||
return sta_ds;
|
||||
}
|
||||
|
@ -151,6 +151,20 @@ QDF_STATUS lim_del_peer_info(struct mac_context *mac,
|
||||
*/
|
||||
QDF_STATUS lim_del_sta_all(struct mac_context *mac,
|
||||
struct pe_session *pe_session);
|
||||
/**
|
||||
* lim_get_sta_ds() -get sta ds
|
||||
* @mac_ctx: mac ctx
|
||||
* @sa: source addr
|
||||
* @mld_mac: mld mac
|
||||
* @assoc_id: assoc id
|
||||
* @session: pe session ctx
|
||||
*
|
||||
* @Return: sta ds in case of success else NULL
|
||||
*/
|
||||
tpDphHashNode lim_get_sta_ds(struct mac_context *mac_ctx,
|
||||
tSirMacAddr sa, tSirMacAddr mld_mac,
|
||||
uint16_t *assoc_id,
|
||||
struct pe_session *session);
|
||||
|
||||
#ifdef WLAN_FEATURE_HOST_ROAM
|
||||
void lim_restore_pre_reassoc_state(struct mac_context *,
|
||||
@ -227,6 +241,7 @@ static inline bool lim_is_roam_synch_in_progress(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
void
|
||||
lim_send_del_sta_cnf(struct mac_context *mac, struct qdf_mac_addr sta_dsaddr,
|
||||
struct qdf_mac_addr sta_mld_addr,
|
||||
uint16_t staDsAssocId,
|
||||
struct lim_sta_context mlmStaContext,
|
||||
tSirResultCodes status_code,
|
||||
|
@ -147,6 +147,7 @@ static void lim_convert_supported_channels(struct mac_context *mac_ctx,
|
||||
*/
|
||||
static QDF_STATUS lim_check_sta_in_pe_entries(struct mac_context *mac_ctx,
|
||||
tSirMacAddr sa,
|
||||
tSirMacAddr mld_mac,
|
||||
uint16_t sessionid,
|
||||
bool *dup_entry)
|
||||
{
|
||||
@ -160,9 +161,9 @@ static QDF_STATUS lim_check_sta_in_pe_entries(struct mac_context *mac_ctx,
|
||||
session = &mac_ctx->lim.gpSession[i];
|
||||
if (session->valid &&
|
||||
(session->opmode == QDF_SAP_MODE)) {
|
||||
sta_ds = dph_lookup_hash_entry(
|
||||
mac_ctx, sa,
|
||||
&assoc_id, &session->dph.dphHashTable);
|
||||
sta_ds = lim_get_sta_ds(
|
||||
mac_ctx, sa, mld_mac,
|
||||
&assoc_id, session);
|
||||
if (sta_ds
|
||||
&& (!sta_ds->rmfEnabled ||
|
||||
(sessionid != session->peSessionId))
|
||||
@ -181,10 +182,9 @@ static QDF_STATUS lim_check_sta_in_pe_entries(struct mac_context *mac_ctx,
|
||||
return QDF_STATUS_E_AGAIN;
|
||||
}
|
||||
sta_ds->sta_deletion_in_progress = true;
|
||||
pe_err("Sending Disassoc and Deleting existing STA entry:"
|
||||
QDF_MAC_ADDR_FMT,
|
||||
QDF_MAC_ADDR_REF(
|
||||
session->self_mac_addr));
|
||||
pe_debug("Vdev %d Delete STA " QDF_MAC_ADDR_FMT,
|
||||
session->vdev_id,
|
||||
QDF_MAC_ADDR_REF(sa));
|
||||
lim_send_disassoc_mgmt_frame(mac_ctx,
|
||||
REASON_UNSPEC_FAILURE,
|
||||
(uint8_t *)sa, session, false);
|
||||
@ -257,19 +257,21 @@ static bool lim_chk_assoc_req_parse_error(struct mac_context *mac_ctx,
|
||||
QDF_STATUS qdf_status;
|
||||
enum wlan_status_code wlan_status;
|
||||
struct qdf_mac_addr *mld_mac;
|
||||
uint32_t offset = WLAN_ASSOC_REQ_IES_OFFSET;
|
||||
|
||||
if (sub_type == LIM_ASSOC)
|
||||
if (sub_type == LIM_ASSOC) {
|
||||
wlan_status = sir_convert_assoc_req_frame2_struct(mac_ctx, frm_body,
|
||||
frame_len,
|
||||
assoc_req);
|
||||
else
|
||||
} else {
|
||||
wlan_status = sir_convert_reassoc_req_frame2_struct(mac_ctx,
|
||||
frm_body, frame_len, assoc_req);
|
||||
|
||||
offset = WLAN_REASSOC_REQ_IES_OFFSET;
|
||||
}
|
||||
if (wlan_status == STATUS_SUCCESS) {
|
||||
qdf_status = lim_strip_and_decode_eht_cap(
|
||||
frm_body + WLAN_ASSOC_REQ_IES_OFFSET,
|
||||
frame_len - WLAN_ASSOC_REQ_IES_OFFSET,
|
||||
frm_body + offset,
|
||||
frame_len - offset,
|
||||
&assoc_req->eht_cap,
|
||||
assoc_req->he_cap,
|
||||
session->curr_op_freq);
|
||||
@ -289,7 +291,6 @@ static bool lim_chk_assoc_req_parse_error(struct mac_context *mac_ctx,
|
||||
qdf_mem_zero(&assoc_req->mlo_info,
|
||||
sizeof(assoc_req->mlo_info));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2554,7 +2555,12 @@ QDF_STATUS lim_proc_assoc_req_frm_cmn(struct mac_context *mac_ctx,
|
||||
lim_get_phy_mode(mac_ctx, &phy_mode, session);
|
||||
limGetQosMode(session, &qos_mode);
|
||||
|
||||
status = lim_check_sta_in_pe_entries(mac_ctx, sa,
|
||||
if (!lim_chk_assoc_req_parse_error(mac_ctx, sa, session,
|
||||
assoc_req, sub_type,
|
||||
frm_body, frame_len))
|
||||
goto error;
|
||||
|
||||
status = lim_check_sta_in_pe_entries(mac_ctx, sa, assoc_req->mld_mac,
|
||||
session->peSessionId,
|
||||
&dup_entry);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
@ -2596,10 +2602,6 @@ QDF_STATUS lim_proc_assoc_req_frm_cmn(struct mac_context *mac_ctx,
|
||||
}
|
||||
}
|
||||
|
||||
if (!lim_chk_assoc_req_parse_error(mac_ctx, sa, session,
|
||||
assoc_req, sub_type,
|
||||
frm_body, frame_len))
|
||||
goto error;
|
||||
|
||||
if (!lim_chk_capab(mac_ctx, sa, session, assoc_req,
|
||||
sub_type, &local_cap))
|
||||
|
@ -981,6 +981,7 @@ void lim_process_mlm_disassoc_cnf(struct mac_context *mac_ctx,
|
||||
tSirResultCodes result_code;
|
||||
tLimMlmDisassocCnf *disassoc_cnf;
|
||||
struct pe_session *session_entry;
|
||||
struct qdf_mac_addr mld_mac = QDF_MAC_ADDR_ZERO_INIT;
|
||||
|
||||
disassoc_cnf = (tLimMlmDisassocCnf *) msg;
|
||||
|
||||
@ -1033,13 +1034,16 @@ void lim_process_mlm_disassoc_cnf(struct mac_context *mac_ctx,
|
||||
session_entry->peSessionId,
|
||||
session_entry->limSmeState));
|
||||
lim_send_sme_disassoc_ntf(mac_ctx,
|
||||
disassoc_cnf->peerMacAddr, result_code,
|
||||
disassoc_cnf->peerMacAddr,
|
||||
(uint8_t *)mld_mac.bytes, result_code,
|
||||
disassoc_cnf->disassocTrigger,
|
||||
disassoc_cnf->aid, session_entry->smeSessionId,
|
||||
session_entry);
|
||||
}
|
||||
} else if (LIM_IS_AP_ROLE(session_entry)) {
|
||||
lim_send_sme_disassoc_ntf(mac_ctx, disassoc_cnf->peerMacAddr,
|
||||
lim_send_sme_disassoc_ntf(
|
||||
mac_ctx, disassoc_cnf->peerMacAddr,
|
||||
disassoc_cnf->peerMldAddr,
|
||||
result_code, disassoc_cnf->disassocTrigger,
|
||||
disassoc_cnf->aid, session_entry->smeSessionId,
|
||||
session_entry);
|
||||
@ -1182,6 +1186,7 @@ void lim_process_mlm_purge_sta_ind(struct mac_context *mac, uint32_t *msg_buf)
|
||||
tSirResultCodes resultCode;
|
||||
tpLimMlmPurgeStaInd pMlmPurgeStaInd;
|
||||
struct pe_session *pe_session;
|
||||
struct qdf_mac_addr mld_addr = QDF_MAC_ADDR_ZERO_INIT;
|
||||
|
||||
if (!msg_buf) {
|
||||
pe_err("Buffer is Pointing to NULL");
|
||||
@ -1233,6 +1238,7 @@ void lim_process_mlm_purge_sta_ind(struct mac_context *mac, uint32_t *msg_buf)
|
||||
} else
|
||||
lim_send_sme_disassoc_ntf(mac,
|
||||
pMlmPurgeStaInd->peerMacAddr,
|
||||
(uint8_t *)mld_addr.bytes,
|
||||
resultCode,
|
||||
pMlmPurgeStaInd->purgeTrigger,
|
||||
pMlmPurgeStaInd->aid,
|
||||
|
@ -6457,6 +6457,7 @@ static void __lim_process_sme_disassoc_req(struct mac_context *mac,
|
||||
struct pe_session *pe_session = NULL;
|
||||
uint8_t sessionId;
|
||||
uint8_t smesessionId;
|
||||
struct qdf_mac_addr mld_addr = QDF_MAC_ADDR_ZERO_INIT;
|
||||
|
||||
if (!msg_buf) {
|
||||
pe_err("Buffer is Pointing to NULL");
|
||||
@ -6627,6 +6628,7 @@ sendDisassoc:
|
||||
if (pe_session)
|
||||
lim_send_sme_disassoc_ntf(mac,
|
||||
smeDisassocReq.peer_macaddr.bytes,
|
||||
(uint8_t *)mld_addr.bytes,
|
||||
retCode,
|
||||
disassocTrigger,
|
||||
1, smesessionId,
|
||||
@ -6634,6 +6636,7 @@ sendDisassoc:
|
||||
else
|
||||
lim_send_sme_disassoc_ntf(mac,
|
||||
smeDisassocReq.peer_macaddr.bytes,
|
||||
(uint8_t *)mld_addr.bytes,
|
||||
retCode, disassocTrigger, 1,
|
||||
smesessionId, NULL);
|
||||
|
||||
@ -7331,6 +7334,7 @@ void __lim_process_sme_assoc_cnf_new(struct mac_context *mac_ctx, uint32_t msg_t
|
||||
struct pe_session *session_entry = NULL;
|
||||
uint8_t session_id;
|
||||
tpSirAssocReq assoc_req;
|
||||
struct qdf_mac_addr mld_addr = QDF_MAC_ADDR_ZERO_INIT;
|
||||
|
||||
if (!msg_buf) {
|
||||
pe_err("msg_buf is NULL");
|
||||
@ -7368,7 +7372,10 @@ void __lim_process_sme_assoc_cnf_new(struct mac_context *mac_ctx, uint32_t msg_t
|
||||
* send a DISASSOC_IND message to WSM to make sure
|
||||
* the state in WSM and LIM is the same
|
||||
*/
|
||||
lim_send_sme_disassoc_ntf(mac_ctx, assoc_cnf.peer_macaddr.bytes,
|
||||
lim_send_sme_disassoc_ntf(
|
||||
mac_ctx,
|
||||
assoc_cnf.peer_macaddr.bytes,
|
||||
(uint8_t *)mld_addr.bytes,
|
||||
eSIR_SME_STA_NOT_ASSOCIATED,
|
||||
eLIM_PEER_ENTITY_DISASSOC, assoc_cnf.aid,
|
||||
session_entry->smeSessionId,
|
||||
@ -8878,6 +8885,7 @@ static void lim_process_sme_disassoc_req(struct mac_context *mac_ctx,
|
||||
struct disassoc_req disassoc_req;
|
||||
struct pe_session *session;
|
||||
uint8_t session_id;
|
||||
struct qdf_mac_addr mld_addr = QDF_MAC_ADDR_ZERO_INIT;
|
||||
|
||||
qdf_mem_copy(&disassoc_req, msg->bodyptr, sizeof(struct disassoc_req));
|
||||
|
||||
@ -8889,6 +8897,7 @@ static void lim_process_sme_disassoc_req(struct mac_context *mac_ctx,
|
||||
QDF_MAC_ADDR_REF(disassoc_req.bssid.bytes));
|
||||
lim_send_sme_disassoc_ntf(mac_ctx,
|
||||
disassoc_req.peer_macaddr.bytes,
|
||||
mld_addr.bytes,
|
||||
eSIR_SME_INVALID_PARAMETERS,
|
||||
eLIM_HOST_DISASSOC, 1,
|
||||
disassoc_req.sessionId, NULL);
|
||||
|
@ -882,6 +882,7 @@ void lim_send_sme_disassoc_deauth_ntf(struct mac_context *mac,
|
||||
|
||||
void lim_send_sme_disassoc_ntf(struct mac_context *mac,
|
||||
tSirMacAddr peerMacAddr,
|
||||
tSirMacAddr peerMldAddr,
|
||||
tSirResultCodes reasonCode,
|
||||
uint16_t disassocTrigger,
|
||||
uint16_t aid,
|
||||
@ -915,9 +916,9 @@ void lim_send_sme_disassoc_ntf(struct mac_context *mac,
|
||||
if (session->valid &&
|
||||
(session->opmode == QDF_SAP_MODE)) {
|
||||
/* Find the sta ds entry in another session */
|
||||
sta_ds = dph_lookup_hash_entry(mac,
|
||||
peerMacAddr, &assoc_id,
|
||||
&session->dph.dphHashTable);
|
||||
sta_ds = lim_get_sta_ds(mac, peerMacAddr,
|
||||
peerMldAddr, &assoc_id,
|
||||
session);
|
||||
if (sta_ds)
|
||||
break;
|
||||
}
|
||||
|
@ -134,6 +134,7 @@ QDF_STATUS lim_prepare_disconnect_done_ind(struct mac_context *mac_ctx,
|
||||
* lim_send_sme_disassoc_ntf() - Send disassoc notification to upper layer
|
||||
* @mac: Global MAC context
|
||||
* @peerMacAddr: The peer MAC addr to which disassociate was initiated
|
||||
* @peerMldAddr: Peer MLD mac
|
||||
* @reasonCode: The reason for Disassociation
|
||||
* @disassocTrigger: The trigger for Disassociation
|
||||
* @aid: The STAID. This parameter is present only on AP
|
||||
@ -148,6 +149,7 @@ QDF_STATUS lim_prepare_disconnect_done_ind(struct mac_context *mac_ctx,
|
||||
*/
|
||||
void lim_send_sme_disassoc_ntf(struct mac_context *mac,
|
||||
tSirMacAddr peerMacAddr,
|
||||
tSirMacAddr peerMldAddr,
|
||||
tSirResultCodes reasonCode,
|
||||
uint16_t disassocTrigger,
|
||||
uint16_t aid,
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@ -322,6 +322,7 @@ typedef struct sLimMlmDisassocReq {
|
||||
|
||||
typedef struct sLimMlmDisassocCnf {
|
||||
tSirMacAddr peerMacAddr;
|
||||
tSirMacAddr peerMldAddr;
|
||||
tSirResultCodes resultCode;
|
||||
uint16_t disassocTrigger;
|
||||
uint16_t aid;
|
||||
|
Loading…
Reference in New Issue
Block a user