diff options
| -rw-r--r-- | core/hdd/src/wlan_hdd_main.c | 20 | ||||
| -rw-r--r-- | core/mac/src/pe/lim/lim_p2p.c | 9 | ||||
| -rw-r--r-- | core/sme/inc/sme_api.h | 1 |
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 |
