summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVignesh Viswanathan <viswanat@codeaurora.org>2018-03-26 20:38:39 +0530
committernshrivas <nshrivas@codeaurora.org>2018-04-03 05:20:49 -0700
commite4c6a466443cd60b57f030a997c8b68b471c61b5 (patch)
tree3d268bafb545e3422833e9705016163a4721e5d2
parent635f5968e2e25275d3b635b3e46046fff9869c62 (diff)
qcacld-3.0: Add suppport to forward GAS action frames to supplicant
Add changes identify and forward GAS public action frames to supplicant in lim_process_action_frame_no_session. Change-Id: Id872e2b0b8b7a203b472e0bd152f25f63c873b4f CRs-Fixed: 2161785
-rw-r--r--core/mac/inc/sir_mac_prot_def.h5
-rw-r--r--core/mac/src/pe/lim/lim_process_action_frame.c103
2 files changed, 56 insertions, 52 deletions
diff --git a/core/mac/inc/sir_mac_prot_def.h b/core/mac/inc/sir_mac_prot_def.h
index c47b500d8e5c..6613670b3700 100644
--- a/core/mac/inc/sir_mac_prot_def.h
+++ b/core/mac/inc/sir_mac_prot_def.h
@@ -217,6 +217,11 @@
#define SIR_MAC_ACTION_EXT_CHANNEL_SWITCH_ID 4
#define SIR_MAC_ACTION_MEASUREMENT_PILOT 7
+/* Public Action frames for GAS */
+#define SIR_MAC_ACTION_GAS_INITIAL_REQUEST 0x0A
+#define SIR_MAC_ACTION_GAS_INITIAL_RESPONSE 0x0B
+#define SIR_MAC_ACTION_GAS_COMEBACK_REQUEST 0x0C
+#define SIR_MAC_ACTION_GAS_COMEBACK_RESPONSE 0x0D
#ifdef WLAN_FEATURE_11W
/* 11w SA query request/response action frame category code */
diff --git a/core/mac/src/pe/lim/lim_process_action_frame.c b/core/mac/src/pe/lim/lim_process_action_frame.c
index 67f9a877eff1..583d0542c655 100644
--- a/core/mac/src/pe/lim/lim_process_action_frame.c
+++ b/core/mac/src/pe/lim/lim_process_action_frame.c
@@ -1950,7 +1950,13 @@ void lim_process_action_frame(tpAniSirGlobal mac_ctx,
}
break;
case SIR_MAC_ACTION_PUBLIC_USAGE:
+ mac_hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info);
+ frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info);
switch (action_hdr->actionID) {
+ case SIR_MAC_ACTION_EXT_CHANNEL_SWITCH_ID:
+ lim_process_ext_channel_switch_action_frame(mac_ctx,
+ rx_pkt_info, session);
+ break;
case SIR_MAC_ACTION_VENDOR_SPECIFIC:
pub_action =
(tpSirMacVendorSpecificPublicActionFrameHdr)
@@ -1959,58 +1965,30 @@ void lim_process_action_frame(tpAniSirGlobal mac_ctx,
lim_process_action_vendor_specific(mac_ctx, rx_pkt_info,
pub_action, session);
break;
- /* Handle vendor specific action */
case SIR_MAC_ACTION_VENDOR_SPECIFIC_CATEGORY:
- {
- tpSirMacMgmtHdr header;
- uint32_t frame_len;
-
- header = WMA_GET_RX_MAC_HEADER(rx_pkt_info);
- frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info);
- lim_send_sme_mgmt_frame_ind(mac_ctx, header->fc.subType,
- (uint8_t *)header, frame_len + sizeof(tSirMacMgmtHdr), 0,
- WMA_GET_RX_CH(rx_pkt_info), NULL,
- WMA_GET_RX_RSSI_RAW(rx_pkt_info));
- break;
- }
-
case SIR_MAC_ACTION_2040_BSS_COEXISTENCE:
- mac_hdr = NULL;
- frame_len = 0;
-
- mac_hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info);
- frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info);
-
- lim_send_sme_mgmt_frame_ind(mac_ctx,
- mac_hdr->fc.subType,
- (uint8_t *) mac_hdr,
- frame_len + sizeof(tSirMacMgmtHdr),
- session->smeSessionId,
- WMA_GET_RX_CH(rx_pkt_info), session,
- WMA_GET_RX_RSSI_NORMALIZED(
- rx_pkt_info));
- break;
+ case SIR_MAC_ACTION_GAS_INITIAL_REQUEST:
+ case SIR_MAC_ACTION_GAS_INITIAL_RESPONSE:
+ case SIR_MAC_ACTION_GAS_COMEBACK_REQUEST:
+ case SIR_MAC_ACTION_GAS_COMEBACK_RESPONSE:
#ifdef FEATURE_WLAN_TDLS
case SIR_MAC_TDLS_DIS_RSP:
- mac_hdr = NULL;
- frame_len = 0;
-
- mac_hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info);
- frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info);
- rssi = WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info);
- pe_debug("Public Action TDLS Discovery RSP");
+#endif
+ /*
+ * Frame forwarded to SME to HDD to supplicant
+ * type is action
+ */
+ pe_debug("Public Action Frame %d received",
+ action_hdr->actionID);
lim_send_sme_mgmt_frame_ind(mac_ctx,
- mac_hdr->fc.subType, (uint8_t *) mac_hdr,
+ mac_hdr->fc.subType,
+ (uint8_t *) mac_hdr,
frame_len + sizeof(tSirMacMgmtHdr),
session->smeSessionId,
WMA_GET_RX_CH(rx_pkt_info), session,
WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info));
break;
-#endif
- case SIR_MAC_ACTION_EXT_CHANNEL_SWITCH_ID:
- lim_process_ext_channel_switch_action_frame(mac_ctx,
- rx_pkt_info, session);
- break;
+
default:
pe_warn("Unhandled public action frame: %x",
action_hdr->actionID);
@@ -2130,31 +2108,52 @@ void lim_process_action_frame(tpAniSirGlobal mac_ctx,
void lim_process_action_frame_no_session(tpAniSirGlobal pMac, uint8_t *pBd)
{
+ tpSirMacMgmtHdr mac_hdr = WMA_GET_RX_MAC_HEADER(pBd);
+ uint32_t frame_len = WMA_GET_RX_PAYLOAD_LEN(pBd);
uint8_t *pBody = WMA_GET_RX_MPDU_DATA(pBd);
- tpSirMacVendorSpecificPublicActionFrameHdr pActionHdr =
- (tpSirMacVendorSpecificPublicActionFrameHdr) pBody;
+ tpSirMacActionFrameHdr action_hdr = (tpSirMacActionFrameHdr) pBody;
+ tpSirMacVendorSpecificPublicActionFrameHdr vendor_specific;
pe_debug("Received a Action frame -- no session");
- switch (pActionHdr->category) {
+ switch (action_hdr->category) {
case SIR_MAC_ACTION_PUBLIC_USAGE:
- switch (pActionHdr->actionID) {
+ switch (action_hdr->actionID) {
case SIR_MAC_ACTION_VENDOR_SPECIFIC:
- {
+ vendor_specific =
+ (tpSirMacVendorSpecificPublicActionFrameHdr)
+ action_hdr;
lim_process_action_vendor_specific(pMac, pBd,
- pActionHdr, NULL);
- }
+ vendor_specific,
+ NULL);
+ break;
+ case SIR_MAC_ACTION_GAS_INITIAL_REQUEST:
+ case SIR_MAC_ACTION_GAS_INITIAL_RESPONSE:
+ case SIR_MAC_ACTION_GAS_COMEBACK_REQUEST:
+ case SIR_MAC_ACTION_GAS_COMEBACK_RESPONSE:
+ /*
+ * Frame forwarded to SME to HDD to supplicant
+ * type is action
+ */
+ pe_debug("Public Action Frame %d received",
+ action_hdr->actionID);
+ lim_send_sme_mgmt_frame_ind(pMac,
+ mac_hdr->fc.subType,
+ (uint8_t *) mac_hdr,
+ frame_len + sizeof(tSirMacMgmtHdr), 0,
+ WMA_GET_RX_CH(pBd), NULL,
+ WMA_GET_RX_RSSI_NORMALIZED(pBd));
+
break;
default:
pe_warn("Unhandled public action frame: %x",
- pActionHdr->actionID);
+ action_hdr->actionID);
break;
}
break;
default:
pe_warn("Unhandled action frame without session: %x",
- pActionHdr->category);
+ action_hdr->category);
break;
-
}
}