net80211: add ieee80211_add_vhtcap_ch()

Add an implementation of ieee80211_add_vhtcap() which works based on
information derived from the vap (and possibly channel/band but we do
not support that yet in net80211).  This is needed for scans request
information in LinuxKPI at times before we have a BSS.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
Reviewed by:	adrian, cc
Differential Revision: https://reviews.freebsd.org/D42422
This commit is contained in:
Bjoern A. Zeeb 2023-10-26 20:55:59 +00:00
parent 562adbe1d3
commit 6c3ae01cc7
2 changed files with 29 additions and 0 deletions

View file

@ -707,6 +707,33 @@ ieee80211_add_vhtcap(uint8_t *frm, struct ieee80211_node *ni)
return (frm); return (frm);
} }
/*
* Non-associated probe requests. Add VHT capabilities based on
* the current channel configuration. No BSS yet.
*/
uint8_t *
ieee80211_add_vhtcap_ch(uint8_t *frm, struct ieee80211vap *vap,
struct ieee80211_channel *c)
{
struct ieee80211_vht_cap *vhtcap;
memset(frm, 0, 2 + sizeof(*vhtcap));
frm[0] = IEEE80211_ELEMID_VHT_CAP;
frm[1] = sizeof(*vhtcap);
frm += 2;
/* 32-bit VHT capability */
ADDWORD(frm, vap->iv_vht_cap.vht_cap_info);
/* supp_mcs */
ADDSHORT(frm, vap->iv_vht_cap.supp_mcs.rx_mcs_map);
ADDSHORT(frm, vap->iv_vht_cap.supp_mcs.rx_highest);
ADDSHORT(frm, vap->iv_vht_cap.supp_mcs.tx_mcs_map);
ADDSHORT(frm, vap->iv_vht_cap.supp_mcs.tx_highest);
return (frm);
}
static uint8_t static uint8_t
ieee80211_vht_get_chwidth_ie(struct ieee80211_channel *c) ieee80211_vht_get_chwidth_ie(struct ieee80211_channel *c)
{ {

View file

@ -50,6 +50,8 @@ void ieee80211_vht_node_leave(struct ieee80211_node *ni);
uint8_t * ieee80211_add_vhtcap(uint8_t *frm, struct ieee80211_node *); uint8_t * ieee80211_add_vhtcap(uint8_t *frm, struct ieee80211_node *);
uint8_t * ieee80211_add_vhtinfo(uint8_t *frm, struct ieee80211_node *); 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 *, void ieee80211_vht_update_cap(struct ieee80211_node *,
const uint8_t *, const uint8_t *); const uint8_t *, const uint8_t *);