wlan: Use Reassociation during BSS Transition
qcacld-2.0 to prima propagation
The BSS transition request is handled by the supplicant.
The supplicant upon receiving the request will issue a
connect request to the driver with a hint of prev_bssid
telling the driver to perform a re-association.
Use this hint in the driver and initiate a re-association.
While doing the re-association, there is no need to do a
scan if the target AP is already present in the scan cache.
Optimize the re-association code to not do a scan if not
necessary in this particular case.
Git-commit:ca5977a93f42553da18a4e6638637bb577f706f7
Change-Id: Idf1a7058009a8d2082bc1742dca1364cf59c405b
CRs-Fixed: 1032845
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 569cdc8..5a26d67 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -14497,6 +14497,41 @@
return result;
}
+/**
+ * wlan_hdd_reassoc_bssid_hint() - Start reassociation if bssid is present
+ * @adapter: Pointer to the HDD adapter
+ * @req: Pointer to the structure cfg_connect_params receieved from user space
+ *
+ * This function will start reassociation if bssid hint, channel hint and
+ * previous bssid parameters are present in the connect request
+ *
+ * Return: success if reassociation is happening
+ * Error code if reassociation is not permitted or not happening
+ */
+#ifdef CFG80211_CONNECT_PREV_BSSID
+static int wlan_hdd_reassoc_bssid_hint(hdd_adapter_t *adapter,
+ struct cfg80211_connect_params *req)
+{
+ int status = -EPERM;
+ if (req->bssid_hint && req->channel_hint && req->prev_bssid) {
+ hddLog(VOS_TRACE_LEVEL_INFO,
+ FL("REASSOC Attempt on channel %d to "MAC_ADDRESS_STR),
+ req->channel_hint->hw_value,
+ MAC_ADDR_ARRAY(req->bssid_hint));
+ status = hdd_reassoc(adapter, req->bssid_hint,
+ req->channel_hint->hw_value,
+ CONNECT_CMD_USERSPACE);
+ }
+ return status;
+}
+#else
+static int wlan_hdd_reassoc_bssid_hint(hdd_adapter_t *adapter,
+ struct cfg80211_connect_params *req)
+{
+ return -EPERM;
+}
+#endif
+
/*
* FUNCTION: __wlan_hdd_cfg80211_connect
* This function is used to start the association process
@@ -14542,6 +14577,10 @@
return status;
}
+ status = wlan_hdd_reassoc_bssid_hint(pAdapter, req);
+ if (0 == status)
+ return status;
+
#ifdef WLAN_BTAMP_FEATURE
//Infra connect not supported when AMP traffic is on.