ソースを参照

qcacld-3.0: Send SSID in join req for OWE transition mode

STA connection with OWE transition mode SSID fails due to join
failure timeout. Since, it is OWE transition mode, STA needs probe
response for join success.

The scan table entry of the candidate BSSID is sent in the join request.
This entry is used to create session and to send probe request to AP.
In case of OWE transition mode, the beacon carries wildcard SSID.
Therefore, the scan table entry also has wildcard ssid. Also,
during the candidate selection, scm_ignore_ssid_check_for_owe check
allows even entries with wildcard SSIDs to be selected as candiates
for OWE transition mode.

The join request with Wildcard SSID in the scan entry is used by LIM
to create session, as well as to send probe request.Therefore,
the AP doesn't respond to the probe request with wildcard ssid
leading to join failure timeout.

This change adds ssid from connect request to the cm_vdev_join_req,
which can be used by LIM to create session and to send probe request
whenever the SSID in scan entry is wildcard.

Change-Id: I02e19e16f2620b5568fbff82ff29d394ab9ee00d
CRs-Fixed: 3041073
Surya Prakash Sivaraj 3 年 前
コミット
75277ed0ab

+ 2 - 0
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_api.h

@@ -49,6 +49,7 @@
  * @entry: scan entry for the candidate
  * @partner_info: Partner link information for an ML connection
  * @assoc_link_id: Assoc link ID of an ML connection
+ * @owe_trans_ssid: owe trans ssid to be used when scan entry ssid is wildcard
  */
 struct cm_vdev_join_req {
 	uint8_t vdev_id;
@@ -64,6 +65,7 @@ struct cm_vdev_join_req {
 	struct mlo_partner_info partner_info;
 	uint8_t assoc_link_id;
 #endif
+	struct wlan_ssid owe_trans_ssid;
 };
 
 /**

+ 3 - 0
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_connect.c

@@ -1088,6 +1088,9 @@ cm_copy_join_params(struct cm_vdev_join_req *join_req,
 
 	cm_fill_ml_info(join_req);
 
+	if (req->owe_trans_ssid.length)
+		join_req->owe_trans_ssid = req->owe_trans_ssid;
+
 	join_req->vdev_id = req->vdev_id;
 	join_req->cm_id = req->cm_id;
 	join_req->force_rsne_override = req->force_rsne_override;

+ 11 - 0
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -3739,6 +3739,7 @@ lim_fill_session_params(struct mac_context *mac_ctx,
 	uint32_t ie_len;
 	uint32_t bss_len;
 	struct join_req *pe_join_req;
+	int32_t akm;
 
 	ie_len = util_scan_entry_ie_len(req->entry);
 	bss_len = (uint16_t)(offsetof(struct bss_description,
@@ -3764,6 +3765,16 @@ lim_fill_session_params(struct mac_context *mac_ctx,
 		return QDF_STATUS_E_FAILURE;
 	}
 
+	akm = wlan_crypto_get_param(session->vdev,
+				    WLAN_CRYPTO_PARAM_KEY_MGMT);
+	if (!req->entry->ssid.length &&
+	    QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_OWE) &&
+	    req->owe_trans_ssid.length) {
+		req->entry->ssid = req->owe_trans_ssid;
+		pe_debug("OWE transition ssid is %.*s", req->entry->ssid.length,
+			 req->entry->ssid.ssid);
+	}
+
 	/* Copy the SSID from req to session entry  */
 	session->ssId.length = req->entry->ssid.length;
 	qdf_mem_copy(session->ssId.ssId, req->entry->ssid.ssid,