struct ieee80211_vht_capabilities *vht_capabilities;
struct ieee80211_he_capabilities *he_capabilities;
size_t he_capab_len;
+ struct ieee80211_he_6ghz_band_cap *he_6ghz_band_capabilities;
u8 qos_info;
peer->vht_capabilities = NULL;
os_free(peer->he_capabilities);
peer->he_capabilities = NULL;
+ os_free(peer->he_6ghz_band_capabilities);
+ peer->he_6ghz_band_capabilities = NULL;
os_free(peer->ext_capab);
peer->ext_capab = NULL;
os_free(peer->supp_channels);
}
+static int copy_peer_he_6ghz_band_capab(const struct wpa_eapol_ie_parse *kde,
+ struct wpa_tdls_peer *peer)
+{
+ if (!kde->he_6ghz_capabilities) {
+ wpa_printf(MSG_DEBUG,
+ "TDLS: No HE 6 GHz band capabilities received");
+ return 0;
+ }
+
+ if (!peer->he_6ghz_band_capabilities) {
+ peer->he_6ghz_band_capabilities =
+ os_zalloc(sizeof(struct ieee80211_he_6ghz_band_cap));
+ if (peer->he_6ghz_band_capabilities == NULL)
+ return -1;
+ }
+
+ os_memcpy(peer->he_6ghz_band_capabilities, kde->he_6ghz_capabilities,
+ sizeof(struct ieee80211_he_6ghz_band_cap));
+
+ wpa_hexdump(MSG_DEBUG, "TDLS: Peer 6 GHz band HE capabilities",
+ peer->he_6ghz_band_capabilities,
+ sizeof(struct ieee80211_he_6ghz_band_cap));
+
+ return 0;
+}
+
+
static int copy_peer_ext_capab(const struct wpa_eapol_ie_parse *kde,
struct wpa_tdls_peer *peer)
{
peer->vht_capabilities,
peer->he_capabilities,
peer->he_capab_len,
+ peer->he_6ghz_band_capabilities,
peer->qos_info, peer->wmm_capable,
peer->ext_capab, peer->ext_capab_len,
peer->supp_channels,
goto error;
if (copy_peer_vht_capab(&kde, peer) < 0 ||
- copy_peer_he_capab(&kde, peer) < 0)
+ copy_peer_he_capab(&kde, peer) < 0 ||
+ copy_peer_he_6ghz_band_capab(&kde, peer) < 0)
goto error;
if (copy_peer_ext_capab(&kde, peer) < 0)
"TDLS setup - send own request");
peer->initiator = 1;
wpa_sm_tdls_peer_addset(sm, peer->addr, 1, 0, 0, NULL, 0, NULL,
- NULL, NULL, 0, 0, 0, NULL, 0, NULL, 0,
- NULL, 0);
+ NULL, NULL, 0, NULL, 0, 0, NULL, 0,
+ NULL, 0, NULL, 0);
if (wpa_tdls_send_tpk_m1(sm, peer) == -2) {
peer = NULL;
goto error;
goto error;
if (copy_peer_vht_capab(&kde, peer) < 0 ||
- copy_peer_he_capab(&kde, peer) < 0)
+ copy_peer_he_capab(&kde, peer) < 0 ||
+ copy_peer_he_6ghz_band_capab(&kde, peer) < 0)
goto error;
if (copy_peer_ext_capab(&kde, peer) < 0)
/* add the peer to the driver as a "setup in progress" peer */
if (wpa_sm_tdls_peer_addset(sm, peer->addr, 1, 0, 0, NULL, 0, NULL,
- NULL, NULL, 0, 0, 0, NULL, 0, NULL, 0,
+ NULL, NULL, 0, NULL, 0, 0, NULL, 0, NULL, 0,
NULL, 0)) {
wpa_tdls_disable_peer_link(sm, peer);
return -1;
const struct ieee80211_vht_capabilities *vht_capab,
const struct ieee80211_he_capabilities *he_capab,
size_t he_capab_len,
+ const struct ieee80211_he_6ghz_band_cap *he_6ghz_capab,
u8 qosinfo, int wmm, const u8 *ext_capab,
size_t ext_capab_len, const u8 *supp_channels,
size_t supp_channels_len, const u8 *supp_oper_classes,
supp_rates_len, ht_capab,
vht_capab,
he_capab, he_capab_len,
- qosinfo, wmm,
+ he_6ghz_capab, qosinfo, wmm,
ext_capab, ext_capab_len,
supp_channels,
supp_channels_len,
const struct ieee80211_vht_capabilities *vht_capab,
const struct ieee80211_he_capabilities *he_capab,
size_t he_capab_len,
+ const struct ieee80211_he_6ghz_band_cap *he_6ghz_he_capab,
u8 qosinfo, int wmm, const u8 *ext_capab, size_t ext_capab_len,
const u8 *supp_channels, size_t supp_channels_len,
const u8 *supp_oper_classes, size_t supp_oper_classes_len)
params.vht_capabilities = vht_capab;
params.he_capab = he_capab;
params.he_capab_len = he_capab_len;
+ params.he_6ghz_capab = he_6ghz_he_capab;
params.qosinfo = qosinfo;
params.listen_interval = 0;
params.supp_rates = supp_rates;