Kaynağa Gözat

qcacld-3.0: Send BC public action frames on all interfaces

Add changes to indicate BC public action frames to all interfaces.

Change-Id: I4e4eb80e84be43fa3631092432ae19359b5d4539
CRs-Fixed: 2166996
Wu Gao 7 yıl önce
ebeveyn
işleme
a0230a65b2

+ 13 - 0
core/hdd/src/wlan_hdd_main.c

@@ -7759,6 +7759,19 @@ void hdd_indicate_mgmt_frame(tSirSmeMgmtFrameInd *frame_ind)
 			if (adapter)
 				break;
 		}
+	} else if (SME_SESSION_ID_BROADCAST == frame_ind->sessionId) {
+		hdd_for_each_adapter(hdd_ctx, adapter) {
+			if ((NULL != adapter) &&
+			    (WLAN_HDD_ADAPTER_MAGIC == adapter->magic)) {
+				__hdd_indicate_mgmt_frame(adapter,
+						frame_ind->frame_len,
+						frame_ind->frameBuf,
+						frame_ind->frameType,
+						frame_ind->rxChan,
+						frame_ind->rxRssi);
+			}
+		}
+		adapter = NULL;
 	} else {
 		adapter = hdd_get_adapter_by_sme_session_id(hdd_ctx,
 					frame_ind->sessionId);

+ 8 - 1
core/mac/src/pe/lim/lim_p2p.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2014,2016-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014,2016-2018 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -144,6 +144,13 @@ void lim_send_sme_mgmt_frame_ind(tpAniSirGlobal pMac, uint8_t frameType,
 		return;
 	}
 
+	if (qdf_is_macaddr_broadcast(
+		(struct qdf_mac_addr *) pSirSmeMgmtFrame->frameBuf + 4) &&
+		!sessionId) {
+		pe_debug("Broadcast action frame");
+		sessionId = SME_SESSION_ID_BROADCAST;
+	}
+
 	pSirSmeMgmtFrame->frame_len = frameLen;
 	pSirSmeMgmtFrame->sessionId = sessionId;
 	pSirSmeMgmtFrame->frameType = frameType;

+ 1 - 0
core/sme/inc/sme_api.h

@@ -78,6 +78,7 @@
 #define SME_EXIT() sme_logfl(QDF_TRACE_LEVEL_DEBUG, "exit")
 
 #define SME_SESSION_ID_ANY        50
+#define SME_SESSION_ID_BROADCAST  0xFF
 
 #define SME_INVALID_COUNTRY_CODE "XX"
 #define INVALID_ROAM_ID 0