|
@@ -20278,6 +20278,25 @@ static int __wlan_hdd_cfg80211_connect(struct wiphy *wiphy,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * In STA + STA roaming scenario, connection to same ssid but different
|
|
|
+ * bssid is allowed on both vdevs. So there could be a race where the
|
|
|
+ * STA1 connectes to a bssid when roaming is in progress on STA2 for
|
|
|
+ * the same bssid. Here the firwmare would have already created peer for
|
|
|
+ * the roam candidate and host would have created peer on the other
|
|
|
+ * vdev. When roam synch indication is received, then peer create fails
|
|
|
+ * at host for the roaming vdev due to duplicate peer detection logic.
|
|
|
+ * Still roam synch confirm is sent to the firmware.
|
|
|
+ * When disconnection is received for STA1, then del bss is sent for
|
|
|
+ * this vdev and firmware asserts as the peer was not created for this
|
|
|
+ * vdev.
|
|
|
+ */
|
|
|
+ if (hdd_is_roaming_in_progress(hdd_ctx) ||
|
|
|
+ sme_is_any_session_in_middle_of_roaming(hdd_ctx->mac_handle)) {
|
|
|
+ hdd_err("Roaming in progress. Defer connect");
|
|
|
+ return -EBUSY;
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
* Check if this is reassoc to same bssid, if reassoc is success, return
|
|
|
*/
|