Ver código fonte

qcacld-3.0: Configure multicast filters for nan data interface

Configure multicast filters for the nan data interface.
Request to configure multicast filters is not honored for the
NAN data interface in the current implementation.

Integration from qcacld-2.0 to qcacld-3.0.

CRs-Fixed: 1046519
Change-Id: I48a4a30fd9f6369fe398254184d0016a35c0a6b3
Ravi Joshi 8 anos atrás
pai
commit
4f447cb765

+ 1 - 0
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

+ 7 - 7
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;
 	}

+ 16 - 0
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;
+}