[PATCH 03/15] NAN: Process HE element from peer and report them in own frames
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Thu Oct 8 09:05:12 PDT 2026
From: Benjamin Berg <benjamin.berg at intel.com>
The only part left for NAN HE support is parsing peer capabilities when
adding the NAN peer station and including the own HE capabilities in the
relevant frames. Add both parts.
Signed-off-by: Benjamin Berg <benjamin.berg at intel.com>
---
wpa_supplicant/nan_supplicant.c | 36 ++++++++++++++++++++++++++++++++-
1 file changed, 35 insertions(+), 1 deletion(-)
diff --git a/wpa_supplicant/nan_supplicant.c b/wpa_supplicant/nan_supplicant.c
index 173d2a0ced..bd7367d1b8 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -480,6 +480,10 @@ static int wpas_nan_configure_nmi_sta_capa(struct wpa_supplicant *wpa_s,
ie = get_ie(elems, elems_len, WLAN_EID_VHT_CAP);
sta_params.vht_capabilities = ie ? (const void *) (ie + 2) : NULL;
+ ie = get_ie_ext(elems, elems_len, WLAN_EID_EXT_HE_CAPABILITIES);
+ sta_params.he_capab = ie ? (const void *)(ie + 3) : NULL;
+ sta_params.he_capab_len = ie ? ie[1] - 1 : 0;
+
return wpa_drv_sta_add(wpa_s, &sta_params);
}
@@ -2646,6 +2650,7 @@ static struct wpabuf * wpas_nan_build_ndp_elems(struct wpa_supplicant *wpa_s)
{
struct ieee80211_ht_capabilities *ht_cap;
struct ieee80211_vht_capabilities *vht_cap;
+ u8 he_mcs_nss_size = 0, he_ppet_size = 0;
size_t len;
struct wpabuf *buf;
@@ -2654,6 +2659,19 @@ static struct wpabuf * wpas_nan_build_ndp_elems(struct wpa_supplicant *wpa_s)
if (wpa_s->nan_capa.vht_valid)
len += 2 + sizeof(struct ieee80211_vht_capabilities);
+ if (wpa_s->nan_capa.vht_valid && wpa_s->nan_capa.he_valid) {
+ he_mcs_nss_size =
+ ieee80211_he_mcs_set_size(
+ wpa_s->nan_capa.he_capab.phy_cap);
+ he_ppet_size =
+ ieee80211_he_ppet_size(
+ wpa_s->nan_capa.he_capab.ppet[0],
+ wpa_s->nan_capa.he_capab.phy_cap);
+
+ len += 3 + IEEE80211_HE_CAPAB_MIN_LEN + he_mcs_nss_size +
+ he_ppet_size;
+ }
+
buf = wpabuf_alloc(len);
if (!buf)
return NULL;
@@ -2678,7 +2696,23 @@ static struct wpabuf * wpas_nan_build_ndp_elems(struct wpa_supplicant *wpa_s)
wpa_s->nan_capa.vht_mcs_set,
sizeof(vht_cap->vht_supported_mcs_set));
- /* TODO: Add HE capabilities */
+ if (!wpa_s->nan_capa.he_valid)
+ return buf;
+
+ wpabuf_put_u8(buf, WLAN_EID_EXTENSION);
+ wpabuf_put_u8(buf,
+ 1 + IEEE80211_HE_CAPAB_MIN_LEN + he_mcs_nss_size +
+ he_ppet_size);
+ wpabuf_put_u8(buf, WLAN_EID_EXT_HE_CAPABILITIES);
+ wpabuf_put_data(buf, wpa_s->nan_capa.he_capab.mac_cap,
+ sizeof(wpa_s->nan_capa.he_capab.mac_cap));
+ wpabuf_put_data(buf, wpa_s->nan_capa.he_capab.phy_cap,
+ sizeof(wpa_s->nan_capa.he_capab.phy_cap));
+ wpabuf_put_data(buf, &wpa_s->nan_capa.he_capab.mcs,
+ he_mcs_nss_size);
+ wpabuf_put_data(buf, &wpa_s->nan_capa.he_capab.ppet,
+ he_ppet_size);
+
return buf;
}
--
2.53.0
More information about the Hostap
mailing list