wlan : Fast transition (11r)
- Set Key along with the Config BSS command to HAL
to improve the 11r roam latencies
- Move the TL state to Authenticated to allow TX Data
when set GTK is received at driver from supplicant
- Optimize the memcpy in hdd_SendFTEvent
Change-Id: Iab9f1fbcc4a11bd1a2e521885a6beaf1f6a9068a
CRs-fixed: 465419
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 753ded5..278d455 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -3216,6 +3216,22 @@
hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter);
hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
+ if (!pairwise)
+#else
+ if (!mac_addr || is_broadcast_ether_addr(mac_addr))
+#endif
+ {
+ /* set group key*/
+ if (pHddStaCtx->roam_info.deferKeyComplete)
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ "%s- %d: Perform Set key Complete",
+ __func__, __LINE__);
+ hdd_PerformRoamSetKeyComplete(pAdapter);
+ }
+ }
+
pWextState->roamProfile.Keys.KeyLength[key_index] = (u8)params->key_len;
pWextState->roamProfile.Keys.defaultIndex = key_index;
@@ -3224,6 +3240,7 @@
vos_mem_copy(&pWextState->roamProfile.Keys.KeyMaterial[key_index][0],
params->key, params->key_len);
+
pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_SETTING_KEY;
hddLog(VOS_TRACE_LEVEL_INFO_MED,
@@ -3248,11 +3265,20 @@
}
#ifdef WLAN_FEATURE_VOWIFI_11R
- /* The supplicant may attempt to set the PTK once pre-authentication is done.
- Save the key in the UMAC and include it in the ADD BSS request */
+ /* The supplicant may attempt to set the PTK once pre-authentication
+ is done. Save the key in the UMAC and include it in the ADD BSS
+ request */
halStatus = sme_FTUpdateKey( WLAN_HDD_GET_HAL_CTX(pAdapter), &setKey);
- if( halStatus == eHAL_STATUS_FT_PREAUTH_KEY_WAIT )
+ if ( halStatus == eHAL_STATUS_FT_PREAUTH_KEY_SUCCESS )
{
+ hddLog(VOS_TRACE_LEVEL_INFO_MED,
+ "%s: Update PreAuth Key success", __func__);
+ return 0;
+ }
+ else if ( halStatus == eHAL_STATUS_FT_PREAUTH_KEY_FAILED )
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: Update PreAuth Key failed", __func__);
return -EINVAL;
}
#endif /* WLAN_FEATURE_VOWIFI_11R */