wpa_s->rsnxe_override_eapol = NULL;
else
wpa_s->rsnxe_override_eapol = wpabuf_parse_bin(value);
+ } else if (os_strcasecmp(cmd, "link_ies") == 0) {
+ int link_id = atoi(value);
+ char *pos;
+
+ if (link_id < 0 || link_id >= MAX_NUM_MLD_LINKS)
+ return -1;
+
+ pos = os_strchr(value, ':');
+ if (!pos)
+ return -1;
+ pos++;
+
+ wpabuf_free(wpa_s->link_ies[link_id]);
+ if (os_strcmp(value, "NULL") == 0)
+ wpa_s->link_ies[link_id] = NULL;
+ else
+ wpa_s->link_ies[link_id] = wpabuf_parse_bin(pos);
} else if (os_strcasecmp(cmd, "reject_btm_req_reason") == 0) {
wpa_s->reject_btm_req_reason = atoi(value);
} else if (os_strcasecmp(cmd, "get_pref_freq_list_override") == 0) {
wpabuf_free(wpa_s->rsnxe_override_eapol);
wpa_s->rsnxe_override_eapol = NULL;
wpas_clear_driver_signal_override(wpa_s);
+ {
+ int i;
+
+ for (i = 0; i < MAX_NUM_MLD_LINKS; i++) {
+ wpabuf_free(wpa_s->link_ies[i]);
+ wpa_s->link_ies[i] = NULL;
+ }
+ }
#ifndef CONFIG_NO_ROBUST_AV
wpa_s->disable_scs_support = 0;
wpa_s->disable_mscs_support = 0;
void wpas_reset_mlo_info(struct wpa_supplicant *wpa_s)
{
+ int i;
+
if (!wpa_s->valid_links)
return;
wpa_s->valid_links = 0;
wpa_s->mlo_assoc_link_id = 0;
os_memset(wpa_s->ap_mld_addr, 0, ETH_ALEN);
+ for (i = 0; i < MAX_NUM_MLD_LINKS; i++)
+ wpabuf_free(wpa_s->links[i].ies);
os_memset(wpa_s->links, 0, sizeof(wpa_s->links));
}
os_memcpy(wpa_s->links[i].bssid, bssid, ETH_ALEN);
wpa_s->links[i].freq = bss->mld_links[i].freq;
wpa_s->links[i].disabled = bss->mld_links[i].disabled;
+ wpabuf_free(wpa_s->links[i].ies);
+ wpa_s->links[i].ies = NULL;
+#ifdef CONFIG_TESTING_OPTIONS
+ if (wpa_s->link_ies[i])
+ wpa_s->links[i].ies = wpabuf_dup(wpa_s->link_ies[i]);
+#endif /* CONFIG_TESTING_OPTIONS */
if (bss->mld_link_id == i)
wpa_s->links[i].bss = bss;
wpa_s->links[i].freq;
params.mld_params.mld_links[i].disabled =
wpa_s->links[i].disabled;
+ if (wpa_s->links[i].ies) {
+ params.mld_params.mld_links[i].ies =
+ wpabuf_head(wpa_s->links[i].ies);
+ params.mld_params.mld_links[i].ies_len =
+ wpabuf_len(wpa_s->links[i].ies);
+ }
wpa_printf(MSG_DEBUG,
- "MLD: id=%u, freq=%d, disabled=%u, " MACSTR,
+ "MLD: id=%u, freq=%d, disabled=%u, ies_len=%zu, "
+ MACSTR,
i, wpa_s->links[i].freq,
wpa_s->links[i].disabled,
+ params.mld_params.mld_links[i].ies_len,
MAC2STR(wpa_s->links[i].bssid));
}
}
wpabuf_free(wpa_s->rsnxe_override_eapol);
wpa_s->rsnxe_override_eapol = NULL;
wpas_clear_driver_signal_override(wpa_s);
+ for (i = 0; i < MAX_NUM_MLD_LINKS; i++) {
+ wpabuf_free(wpa_s->link_ies[i]);
+ wpa_s->link_ies[i] = NULL;
+ }
#endif /* CONFIG_TESTING_OPTIONS */
if (wpa_s->conf != NULL) {
os_free(wpa_s->owe_trans_scan_freq);
wpa_s->owe_trans_scan_freq = NULL;
#endif /* CONFIG_OWE */
+
+ for (i = 0; i < MAX_NUM_MLD_LINKS; i++) {
+ wpabuf_free(wpa_s->links[i].ies);
+ wpa_s->links[i].ies = NULL;
+ }
}
unsigned int freq;
struct wpa_bss *bss;
bool disabled;
+ struct wpabuf *ies;
} links[MAX_NUM_MLD_LINKS];
u8 *last_con_fail_realm;
size_t last_con_fail_realm_len;
unsigned int disable_eapol_g2_tx;
unsigned int eapol_2_key_info_set_mask;
int test_assoc_comeback_type;
+ struct wpabuf *link_ies[MAX_NUM_MLD_LINKS];
#endif /* CONFIG_TESTING_OPTIONS */
struct wmm_ac_assoc_data *wmm_ac_assoc_info;