}
+struct wlantest_bss * bss_find_mld(struct wlantest *wt, const u8 *mld_mac_addr)
+{
+ struct wlantest_bss *bss;
+
+ dl_list_for_each(bss, &wt->bss, struct wlantest_bss, list) {
+ if (os_memcmp(bss->mld_mac_addr, mld_mac_addr, ETH_ALEN) == 0)
+ return bss;
+ }
+
+ return NULL;
+}
+
+
struct wlantest_bss * bss_get(struct wlantest *wt, const u8 *bssid)
{
struct wlantest_bss *bss;
const struct ieee80211_mgmt *mgmt,
size_t len)
{
- struct wlantest_bss *bss;
+ struct wlantest_bss *bss, *bss2;
struct wlantest_sta *new_sta;
const u8 *ies;
size_t ies_len;
return;
}
- bss = bss_get(wt, mgmt->u.action.u.ft_action_resp.target_ap_addr);
+ bss = bss_find(wt, mgmt->u.action.u.ft_action_resp.target_ap_addr);
+ bss2 = bss_find_mld(wt, mgmt->u.action.u.ft_action_resp.target_ap_addr);
+ if (!bss)
+ bss = bss2;
+ if (bss && bss2 && bss != bss2 && !sta_find(bss, sta->addr))
+ bss = bss2;
+ if (!bss)
+ bss = bss_get(wt,
+ mgmt->u.action.u.ft_action_resp.target_ap_addr);
+
if (!bss) {
add_note(wt, MSG_INFO, "No BSS entry for Target AP");
return;
const u8 *data, size_t len);
struct wlantest_bss * bss_find(struct wlantest *wt, const u8 *bssid);
+struct wlantest_bss * bss_find_mld(struct wlantest *wt, const u8 *mld_mac_addr);
struct wlantest_bss * bss_get(struct wlantest *wt, const u8 *bssid);
void bss_deinit(struct wlantest_bss *bss);
void bss_update(struct wlantest *wt, struct wlantest_bss *bss,