summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeela Venkata Kiran Kumar Reddy Chirala <kchirala@qca.qualcomm.com>2014-06-29 22:57:11 -0700
committerPitani Venkata Rajesh Kumar <c_vpitan@qti.qualcomm.com>2014-07-09 12:13:19 +0530
commitb18f94228f714d319624af79692c10d3a7f2ea96 (patch)
tree0447481ccde828c96b4d9b27cad0ed5a91cc7403
parent9c9faf94f11a892655d4484cd92c13b260c48987 (diff)
Add support for caps exchange for key management
This gerrit Adds support for capabilities exchange between driver and supplicant for key management offload. Change-Id: I10e88d42c92ac1012cc5d18771929aad0078aaa0 CRs-fixed: 690017
-rw-r--r--CORE/HDD/inc/wlan_hdd_tgt_cfg.h3
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c44
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c4
-rw-r--r--CORE/SERVICES/WMA/wma.c5
4 files changed, 55 insertions, 1 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_tgt_cfg.h b/CORE/HDD/inc/wlan_hdd_tgt_cfg.h
index 90583255b530..df0ecd2c134b 100644
--- a/CORE/HDD/inc/wlan_hdd_tgt_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_tgt_cfg.h
@@ -48,6 +48,9 @@ struct hdd_tgt_services {
v_BOOL_t en_tdls_offchan;
v_BOOL_t en_tdls_uapsd_buf_sta;
v_BOOL_t en_tdls_uapsd_sleep_sta;
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ v_BOOL_t en_roam_offload;
+#endif
#endif
};
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 9381cda43389..641859017d34 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -3522,6 +3522,19 @@ int wlan_hdd_cfg80211_init(struct device *dev,
if (pCfg->ht2040CoexEnabled)
wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
#endif
+#ifdef FEATURE_WLAN_ROAM_OFFLOAD
+ if (pCfg->isRoamOffloadEnabled) {
+ wiphy->flags |= WIPHY_FLAG_HAS_KEY_MGMT_OFFLOAD;
+ wiphy->key_mgmt_offload_support |=
+ NL80211_KEY_MGMT_OFFLOAD_SUPPORT_PSK;
+ wiphy->key_mgmt_offload_support |=
+ NL80211_KEY_MGMT_OFFLOAD_SUPPORT_FT_PSK;
+ wiphy->key_mgmt_offload_support |=
+ NL80211_KEY_MGMT_OFFLOAD_SUPPORT_PMKSA;
+ wiphy->key_derive_offload_support |=
+ NL80211_KEY_DERIVE_OFFLOAD_SUPPORT_IGTK;
+ }
+#endif
EXIT();
return 0;
@@ -9483,7 +9496,36 @@ static int __wlan_hdd_cfg80211_connect( struct wiphy *wiphy,
"%s: HDD context is not valid", __func__);
return status;
}
-
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+#define KEY_MGMT_OFFLOAD_BITMASK 0x4
+ /* Supplicant indicate its decision to offload key management
+ * by setting the third bit in flags in case of Secure connection
+ * so if the supplicant does not support this then LFR3.0 shall
+ * be disabled.if supplicant indicates support for offload
+ * of key managament then we shall enable LFR3.0.Note that
+ * supplicant set the bit in flags means driver already indicated
+ * its capability to handle the key management and LFR3.0 is
+ * enabled in INI and FW also has the capability to handle
+ * key management offload as part of LFR3.0
+ */
+ if (!(req->auth_type == NL80211_AUTHTYPE_OPEN_SYSTEM) ||
+ (req->auth_type == NL80211_AUTHTYPE_FT)) {
+ if (!(req->flags & KEY_MGMT_OFFLOAD_BITMASK)) {
+ hddLog(VOS_TRACE_LEVEL_DEBUG,
+ FL("Supplicant does not support key mgmt offload for this AP"));
+ pHddCtx->cfg_ini->isRoamOffloadEnabled = 0;
+ status = sme_UpdateRoamOffloadEnabled(pHddCtx->hHal, FALSE);
+ } else {
+ pHddCtx->cfg_ini->isRoamOffloadEnabled = 1;
+ status = sme_UpdateRoamOffloadEnabled(pHddCtx->hHal, TRUE);
+ }
+ if (0 != status) {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: Could not update the RoamOffload enable", __func__);
+ return status;
+ }
+ }
+#endif
if (vos_max_concurrent_connections_reached()) {
hddLog(VOS_TRACE_LEVEL_DEBUG, FL("Reached max concurrent connections"));
return -ECONNREFUSED;
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 4358626497d8..728013eee0bd 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -5995,6 +5995,10 @@ static void hdd_update_tgt_services(hdd_context_t *hdd_ctx,
}
#endif
pMac->beacon_offload = cfg->beacon_offload;
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ cfg_ini->isRoamOffloadEnabled &= cfg->en_roam_offload;
+#endif
+
}
static void hdd_update_tgt_ht_cap(hdd_context_t *hdd_ctx,
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index a6f058bd1218..9818e1438728 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -21818,6 +21818,11 @@ static inline void wma_update_target_services(tp_wma_handle wh,
#endif
if (WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, WMI_SERVICE_BEACON_OFFLOAD))
cfg->beacon_offload = TRUE;
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ /* Enable Roam Offload */
+ cfg->en_roam_offload = WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap,
+ WMI_SERVICE_ROAM_HO_OFFLOAD);
+#endif
}
static inline void wma_update_target_ht_cap(tp_wma_handle wh,