|
@@ -3924,7 +3924,7 @@ lim_validate_probe_rsp_link_info(struct pe_session *session_entry,
|
|
|
if (!lim_match_link_info(ml_partner_info.partner_link_info[i].link_id,
|
|
|
&ml_partner_info.partner_link_info[i].link_addr,
|
|
|
&partner_info)) {
|
|
|
- pe_err("Prb req link info does not match prb resp link info");
|
|
|
+ pe_err("Atleast one Per-STA profile is missing in the ML-probe response");
|
|
|
return QDF_STATUS_E_PROTO;
|
|
|
}
|
|
|
}
|
|
@@ -3958,61 +3958,16 @@ lim_clear_ml_partner_info(struct pe_session *session_entry)
|
|
|
partner_info->num_partner_links = 0;
|
|
|
}
|
|
|
|
|
|
-static QDF_STATUS
|
|
|
-lim_compare_scan_entry_partner_info_with_join_req(struct mlo_partner_info
|
|
|
- *partner_info,
|
|
|
- struct partner_link_info
|
|
|
- *partner_link)
|
|
|
-{
|
|
|
- int i;
|
|
|
- int j;
|
|
|
- struct mlo_link_info *partner_link_info;
|
|
|
- struct partner_link_info *scan_info;
|
|
|
- int num_matching_links = 0;
|
|
|
- QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
|
|
-
|
|
|
- for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
|
|
|
- partner_link_info = &partner_info->partner_link_info[i];
|
|
|
- for (j = 0; j < MLD_MAX_LINKS - 1; j++) {
|
|
|
- scan_info = &partner_link[j];
|
|
|
- if (!scan_info)
|
|
|
- continue;
|
|
|
- /*
|
|
|
- * do not compare if both have freq as zero
|
|
|
- */
|
|
|
- if (scan_info->freq == 0)
|
|
|
- continue;
|
|
|
-
|
|
|
- if (scan_info->freq == partner_link_info->chan_freq) {
|
|
|
- qdf_mem_cmp(partner_link_info->link_addr.bytes,
|
|
|
- scan_info->link_addr.bytes,
|
|
|
- QDF_MAC_ADDR_SIZE);
|
|
|
- num_matching_links += 1;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (partner_info->num_partner_links == num_matching_links) {
|
|
|
- pe_debug("num of matching partner links %d",
|
|
|
- num_matching_links);
|
|
|
- status = QDF_STATUS_SUCCESS;
|
|
|
- }
|
|
|
-
|
|
|
- return status;
|
|
|
-}
|
|
|
-
|
|
|
static QDF_STATUS
|
|
|
lim_check_scan_db_for_join_req_partner_info(struct pe_session *session_entry,
|
|
|
struct mac_context *mac_ctx)
|
|
|
{
|
|
|
struct join_req *lim_join_req;
|
|
|
struct wlan_objmgr_pdev *pdev;
|
|
|
- struct partner_link_info *partner_link = NULL;
|
|
|
- struct qdf_mac_addr qdf_bssid;
|
|
|
- QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
|
|
struct mlo_partner_info *partner_info;
|
|
|
- uint16_t join_req_freq = 0;
|
|
|
- struct scan_cache_entry *cache_entry;
|
|
|
+ struct mlo_link_info *link_info;
|
|
|
+ struct scan_cache_entry *partner_entry;
|
|
|
+ uint8_t i;
|
|
|
|
|
|
if (!session_entry) {
|
|
|
pe_err("session entry is NULL");
|
|
@@ -4036,47 +3991,23 @@ lim_check_scan_db_for_join_req_partner_info(struct pe_session *session_entry,
|
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
|
}
|
|
|
|
|
|
- partner_link = qdf_mem_malloc(sizeof(struct partner_link_info) *
|
|
|
- (MLD_MAX_LINKS - 1));
|
|
|
-
|
|
|
- if (!partner_link)
|
|
|
- return QDF_STATUS_E_FAILURE;
|
|
|
-
|
|
|
- qdf_mem_copy(&qdf_bssid,
|
|
|
- &(lim_join_req->bssDescription.bssId),
|
|
|
- QDF_MAC_ADDR_SIZE);
|
|
|
-
|
|
|
- join_req_freq = lim_join_req->bssDescription.chan_freq;
|
|
|
-
|
|
|
- cache_entry = wlan_scan_get_scan_entry_by_mac_freq(pdev,
|
|
|
- &qdf_bssid,
|
|
|
- join_req_freq);
|
|
|
-
|
|
|
- if (!cache_entry) {
|
|
|
- pe_err("failed to get partner link info by mac addr");
|
|
|
- status = QDF_STATUS_E_FAILURE;
|
|
|
- goto free_mem;
|
|
|
- }
|
|
|
-
|
|
|
- qdf_mem_copy(partner_link, cache_entry->ml_info.link_info,
|
|
|
- sizeof(struct partner_link_info) * (MLD_MAX_LINKS - 1));
|
|
|
-
|
|
|
- util_scan_free_cache_entry(cache_entry);
|
|
|
-
|
|
|
partner_info = &lim_join_req->partner_info;
|
|
|
-
|
|
|
- status = lim_compare_scan_entry_partner_info_with_join_req(
|
|
|
- partner_info, partner_link);
|
|
|
-
|
|
|
- if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
- pe_err("failed to match num of partner links in scan entry");
|
|
|
- status = QDF_STATUS_E_FAILURE;
|
|
|
- goto free_mem;
|
|
|
+ for (i = 0; i < partner_info->num_partner_links; i++) {
|
|
|
+ link_info = &partner_info->partner_link_info[i];
|
|
|
+ partner_entry =
|
|
|
+ wlan_scan_get_entry_by_bssid(pdev,
|
|
|
+ &link_info->link_addr);
|
|
|
+ if (!partner_entry) {
|
|
|
+ pe_err("Scan entry is not found for partner link %d "
|
|
|
+ QDF_MAC_ADDR_FMT,
|
|
|
+ link_info->link_id,
|
|
|
+ QDF_MAC_ADDR_REF(link_info->link_addr.bytes));
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
+ util_scan_free_cache_entry(partner_entry);
|
|
|
}
|
|
|
|
|
|
-free_mem:
|
|
|
- qdf_mem_free(partner_link);
|
|
|
- return status;
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
}
|
|
|
|
|
|
QDF_STATUS lim_update_mlo_mgr_info(struct mac_context *mac_ctx,
|