STRUCT IEEE80211_EHT_MCS_NSS_SUPP_20MHZ_ONLY(9)
bestie pull up a chair because we're in the Kernel API Manual (section 9, kernel API land) and today's main character is the lil struct that tells everyone how many spatial streams an EHT 20MHz-only station can handle per MCS. no cap, it's tiny but it matters. π
πΈ NAME πΈ
struct ieee80211_eht_mcs_nss_supp_20mhz_only β literally the "EHT 20MHz only station max supported NSS for per MCS" situation. that's the whole vibe. π
β¨ SYNOPSIS β¨
okay so here's the shape of it, exact, character for character:
struct ieee80211_eht_mcs_nss_supp_20mhz_only {
union {
struct {
u8 rx_tx_mcs7_max_nss;
u8 rx_tx_mcs9_max_nss;
u8 rx_tx_mcs11_max_nss;
u8 rx_tx_mcs13_max_nss;
};
u8 rx_tx_max_nss[4];
};
};
look at her. four little u8s living inside a union with an array. iconic. π
π¦ MEMBERS π¦
bestie, some of these members are straight-up anonymous, so let's go through them one by one, no skipping:
{unnamed_union}β anonymous. yes, she has no name. mysterious. main character energy. π{unnamed_struct}β also anonymous. also mysterious. we love a duo. β¨rx_tx_mcs7_max_nssβ this one indicates the maximum number of spatial streams supported for reception and the maximum number of spatial streams supported for transmission for MCS 0 - 7. both. at once. multitasking queen. πrx_tx_mcs9_max_nssβ same deal but for MCS 8 - 9: max spatial streams for reception and max spatial streams for transmission. π«rx_tx_mcs11_max_nssβ that exact same "max streams for Rx and max streams for Tx" energy, but for MCS 10 - 11. πrx_tx_mcs13_max_nssβ and again for MCS 12 - 13. the pattern ate, ngl. π₯rx_tx_max_nssβ array of the previous fields for easier loop access. she's the same data, just lined up so you can loop through her. convenient slay. π
π DESCRIPTION π
so the actual decoding rules, and you need these fr fr:
For each field below, bits 0 - 3 indicate the maximal number of spatial streams for Rx, and bits 4 - 7 indicate the maximal number of spatial streams for Tx.
that's it, that's the bit layout β low nibble is Rx, high nibble is Tx. don't mix them up, bestie, or your stream counts will be giving chaos. π
π SEE ALSO π
the whole extended friend group, all of them, in order:
- Kernel file
./include/linux/ieee80211-eht.h struct ieee80211_ttlm_elem(9)struct ieee80211_eht_mcs_nss_supp_bw(9)struct ieee80211_eht_cap_elem_fixed(9)struct ieee80211_eht_cap_elem(9)struct ieee80211_eht_operation(9)struct ieee80211_eht_operation_info(9)ieee80211_mle_common_size(9)ieee80211_mle_get_link_id(9)ieee80211_mle_get_bss_param_ch_cnt(9)ieee80211_mle_get_eml_med_sync_delay(9)ieee80211_mle_get_eml_cap(9)ieee80211_mle_get_mld_capa_op(9)ieee80211_mle_get_ext_mld_capa_op(9)ieee80211_mle_get_enh_crit_upd_info(9)ieee80211_mle_get_mld_id(9)ieee80211_mle_size_ok(9)ieee80211_mle_type_ok(9)ieee80211_mle_basic_sta_prof_size_ok(9)ieee80211_mle_basic_sta_prof_bss_param_ch_cnt(9)ieee80211_mle_basic_sta_prof_enh_crit_upd(9)ieee80211_mle_reconf_sta_prof_size_ok(9)ieee80211_emlsr_pad_delay_in_us(9)ieee80211_emlsr_trans_delay_in_us(9)ieee80211_emlmr_pad_delay_in_us(9)ieee80211_emlmr_trans_delay_in_us(9)ieee80211_eml_trans_timeout_in_us(9)
and that's the page, bestie π«Ά this one lives under ./include/linux, dated October 2026, and it's filed as struct ieee8...p_20mhz_only(9) in the manual β yes the name got truncated in the header, it's giving "ran out of character limit", but that's just how she's indexed. go forth and set your NSS bits correctly. β π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms