mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
qcacld-3.0: Update sae_single_pmk info in RSO start command
Requirement is to allow station to just keeps only one PMK1 and PMKID1 which gets derived while first connection and re-use it for roaming to other AP which has some specific VSIE. To support this feature, STA should Set new flag in 11i params during RSO start/update when initial connection is completed based on the VSIE in AP beacon/probe response frame. This flag will allow fw to roam to AP(s) which has VSIE with single PMK. Update PMK info in RSO start command with sae_single_pmk info if initial connection is completed with AP contains VSIE. Change-Id: I839b48da48f92f24444e69405d87560186d7f986 CRs-Fixed: 2616029
This commit is contained in:
parent
c71e678b18
commit
8747fd098c
5 changed files with 118 additions and 6 deletions
|
|
@ -2324,6 +2324,17 @@ void wlan_mlme_set_sae_single_pmk_bss_cap(struct wlan_objmgr_psoc *psoc,
|
|||
void
|
||||
wlan_mlme_update_sae_single_pmk(struct wlan_objmgr_vdev *vdev,
|
||||
struct mlme_pmk_info *sae_single_pmk);
|
||||
|
||||
/**
|
||||
* wlan_mlme_get_sae_single_pmk_info - API to get mlme_pmkid_info
|
||||
* @vdev: vdev object
|
||||
* @pmksa: pointer to PMKSA struct
|
||||
*
|
||||
* Return : None
|
||||
*/
|
||||
void
|
||||
wlan_mlme_get_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_mlme_sae_single_pmk *pmksa);
|
||||
#else
|
||||
static inline void
|
||||
wlan_mlme_set_sae_single_pmk_bss_cap(struct wlan_objmgr_psoc *psoc,
|
||||
|
|
@ -2336,6 +2347,12 @@ wlan_mlme_update_sae_single_pmk(struct wlan_objmgr_vdev *vdev,
|
|||
struct mlme_pmk_info *sae_single_pmk)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void
|
||||
wlan_mlme_get_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_mlme_sae_single_pmk *pmksa)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
/**
|
||||
* mlme_get_roam_fail_reason_str() - Get fail string from enum
|
||||
|
|
|
|||
|
|
@ -3638,6 +3638,34 @@ void wlan_mlme_update_sae_single_pmk(struct wlan_objmgr_vdev *vdev,
|
|||
is_sae_connection)
|
||||
mlme_priv->mlme_roam.sae_single_pmk.pmk_info = *sae_single_pmk;
|
||||
}
|
||||
|
||||
void wlan_mlme_get_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_mlme_sae_single_pmk *pmksa)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
struct mlme_pmk_info pmk_info;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv) {
|
||||
mlme_legacy_err("vdev legacy private object is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
pmk_info = mlme_priv->mlme_roam.sae_single_pmk.pmk_info;
|
||||
|
||||
pmksa->sae_single_pmk_ap =
|
||||
mlme_priv->mlme_roam.sae_single_pmk.sae_single_pmk_ap;
|
||||
|
||||
if (pmk_info.pmk_len) {
|
||||
qdf_mem_copy(pmksa->pmk_info.pmk, pmk_info.pmk,
|
||||
pmk_info.pmk_len);
|
||||
pmksa->pmk_info.pmk_len = pmk_info.pmk_len;
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_mem_zero(pmksa->pmk_info.pmk, sizeof(*pmksa->pmk_info.pmk));
|
||||
pmksa->pmk_info.pmk_len = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
char *mlme_get_roam_fail_reason_str(uint32_t result)
|
||||
|
|
|
|||
Loading…
Reference in a new issue