summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/hdd/src/wlan_hdd_main.c20
-rw-r--r--core/mac/src/pe/lim/lim_p2p.c9
-rw-r--r--core/sme/inc/sme_api.h1
3 files changed, 29 insertions, 1 deletions
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 07d62236be0a..c0925e51d6f1 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -8221,6 +8221,8 @@ void hdd_indicate_mgmt_frame(tSirSmeMgmtFrameInd *frame_ind)
hdd_adapter_t *adapter = NULL;
void *cds_context = NULL;
int i;
+ hdd_adapter_list_node_t *adapter_node, *next;
+ QDF_STATUS status = QDF_STATUS_SUCCESS;
/* Get the global VOSS context.*/
cds_context = cds_get_global_context();
@@ -8241,6 +8243,24 @@ void hdd_indicate_mgmt_frame(tSirSmeMgmtFrameInd *frame_ind)
if (adapter)
break;
}
+ } else if (SME_SESSION_ID_BROADCAST == frame_ind->sessionId) {
+ status = hdd_get_front_adapter(hdd_ctx, &adapter_node);
+ while (NULL != adapter_node && QDF_STATUS_SUCCESS == status) {
+ adapter = adapter_node->pAdapter;
+ 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);
+ }
+ status = hdd_get_next_adapter(hdd_ctx,
+ adapter_node, &next);
+ adapter_node = next;
+ }
+ adapter = NULL;
} else {
adapter = hdd_get_adapter_by_sme_session_id(hdd_ctx,
frame_ind->sessionId);
diff --git a/core/mac/src/pe/lim/lim_p2p.c b/core/mac/src/pe/lim/lim_p2p.c
index 50aef50354f5..2b58f5799caa 100644
--- a/core/mac/src/pe/lim/lim_p2p.c
+++ b/core/mac/src/pe/lim/lim_p2p.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -395,6 +395,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;
diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h
index 62098ad33dd2..9a529d6ff54a 100644
--- a/core/sme/inc/sme_api.h
+++ b/core/sme/inc/sme_api.h
@@ -107,6 +107,7 @@
#define SME_SCAN_REJECT_RATE_LIMIT 5
#define SME_SESSION_ID_ANY 50
+#define SME_SESSION_ID_BROADCAST 0xFF
#define SME_INVALID_COUNTRY_CODE "XX"
#define INVALID_ROAM_ID 0