Selaa lähdekoodia

qcacmn: Add support for WPA3 SuiteB roaming

This commit enables support for SuiteB roaming wmi service based
on the WPA3 SuiteB roam service capability advertisement
received from Firmware.
In SuiteB the PMK length is greater than the existing PMK length,
added the extended PMK parameters to fill in the remaining bytes
of PMK in the RSO command.

Change-Id: Ia630580bba050513800e3acac875baf937ec8d14
CRs-Fixed: 2685993
Srikanth Marepalli 5 vuotta sitten
vanhempi
sitoutus
8a8ee00543
3 muutettua tiedostoa jossa 17 lisäystä ja 5 poistoa
  1. 1 0
      wmi/inc/wmi_unified_param.h
  2. 14 5
      wmi/src/wmi_unified_roam_tlv.c
  3. 2 0
      wmi/src/wmi_unified_tlv.c

+ 1 - 0
wmi/inc/wmi_unified_param.h

@@ -5224,6 +5224,7 @@ typedef enum {
 	wmi_service_ema_ap_support,
 	wmi_support_extend_address,
 	wmi_service_srg_srp_spatial_reuse_support,
+	wmi_service_suiteb_roam_support,
 	wmi_services_max,
 } wmi_conv_service_ids;
 #define WMI_SERVICE_UNAVAILABLE 0xFFFF

+ 14 - 5
wmi/src/wmi_unified_roam_tlv.c

@@ -1376,6 +1376,18 @@ send_roam_scan_offload_mode_cmd_tlv(wmi_unified_t wmi_handle,
 					     roam_req->psk_pmk,
 					     roam_offload_11i->pmk_len);
 
+				if (auth_mode ==
+				    WMI_AUTH_RSNA_SUITE_B_8021X_SHA384) {
+					roam_offload_11i->pmk_ext_len =
+						(roam_req->pmk_len -
+						 ROAM_OFFLOAD_PMK_BYTES);
+					qdf_mem_copy(roam_offload_11i->pmk_ext,
+						     &roam_req->psk_pmk[
+						     ROAM_OFFLOAD_PMK_BYTES],
+						     roam_offload_11i->
+						     pmk_ext_len);
+				}
+
 				WMITLV_SET_HDR(&roam_offload_11i->tlv_header,
 				WMITLV_TAG_STRUC_wmi_roam_11i_offload_tlv_param,
 				WMITLV_GET_STRUCT_TLVLEN
@@ -1390,11 +1402,8 @@ send_roam_scan_offload_mode_cmd_tlv(wmi_unified_t wmi_handle,
 				buf_ptr += WMI_TLV_HDR_SIZE;
 				WMI_LOGD("pmk_len = %d",
 					roam_offload_11i->pmk_len);
-				if (roam_offload_11i->pmk_len)
-					QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_WMI,
-						QDF_TRACE_LEVEL_DEBUG,
-						roam_offload_11i->pmk,
-						roam_offload_11i->pmk_len);
+				WMI_LOGD("pmk_ext_len = %d",
+					 roam_offload_11i->pmk_ext_len);
 			}
 		} else {
 			WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,

+ 2 - 0
wmi/src/wmi_unified_tlv.c

@@ -15041,6 +15041,8 @@ static void populate_tlv_service(uint32_t *wmi_service)
 			WMI_SERVICE_SUPPORT_EXTEND_ADDRESS;
 	wmi_service[wmi_service_srg_srp_spatial_reuse_support] =
 		WMI_SERVICE_SRG_SRP_SPATIAL_REUSE_SUPPORT;
+	wmi_service[wmi_service_suiteb_roam_support] =
+			WMI_SERVICE_WPA3_SUITEB_ROAM_SUPPORT;
 }
 
 /**