git: 4e78b9b5afe9 - main - net80211: fix VHT node setup in hostap mode

From: Adrian Chadd <adrian_at_FreeBSD.org>
Date: Wed, 16 Jul 2025 15:21:50 UTC
The branch main has been updated by adrian:

URL: https://cgit.FreeBSD.org/src/commit/?id=4e78b9b5afe9c1ebe93ccd8a0767fda39b26da4a

commit 4e78b9b5afe9c1ebe93ccd8a0767fda39b26da4a
Author:     Adrian Chadd <adrian@FreeBSD.org>
AuthorDate: 2025-06-11 04:59:30 +0000
Commit:     Adrian Chadd <adrian@FreeBSD.org>
CommitDate: 2025-07-16 15:12:03 +0000

    net80211: fix VHT node setup in hostap mode
    
    Way back in 2017 I wrote the initial VHT hostap support, and then
    added a NULL check here to stop it from panicing.  However, there
    is no VHTINFO IE in an ASSOC_REQ management frame.  Thus, the node
    would never have VHT state initialised.
    
    This mirrors what HT node setup does (which again doesn't have
    HTINFO IE's in an ASSOC_REQ frame), the upgrade will happen once
    the exchange completes.
    
    Fixes: 2023566223a4020d832bd4e25dc7dadfd660b836
    Differential Revision:  https://reviews.freebsd.org/D50787
---
 sys/net80211/ieee80211_hostap.c | 7 ++-----
 sys/net80211/ieee80211_vht.c    | 4 +---
 sys/net80211/ieee80211_vht.h    | 3 +--
 3 files changed, 4 insertions(+), 10 deletions(-)

diff --git a/sys/net80211/ieee80211_hostap.c b/sys/net80211/ieee80211_hostap.c
index c5a478533313..9074878e17e4 100644
--- a/sys/net80211/ieee80211_hostap.c
+++ b/sys/net80211/ieee80211_hostap.c
@@ -2214,12 +2214,9 @@ hostap_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0,
 
 		/* VHT */
 		if (IEEE80211_IS_CHAN_VHT(ni->ni_chan) &&
-		    vhtcap != NULL &&
-		    vhtinfo != NULL) {
-			/* XXX TODO; see below */
-			net80211_vap_printf(vap, "%s: VHT TODO!\n", __func__);
+		    vhtcap != NULL) {
 			ieee80211_vht_node_init(ni);
-			ieee80211_vht_update_cap(ni, vhtcap, vhtinfo);
+			ieee80211_vht_update_cap(ni, vhtcap);
 		} else if (ni->ni_flags & IEEE80211_NODE_VHT)
 			ieee80211_vht_node_cleanup(ni);
 
diff --git a/sys/net80211/ieee80211_vht.c b/sys/net80211/ieee80211_vht.c
index e91977f1ef98..de0b691d4d2a 100644
--- a/sys/net80211/ieee80211_vht.c
+++ b/sys/net80211/ieee80211_vht.c
@@ -838,12 +838,10 @@ ieee80211_add_vhtinfo(uint8_t *frm, struct ieee80211_node *ni)
 }
 
 void
-ieee80211_vht_update_cap(struct ieee80211_node *ni, const uint8_t *vhtcap_ie,
-    const uint8_t *vhtop_ie)
+ieee80211_vht_update_cap(struct ieee80211_node *ni, const uint8_t *vhtcap_ie)
 {
 
 	ieee80211_parse_vhtcap(ni, vhtcap_ie);
-	ieee80211_parse_vhtopmode(ni, vhtop_ie);
 }
 
 static struct ieee80211_channel *
diff --git a/sys/net80211/ieee80211_vht.h b/sys/net80211/ieee80211_vht.h
index 2964de63c343..a1529df4a85b 100644
--- a/sys/net80211/ieee80211_vht.h
+++ b/sys/net80211/ieee80211_vht.h
@@ -52,8 +52,7 @@ uint8_t *	ieee80211_add_vhtinfo(uint8_t *frm, struct ieee80211_node *);
 uint8_t *ieee80211_add_vhtcap_ch(uint8_t *, struct ieee80211vap *,
     struct ieee80211_channel *);
 
-void	ieee80211_vht_update_cap(struct ieee80211_node *,
-	    const uint8_t *, const uint8_t *);
+void	ieee80211_vht_update_cap(struct ieee80211_node *, const uint8_t *);
 
 struct ieee80211_channel *
 	ieee80211_vht_adjust_channel(struct ieee80211com *,