wpabuf_free(mlbuf);
return removed_links;
}
+
+
+const u8 * wpa_bss_get_rsne(struct wpa_supplicant *wpa_s,
+ const struct wpa_bss *bss, struct wpa_ssid *ssid,
+ bool mlo)
+{
+ return wpa_bss_get_ie(bss, WLAN_EID_RSN);
+}
+
+
+const u8 * wpa_bss_get_rsnxe(struct wpa_supplicant *wpa_s,
+ const struct wpa_bss *bss, struct wpa_ssid *ssid,
+ bool mlo)
+{
+ return wpa_bss_get_ie(bss, WLAN_EID_RSNX);
+}
u16 wpa_bss_parse_reconf_ml_element(struct wpa_supplicant *wpa_s,
struct wpa_bss *bss);
+const u8 * wpa_bss_get_rsne(struct wpa_supplicant *wpa_s,
+ const struct wpa_bss *bss, struct wpa_ssid *ssid,
+ bool mlo);
+const u8 * wpa_bss_get_rsnxe(struct wpa_supplicant *wpa_s,
+ const struct wpa_bss *bss, struct wpa_ssid *ssid,
+ bool mlo);
+
#endif /* BSS_H */
ie = wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE);
if (ie)
pos = wpa_supplicant_ie_txt(pos, end, "WPA", ie, 2 + ie[1]);
- ie2 = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ ie2 = wpa_bss_get_rsne(wpa_s, bss, NULL, false);
if (ie2) {
pos = wpa_supplicant_ie_txt(pos, end, mesh ? "RSN" : "WPA2",
ie2, 2 + ie2[1]);
}
- rsnxe = wpa_bss_get_ie(bss, WLAN_EID_RSNX);
+ rsnxe = wpa_bss_get_rsnxe(wpa_s, bss, NULL, false);
if (ieee802_11_rsnx_capab(rsnxe, WLAN_RSNX_CAPAB_SAE_H2E)) {
ret = os_snprintf(pos, end - pos, "[SAE-H2E]");
if (os_snprintf_error(end - pos, ret))
if (ie)
pos = wpa_supplicant_ie_txt(pos, end, "WPA", ie,
2 + ie[1]);
- ie2 = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ ie2 = wpa_bss_get_rsne(wpa_s, bss, NULL, false);
if (ie2)
pos = wpa_supplicant_ie_txt(pos, end,
mesh ? "RSN" : "WPA2", ie2,
2 + ie2[1]);
- rsnxe = wpa_bss_get_ie(bss, WLAN_EID_RSNX);
+ rsnxe = wpa_bss_get_rsnxe(wpa_s, bss, NULL, false);
if (ieee802_11_rsnx_capab(rsnxe, WLAN_RSNX_CAPAB_SAE_H2E)) {
ret = os_snprintf(pos, end - pos, "[SAE-H2E]");
if (os_snprintf_error(end - pos, ret))
return FALSE;
os_memset(&wpa_data, 0, sizeof(wpa_data));
- ie = wpa_bss_get_ie(res, WLAN_EID_RSN);
+ ie = wpa_bss_get_rsne(args->wpa_s, res, NULL, false);
if (ie && wpa_parse_wpa_ie(ie, 2 + ie[1], &wpa_data) < 0) {
dbus_set_error_const(error, DBUS_ERROR_FAILED,
"failed to parse RSN IE");
if (!(ssid->key_mgmt & WPA_KEY_MGMT_DPP) || !bss)
return 0; /* Not using DPP AKM - continue */
- rsn = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ rsn = wpa_bss_get_rsne(wpa_s, bss, ssid, false);
if (rsn && wpa_parse_wpa_ie(rsn, 2 + rsn[1], &ied) == 0 &&
!(ied.key_mgmt & WPA_KEY_MGMT_DPP))
return 0; /* AP does not support DPP AKM - continue */
(ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA));
#endif /* CONFIG_WEP */
- rsn_ie = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ rsn_ie = wpa_bss_get_rsne(wpa_s, bss, ssid, false);
if (is_6ghz_bss && !rsn_ie) {
if (debug_print)
wpa_dbg(wpa_s, MSG_DEBUG,
u8 ssid_len;
owe = wpa_bss_get_vendor_ie(bss, OWE_IE_VENDOR_TYPE);
- if (!owe || !wpa_bss_get_ie(bss, WLAN_EID_RSN))
+ if (!owe || !wpa_bss_get_rsne(wpa_s, bss, NULL, false))
return;
pos = owe + 6;
if (bss == orig_bss)
continue;
- ie = wpa_bss_get_ie(bss, WLAN_EID_RSNX);
+ ie = wpa_bss_get_rsnxe(wpa_s, bss, ssid, false);
if (!(ieee802_11_rsnx_capab(ie, WLAN_RSNX_CAPAB_SAE_PK)))
continue;
ie = wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE);
wpa = ie && ie[1];
- ie = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ ie = wpa_bss_get_rsne(wpa_s, bss, ssid, false);
wpa |= ie && ie[1];
if (ie && wpa_parse_wpa_ie_rsn(ie, 2 + ie[1], &data) == 0 &&
(data.key_mgmt & WPA_KEY_MGMT_OSEN))
osen = ie != NULL;
#ifdef CONFIG_SAE
- ie = wpa_bss_get_ie(bss, WLAN_EID_RSNX);
+ ie = wpa_bss_get_rsnxe(wpa_s, bss, ssid, false);
if (ie && ie[1] >= 1)
rsnxe_capa = ie[2];
#endif /* CONFIG_SAE */
ie = wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE);
wpa_ie_len = ie ? ie[1] : 0;
- ie = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ ie = wpa_bss_get_rsne(wpa_s, bss, NULL, false);
rsn_ie_len = ie ? ie[1] : 0;
ie = wpa_bss_get_vendor_ie(bss, OSEN_IE_VENDOR_TYPE);
if (ssid == NULL)
continue;
- rsn = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ rsn = wpa_bss_get_rsne(wpa_s, bss, NULL, false);
if (rsn == NULL)
continue;
if (wpa_s->wpa_proto & (WPA_PROTO_RSN | WPA_PROTO_OSEN)) {
const u8 *bss_rsn;
- bss_rsn = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ bss_rsn = wpa_bss_get_rsne(wpa_s, bss, ssid, false);
if (bss_rsn) {
p = bss_rsn;
len = 2 + bss_rsn[1];
bss_wpa = wpa_bss_get_vendor_ie(wpa_s->current_bss,
WPA_IE_VENDOR_TYPE);
- bss_rsn = wpa_bss_get_ie(wpa_s->current_bss, WLAN_EID_RSN);
- bss_rsnx = wpa_bss_get_ie(wpa_s->current_bss, WLAN_EID_RSNX);
+ bss_rsn = wpa_bss_get_rsne(wpa_s, wpa_s->current_bss, NULL, false);
+ bss_rsnx = wpa_bss_get_rsnxe(wpa_s, wpa_s->current_bss, NULL, false);
if (wpa_sm_set_ap_wpa_ie(wpa_s->wpa, bss_wpa,
bss_wpa ? 2 + bss_wpa[1] : 0) ||
return -1;
}
- bss_rsn = wpa_bss_get_ie(bss, WLAN_EID_RSN);
- bss_rsnx = wpa_bss_get_ie(bss, WLAN_EID_RSNX);
+ bss_rsn = wpa_bss_get_rsne(wpa_s, bss, NULL, true);
+ bss_rsnx = wpa_bss_get_rsnxe(wpa_s, bss, NULL, true);
wpa_mlo.links[i].ap_rsne = bss_rsn ? (u8 *) bss_rsn : NULL;
wpa_mlo.links[i].ap_rsne_len = bss_rsn ? 2 + bss_rsn[1] : 0;
prov_anqp = bss->anqp->hs20_osu_providers_list;
if (prov_anqp == NULL)
continue;
- ie = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ ie = wpa_bss_get_rsne(wpa_s, bss, NULL, false);
if (ie && wpa_parse_wpa_ie(ie, 2 + ie[1], &data) == 0 &&
(data.key_mgmt & WPA_KEY_MGMT_OSEN)) {
osu_ssid2 = bss->ssid;
" for connection",
MAC2STR(bss->bssid));
- if (!wpa_bss_get_ie(bss, WLAN_EID_RSN)) {
+ if (!wpa_bss_get_rsne(wpa_s, bss, NULL, false)) {
/*
* We currently support only HS 2.0 networks and those are
* required to use WPA2-Enterprise.
cred2 = interworking_credentials_available(wpa_s, bss, NULL);
if (!cred2)
continue;
- if (!wpa_bss_get_ie(bss, WLAN_EID_RSN))
+ if (!wpa_bss_get_rsne(wpa_s, bss, NULL, false))
continue;
prio = roaming_prio(wpa_s, cred2, bss);
wpa_printf(MSG_DEBUG, "Interworking: roaming_prio=%u for BSS "
if (!cred)
continue;
- if (!wpa_bss_get_ie(bss, WLAN_EID_RSN)) {
+ if (!wpa_bss_get_rsne(wpa_s, bss, NULL, false)) {
/*
* We currently support only HS 2.0 networks and those
* are required to use WPA2-Enterprise.
return;
if (oce && oce[1] >= 1 && (oce[2] & OCE_IS_STA_CFON))
return; /* STA-CFON is not required to enable PMF */
- rsne = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ rsne = wpa_bss_get_rsne(wpa_s, bss, ssid, false);
if (!rsne || wpa_parse_wpa_ie(rsne, 2 + rsne[1], &ie) < 0)
return; /* AP is not using RSN */
}
}
- rsne = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ rsne = wpa_bss_get_rsne(wpa_s, bss, NULL, false);
if (!rsne) {
wpa_printf(MSG_DEBUG, "PASN: BSS without RSNE");
return -1;
return -1;
}
- rsnxe = wpa_bss_get_ie(bss, WLAN_EID_RSNX);
+ rsnxe = wpa_bss_get_rsnxe(wpa_s, bss, NULL, false);
ssid_str_len = bss->ssid_len;
ssid_str = bss->ssid;
return NULL;
}
- rsne = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ rsne = wpa_bss_get_rsne(wpa_s, bss, NULL, false);
if (!rsne) {
wpa_printf(MSG_DEBUG, "PASN: BSS without RSNE");
return NULL;
goto fail;
}
- rsne = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ rsne = wpa_bss_get_rsne(wpa_s, bss, NULL, false);
if (!rsne) {
wpa_printf(MSG_DEBUG, "PASN: BSS without RSNE");
goto fail;
}
- rsnxe = wpa_bss_get_ie(bss, WLAN_EID_RSNX);
+ rsnxe = wpa_bss_get_rsnxe(wpa_s, bss, NULL, false);
derive_kdk = (wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_SEC_LTF_STA) &&
ieee802_11_rsnx_capab(rsnxe,
if (bss) {
const u8 *rsnxe;
- rsnxe = wpa_bss_get_ie(bss, WLAN_EID_RSNX);
+ rsnxe = wpa_bss_get_rsnxe(wpa_s, bss, ssid, false);
if (rsnxe && rsnxe[1] >= 1)
rsnxe_capa = rsnxe[2];
}
const u8 *rsn;
struct wpa_ie_data ied;
- rsn = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ rsn = wpa_bss_get_rsne(wpa_s, bss, ssid, false);
if (!rsn) {
wpa_dbg(wpa_s, MSG_DEBUG,
"SAE enabled, but target BSS does not advertise RSN");
#endif /* CONFIG_WEP */
if ((wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE) ||
- wpa_bss_get_ie(bss, WLAN_EID_RSN)) &&
+ wpa_bss_get_rsne(wpa_s, bss, ssid, false)) &&
wpa_key_mgmt_wpa(ssid->key_mgmt)) {
int try_opportunistic;
const u8 *cache_id = NULL;
wpa_dbg(wpa_s, MSG_DEBUG, "SME: FT mobility domain %02x%02x",
md[0], md[1]);
- omit_rsnxe = !wpa_bss_get_ie(bss, WLAN_EID_RSNX);
+ omit_rsnxe = !wpa_bss_get_rsnxe(wpa_s, bss, ssid, false);
if (wpa_s->sme.assoc_req_ie_len + 5 <
sizeof(wpa_s->sme.assoc_req_ie)) {
struct rsn_mdie *mdie;
wpa_s->sme.mfp = wpas_get_ssid_pmf(wpa_s, ssid);
if (wpa_s->sme.mfp != NO_MGMT_FRAME_PROTECTION) {
- const u8 *rsn = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ const u8 *rsn = wpa_bss_get_rsne(wpa_s, bss, ssid, false);
struct wpa_ie_data _ie;
if (rsn && wpa_parse_wpa_ie(rsn, 2 + rsn[1], &_ie) == 0 &&
_ie.capabilities &
if (bss) {
bss_wpa = wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE);
- bss_rsn = wpa_bss_get_ie(bss, WLAN_EID_RSN);
- bss_rsnx = wpa_bss_get_ie(bss, WLAN_EID_RSNX);
+ bss_rsn = wpa_bss_get_rsne(wpa_s, bss, ssid, false);
+ bss_rsnx = wpa_bss_get_rsnxe(wpa_s, bss, ssid, false);
bss_osen = wpa_bss_get_vendor_ie(bss, OSEN_IE_VENDOR_TYPE);
} else {
bss_wpa = bss_rsn = bss_rsnx = bss_osen = NULL;
}
if (bss && (wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE) ||
- wpa_bss_get_ie(bss, WLAN_EID_RSN)) &&
+ wpa_bss_get_rsne(wpa_s, bss, ssid, false)) &&
wpa_key_mgmt_wpa(ssid->key_mgmt)) {
int try_opportunistic;
const u8 *cache_id = NULL;
params.mgmt_frame_protection = wpas_get_ssid_pmf(wpa_s, ssid);
if (params.mgmt_frame_protection != NO_MGMT_FRAME_PROTECTION && bss) {
- const u8 *rsn = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ const u8 *rsn = wpa_bss_get_rsne(wpa_s, bss, ssid, false);
struct wpa_ie_data ie;
if (!wpas_driver_bss_selection(wpa_s) && rsn &&
wpa_parse_wpa_ie(rsn, 2 + rsn[1], &ie) == 0 &&
if (wpa_sm_set_ap_wpa_ie(wpa_s->wpa, ie, ie ? 2 + ie[1] : 0))
ret = -1;
- ie = wpa_bss_get_ie(curr, WLAN_EID_RSN);
+ ie = wpa_bss_get_rsne(wpa_s, curr, ssid, false);
if (wpa_sm_set_ap_rsn_ie(wpa_s->wpa, ie, ie ? 2 + ie[1] : 0))
ret = -1;
- ie = wpa_bss_get_ie(curr, WLAN_EID_RSNX);
+ ie = wpa_bss_get_rsnxe(wpa_s, curr, ssid, false);
if (wpa_sm_set_ap_rsnxe(wpa_s->wpa, ie, ie ? 2 + ie[1] : 0))
ret = -1;
} else {
wpa_printf(MSG_DEBUG, "WPS: AP found from BSS table");
- ie = wpa_bss_get_ie(bss, WLAN_EID_RSN);
+ ie = wpa_bss_get_rsne(wpa_s, bss, ssid, false);
if (ie && wpa_parse_wpa_ie(ie, 2 + ie[1], &adv) == 0) {
wpa2 = 1;
if (adv.pairwise_cipher & WPA_CIPHER_CCMP)