Prechádzať zdrojové kódy

qcacld-3.0: Handle protected dual of public action frame

Handle protected dual of public action frame in lim_process_action_frame.

GAS comeback request/response frames will be converted into protected dual of
public action frame on encryption. These frames should be passed to userspace
for further processing.

Change-Id: I25e7f06369cdd238a561ddb5a825a63fe35f7b17
CRs-Fixed: 1063665
(cherry picked from commit 7745335fbdebcd81b274c703e5a080d61dd86428)
Krishna Kumaar Natarajan 8 rokov pred
rodič
commit
6553ea16be

+ 6 - 0
core/mac/inc/sir_mac_prot_def.h

@@ -243,6 +243,12 @@
 #define SIR_MAC_WNM_NOTIF_REQUEST        26
 #define SIR_MAC_WNM_NOTIF_RESPONSE       27
 
+/* Protected Dual of Public Action(PDPA) frames Action field */
+#define SIR_MAC_PDPA_GAS_INIT_REQ      10
+#define SIR_MAC_PDPA_GAS_INIT_RSP      11
+#define SIR_MAC_PDPA_GAS_COMEBACK_REQ  12
+#define SIR_MAC_PDPA_GAS_COMEBACK_RSP  13
+
 #define SIR_MAC_MAX_RANDOM_LENGTH   2306
 
 /* ----------------------------------------------------------------------------- */

+ 24 - 0
core/mac/src/pe/lim/lim_process_action_frame.c

@@ -2104,6 +2104,30 @@ void lim_process_action_frame(tpAniSirGlobal mac_ctx,
 					    session, 0);
 		break;
 	}
+	case SIR_MAC_ACTION_PROT_DUAL_PUB:
+		lim_log(mac_ctx, LOG1,
+			FL("Rcvd Protected Dual of Public Action; action %d."),
+			action_hdr->actionID);
+		switch (action_hdr->actionID) {
+		case SIR_MAC_PDPA_GAS_INIT_REQ:
+		case SIR_MAC_PDPA_GAS_INIT_RSP:
+		case SIR_MAC_PDPA_GAS_COMEBACK_REQ:
+		case SIR_MAC_PDPA_GAS_COMEBACK_RSP:
+			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);
+			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, rssi);
+			break;
+		default:
+			lim_log(mac_ctx, LOG1,
+				FL("Unhandled - Protected Dual Public Action"));
+			break;
+		}
+		break;
 	default:
 		lim_log(mac_ctx, LOG1,
 			FL("Action category %d not handled"),