qcacmn: Avoid MLO sta connect duplicated BSS

After legacy STA connected 1 link of MLO AP as 11ax, MLO STA connect
same MLO AP, 1 link connect will fail for bss peer existed, tx queue
will be disabled, other links can't be used at all.

To fix it, when MLO STA select candidate AP link, if peer with BSS link
addr exist, disable the link.

Change-Id: Ib7e2f4cd43c8190c5e5fd0bb7786df41b022f518
CRs-Fixed: 3715997
This commit is contained in:
Jianmin Zhu
2024-01-29 02:51:45 -08:00
committed by Ravindra Konda
父節點 a8b3fe0035
當前提交 4c64c692a1

查看文件

@@ -3085,13 +3085,14 @@ static void cm_eliminate_common_candidate(qdf_list_t *candidate_list)
}
}
static void cm_validate_partner_links_rsn_cap(struct wlan_objmgr_psoc *psoc,
struct scan_cache_entry *entry,
qdf_list_t *scan_list)
static void cm_validate_partner_links(struct wlan_objmgr_psoc *psoc,
struct scan_cache_entry *entry,
qdf_list_t *scan_list)
{
uint8_t idx;
struct scan_cache_entry *partner_entry;
struct partner_link_info *partner_info;
struct wlan_objmgr_peer *peer;
if (!entry->ie_list.multi_link_bv || !entry->ml_info.num_links)
return;
@@ -3101,6 +3102,18 @@ static void cm_validate_partner_links_rsn_cap(struct wlan_objmgr_psoc *psoc,
if (!partner_info->is_valid_link)
continue;
peer = wlan_objmgr_get_peer_by_mac(psoc,
partner_info->link_addr.bytes,
WLAN_MLME_CM_ID);
if (peer) {
mlme_debug(QDF_MAC_ADDR_FMT "link (%d) dup peer existed",
QDF_MAC_ADDR_REF(partner_entry->bssid.bytes),
partner_info->freq);
partner_info->is_valid_link = false;
wlan_objmgr_peer_release_ref(peer, WLAN_MLME_CM_ID);
continue;
}
/*
* If partner link is not found in the current candidate list
* don't treat it as failure, it can be removed post ML
@@ -3135,9 +3148,9 @@ static void cm_eliminate_common_candidate(qdf_list_t *candidate_list)
}
static inline void
cm_validate_partner_links_rsn_cap(struct wlan_objmgr_psoc *psoc,
struct scan_cache_entry *entry,
qdf_list_t *scan_list)
cm_validate_partner_links(struct wlan_objmgr_psoc *psoc,
struct scan_cache_entry *entry,
qdf_list_t *scan_list)
{
}
#endif
@@ -3231,8 +3244,7 @@ void wlan_cm_calculate_bss_score(struct wlan_objmgr_pdev *pdev,
}
/* Check if the partner links RSN caps are matching. */
cm_validate_partner_links_rsn_cap(psoc,
scan_entry->entry, scan_list);
cm_validate_partner_links(psoc, scan_entry->entry, scan_list);
if (denylist_action == CM_DLM_NO_ACTION ||
(are_all_candidate_denylisted && denylist_action ==
CM_DLM_REMOVE)) {