|
@@ -17375,6 +17375,67 @@ csr_update_roam_req_adaptive_11r(struct csr_roam_session *session,
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+#if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
|
|
+/**
|
|
|
+ * csr_fill_sae_single_pmk_info() - updates req msg with sae single pmk info
|
|
|
+ * @mac_ctx: Mac context
|
|
|
+ * @req_buf: out param, roam offload scan request packet
|
|
|
+ * @vdev_id: Vdev id
|
|
|
+ *
|
|
|
+ * Return: true in case of success
|
|
|
+ */
|
|
|
+static bool
|
|
|
+csr_fill_sae_single_pmk_info(struct mac_context *mac_ctx,
|
|
|
+ struct roam_offload_scan_req *req_buf,
|
|
|
+ uint8_t vdev_id)
|
|
|
+{
|
|
|
+ struct wlan_mlme_sae_single_pmk single_pmk;
|
|
|
+ struct wlan_objmgr_vdev *vdev;
|
|
|
+
|
|
|
+ if (!mac_ctx || !req_buf) {
|
|
|
+ sme_debug("Invalid session or req buff");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc, vdev_id,
|
|
|
+ WLAN_LEGACY_SME_ID);
|
|
|
+ if (!vdev) {
|
|
|
+ sme_err("vdev is NULL");
|
|
|
+ return QDF_STATUS_E_NULL_VALUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ wlan_mlme_get_sae_single_pmk_info(vdev, &single_pmk);
|
|
|
+
|
|
|
+ if (single_pmk.pmk_info.pmk_len && single_pmk.sae_single_pmk_ap &&
|
|
|
+ mac_ctx->mlme_cfg->lfr.sae_single_pmk_feature_enabled) {
|
|
|
+ sme_debug("Update pmk with len %d same_pmk_info %d",
|
|
|
+ single_pmk.pmk_info.pmk_len,
|
|
|
+ single_pmk.sae_single_pmk_ap);
|
|
|
+ /* Update sae same pmk info in rso */
|
|
|
+ qdf_mem_copy(req_buf->PSK_PMK, single_pmk.pmk_info.pmk,
|
|
|
+ sizeof(req_buf->PSK_PMK));
|
|
|
+ req_buf->pmk_len = single_pmk.pmk_info.pmk_len;
|
|
|
+
|
|
|
+ req_buf->is_sae_single_pmk = single_pmk.sae_single_pmk_ap;
|
|
|
+
|
|
|
+ wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+#else
|
|
|
+static bool
|
|
|
+csr_fill_sae_single_pmk_info(struct mac_context *mac_ctx,
|
|
|
+ struct roam_offload_scan_req *req_buf,
|
|
|
+ uint8_t vdev_id)
|
|
|
+{
|
|
|
+ return false;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
/**
|
|
|
* csr_update_roam_scan_offload_request() - updates req msg with roam offload
|
|
|
* parameters
|
|
@@ -17404,10 +17465,13 @@ csr_update_roam_scan_offload_request(struct mac_context *mac_ctx,
|
|
|
qdf_mem_copy(&req_buf->roam_params,
|
|
|
&mac_ctx->roam.configParam.roam_params,
|
|
|
sizeof(req_buf->roam_params));
|
|
|
-
|
|
|
- qdf_mem_copy(req_buf->PSK_PMK, session->psk_pmk,
|
|
|
- sizeof(req_buf->PSK_PMK));
|
|
|
- req_buf->pmk_len = session->pmk_len;
|
|
|
+ /* Check whether to send psk_pmk or sae_single pmk info */
|
|
|
+ if (!csr_fill_sae_single_pmk_info(mac_ctx, req_buf,
|
|
|
+ session->sessionId)) {
|
|
|
+ qdf_mem_copy(req_buf->PSK_PMK, session->psk_pmk,
|
|
|
+ sizeof(req_buf->PSK_PMK));
|
|
|
+ req_buf->pmk_len = session->pmk_len;
|
|
|
+ }
|
|
|
req_buf->R0KH_ID_Length = session->ftSmeContext.r0kh_id_len;
|
|
|
qdf_mem_copy(req_buf->R0KH_ID,
|
|
|
session->ftSmeContext.r0kh_id,
|