qcacmn: Use MLD address of BSS peer for PMKSA operations

If PMKID present in AP expires, AP rejects the PMKID based association.
Current design is to clear the cache using BSSID/MAC address of link
in such cases to let a fresh SAE authentication to happen.
But host driver stores PMKSA with MLD address for ML BSS.
Adapt to the same and update PMKSA cache clear APIs to use
MLD address instead of link address.

Introduce new API which return the legacy address for non-ML
association and MLD address for MLO association of the BSS peer.
Use this API to get the correct entry from PMKSA cache to delete.

Introduce new utility API to fetch the MLD address from scan entry.
Use this API to get the MLD address of the ML candidate.

Change-Id: Id35a3937ba6649e8ba7ae8f849ac1ed2a9cc83f8
CRs-Fixed: 3453839
这个提交包含在:
Vinod Kumar Pirla
2023-04-03 08:34:32 -07:00
提交者 Madan Koyyalamudi
父节点 f5534874df
当前提交 7382a9f799
修改 13 个文件,包含 375 行新增31 行删除

查看文件

@@ -527,4 +527,21 @@ wlan_scan_get_last_scan_ageout_time(struct wlan_objmgr_psoc *psoc,
struct scan_cache_entry *
wlan_scan_get_entry_by_bssid(struct wlan_objmgr_pdev *pdev,
struct qdf_mac_addr *bssid);
/**
* wlan_scan_get_mld_addr_by_link_addr() - Function to get MLD address
* in the scan entry from the link BSSID.
* @pdev: pdev object
* @link_addr: Link BSSID to match the scan filter
* @mld_mac_addr: Pointer to fill the MLD address.
*
* A wrapper API which fills @mld_mac_addr with MLD address of scan entry
* whose bssid field matches @link_addr.
*
* Return: QDF_STATUS
*/
QDF_STATUS
wlan_scan_get_mld_addr_by_link_addr(struct wlan_objmgr_pdev *pdev,
struct qdf_mac_addr *link_addr,
struct qdf_mac_addr *mld_mac_addr);
#endif

查看文件

@@ -121,6 +121,34 @@ util_scan_entry_macaddr(struct scan_cache_entry *scan_entry)
return &(scan_entry->mac_addr.bytes[0]);
}
#ifdef WLAN_FEATURE_11BE_MLO
/**
* util_scan_entry_mldaddr() - Function to get MLD address
* @scan_entry: Scan entry
*
* API will return the MLD address of the scan entry.
*
* Return: Pointer to MLD address.
*/
static inline struct qdf_mac_addr *
util_scan_entry_mldaddr(struct scan_cache_entry *scan_entry)
{
struct qdf_mac_addr *mld_addr = &scan_entry->ml_info.mld_mac_addr;
if (qdf_is_macaddr_zero(mld_addr))
return NULL;
return mld_addr;
}
#else
static inline struct qdf_mac_addr *
util_scan_entry_mldaddr(struct scan_cache_entry *scan_entry)
{
return NULL;
}
#endif
/**
* util_scan_entry_bssid() - function to read bssid
* @scan_entry: scan entry

查看文件

@@ -877,6 +877,14 @@ wlan_scan_get_entry_by_bssid(struct wlan_objmgr_pdev *pdev,
return scm_scan_get_entry_by_bssid(pdev, bssid);
}
QDF_STATUS
wlan_scan_get_mld_addr_by_link_addr(struct wlan_objmgr_pdev *pdev,
struct qdf_mac_addr *link_addr,
struct qdf_mac_addr *mld_mac_addr)
{
return scm_get_mld_addr_by_link_addr(pdev, link_addr, mld_mac_addr);
}
QDF_STATUS
wlan_scan_get_scan_entry_by_mac_freq(struct wlan_objmgr_pdev *pdev,
struct qdf_mac_addr *bssid,