Browse Source

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 năm trước cách đây
mục cha
commit
8a8ee00543
3 tập tin đã thay đổi với 17 bổ sung5 xóa
  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;
 }
 
 /**