diff options
| author | Leela Venkata Kiran Kumar Reddy Chirala <kchirala@qca.qualcomm.com> | 2014-06-29 22:57:11 -0700 |
|---|---|---|
| committer | Pitani Venkata Rajesh Kumar <c_vpitan@qti.qualcomm.com> | 2014-07-09 12:13:19 +0530 |
| commit | b18f94228f714d319624af79692c10d3a7f2ea96 (patch) | |
| tree | 0447481ccde828c96b4d9b27cad0ed5a91cc7403 | |
| parent | 9c9faf94f11a892655d4484cd92c13b260c48987 (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.h | 3 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 44 | ||||
| -rwxr-xr-x | CORE/HDD/src/wlan_hdd_main.c | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 5 |
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, |
