diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index 9fff2c3dc61e..93bd440cc4df 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -1427,4 +1427,5 @@ void csr_neighbor_roam_process_scan_results(tpAniSirGlobal mac_ctx, void csr_neighbor_roam_trigger_handoff(tpAniSirGlobal mac_ctx, uint8_t session_id); +bool csr_is_ndi_started(tpAniSirGlobal mac_ctx, uint32_t session_id); #endif diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index aa646355c871..34011aeda71c 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -7780,11 +7780,10 @@ QDF_STATUS sme_8023_multicast_list(tHalHandle hHal, uint8_t sessionId, pMulticastAddrs->ulMulticastAddrCnt, pMulticastAddrs->multicastAddr[0].bytes); - /* - *Find the connected Infra / P2P_client connected session - */ + /* Find the connected Infra / P2P_client connected session */ if (CSR_IS_SESSION_VALID(pMac, sessionId) && - csr_is_conn_state_infra(pMac, sessionId)) { + (csr_is_conn_state_infra(pMac, sessionId) || + csr_is_ndi_started(pMac, sessionId))) { pSession = CSR_GET_SESSION(pMac, sessionId); } @@ -7804,10 +7803,11 @@ QDF_STATUS sme_8023_multicast_list(tHalHandle hHal, uint8_t sessionId, return QDF_STATUS_E_NOMEM; } - if (!csr_is_conn_state_connected_infra(pMac, sessionId)) { + if (!csr_is_conn_state_connected_infra(pMac, sessionId) && + !csr_is_ndi_started(pMac, sessionId)) { QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR, - "%s: Ignoring the " - "indication as we are not connected", __func__); + "%s: Request ignored, session %d is not connected or started", + __func__, sessionId); qdf_mem_free(request_buf); return QDF_STATUS_E_FAILURE; } diff --git a/core/sme/src/csr/csr_util.c b/core/sme/src/csr/csr_util.c index 08ea7cd6326a..06ac64232df6 100644 --- a/core/sme/src/csr/csr_util.c +++ b/core/sme/src/csr/csr_util.c @@ -5784,3 +5784,19 @@ enum tQDF_ADAPTER_MODE csr_get_session_persona(tpAniSirGlobal pmac, return session->pCurRoamProfile->csrPersona; } + +/** + * csr_is_ndi_started() - function to check if NDI is started + * @mac_ctx: handle to mac context + * @session_id: session identifier + * + * returns: true if NDI is started, false otherwise + */ +bool csr_is_ndi_started(tpAniSirGlobal mac_ctx, uint32_t session_id) +{ + tCsrRoamSession *session = CSR_GET_SESSION(mac_ctx, session_id); + if (!session) + return false; + + return eCSR_CONNECT_STATE_TYPE_NDI_STARTED == session->connectState; +}