ENUM NL80211_RATE_INFO(9)
β¨ NAME β¨
enum nl80211_rate_info β bitrate information
Okay bestie, you're in section 9 of the Kernel API Manual (enum nl80211_rate_info(9)), and this whole page is literally just the rate-info roster. It's the enum that tells you how fast a station is vibing. Let's go π
π SYNOPSIS π
enum nl80211_rate_info {
__NL80211_RATE_INFO_INVALID ,
NL80211_RATE_INFO_BITRATE ,
NL80211_RATE_INFO_MCS ,
NL80211_RATE_INFO_40_MHZ_WIDTH ,
NL80211_RATE_INFO_SHORT_GI ,
NL80211_RATE_INFO_BITRATE32 ,
NL80211_RATE_INFO_VHT_MCS ,
NL80211_RATE_INFO_VHT_NSS ,
NL80211_RATE_INFO_80_MHZ_WIDTH ,
NL80211_RATE_INFO_80P80_MHZ_WIDTH ,
NL80211_RATE_INFO_160_MHZ_WIDTH ,
NL80211_RATE_INFO_10_MHZ_WIDTH ,
NL80211_RATE_INFO_5_MHZ_WIDTH ,
NL80211_RATE_INFO_HE_MCS ,
NL80211_RATE_INFO_HE_NSS ,
NL80211_RATE_INFO_HE_GI ,
NL80211_RATE_INFO_HE_DCM ,
NL80211_RATE_INFO_HE_RU_ALLOC ,
NL80211_RATE_INFO_320_MHZ_WIDTH ,
NL80211_RATE_INFO_EHT_MCS ,
NL80211_RATE_INFO_EHT_NSS ,
NL80211_RATE_INFO_EHT_GI ,
NL80211_RATE_INFO_EHT_RU_ALLOC ,
NL80211_RATE_INFO_S1G_MCS ,
NL80211_RATE_INFO_S1G_NSS ,
NL80211_RATE_INFO_1_MHZ_WIDTH ,
NL80211_RATE_INFO_2_MHZ_WIDTH ,
NL80211_RATE_INFO_4_MHZ_WIDTH ,
NL80211_RATE_INFO_8_MHZ_WIDTH ,
NL80211_RATE_INFO_16_MHZ_WIDTH ,
NL80211_RATE_INFO_UHR_MCS ,
NL80211_RATE_INFO_UHR_ELR ,
NL80211_RATE_INFO_UHR_IM ,
__NL80211_RATE_INFO_AFTER_LAST ,
NL80211_RATE_INFO_MAX
};
π§ Constants π§
Every single one, no skips, periodt π
__NL80211_RATE_INFO_INVALIDβ attribute number 0 is reserved (it's giving "don't touch", bestie)NL80211_RATE_INFO_BITRATEβ total bitrate (u16, 100kbit/s)NL80211_RATE_INFO_MCSβ mcs index for 802.11n (u8)NL80211_RATE_INFO_40_MHZ_WIDTHβ 40 MHz dualchannel bitrateNL80211_RATE_INFO_SHORT_GIβ 400ns guard intervalNL80211_RATE_INFO_BITRATE32β total bitrate (u32, 100kbit/s)NL80211_RATE_INFO_VHT_MCSβ MCS index for VHT (u8)NL80211_RATE_INFO_VHT_NSSβ number of streams in VHT (u8)NL80211_RATE_INFO_80_MHZ_WIDTHβ 80 MHz VHT rateNL80211_RATE_INFO_80P80_MHZ_WIDTHβ unused - 80+80 is treated the same as 160 for purposes of the bitratesNL80211_RATE_INFO_160_MHZ_WIDTHβ 160 MHz VHT rateNL80211_RATE_INFO_10_MHZ_WIDTHβ 10 MHz width - note that this is a legacy rate and will be reported as the actual bitrate, i.e. half the base (20 MHz) rateNL80211_RATE_INFO_5_MHZ_WIDTHβ 5 MHz width - note that this is a legacy rate and will be reported as the actual bitrate, i.e. a quarter of the base (20 MHz) rateNL80211_RATE_INFO_HE_MCSβ HE MCS index (u8, 0-11)NL80211_RATE_INFO_HE_NSSβ HE NSS value (u8, 1-8)NL80211_RATE_INFO_HE_GIβ HE guard interval identifier (u8, seeenum nl80211_he_gi)NL80211_RATE_INFO_HE_DCMβ HE DCM value (u8, 0/1)NL80211_RATE_INFO_HE_RU_ALLOCβ HE RU allocation, if not present then non-OFDMA was used (u8, seeenum nl80211_he_ru_alloc)NL80211_RATE_INFO_320_MHZ_WIDTHβ 320 MHz bitrateNL80211_RATE_INFO_EHT_MCSβ EHT MCS index (u8, 0-15)NL80211_RATE_INFO_EHT_NSSβ EHT NSS value (u8, 1-8)NL80211_RATE_INFO_EHT_GIβ EHT guard interval identifier (u8, seeenum nl80211_eht_gi)NL80211_RATE_INFO_EHT_RU_ALLOCβ EHT RU allocation, if not present then non-OFDMA was used (u8, seeenum nl80211_eht_ru_alloc)NL80211_RATE_INFO_S1G_MCSβ S1G MCS index (u8, 0-10)NL80211_RATE_INFO_S1G_NSSβ S1G NSS value (u8, 1-4)NL80211_RATE_INFO_1_MHZ_WIDTHβ 1 MHz S1G rateNL80211_RATE_INFO_2_MHZ_WIDTHβ 2 MHz S1G rateNL80211_RATE_INFO_4_MHZ_WIDTHβ 4 MHz S1G rateNL80211_RATE_INFO_8_MHZ_WIDTHβ 8 MHz S1G rateNL80211_RATE_INFO_16_MHZ_WIDTHβ 16 MHz S1G rateNL80211_RATE_INFO_UHR_MCSβ UHR MCS index (u8, 0-15, 17, 19, 20, 23) Note that the other EHT attributes (such asNL80211_RATE_INFO_EHT_NSS) are used in conjunction with this where applicableNL80211_RATE_INFO_UHR_ELRβ UHR ELR flag, which restricts NSS to 1, MCS to 0 or 1, and GI toNL80211_RATE_INFO_EHT_GI_1_6.NL80211_RATE_INFO_UHR_IMβ UHR Interference Mitigation flag__NL80211_RATE_INFO_AFTER_LASTβ internal useNL80211_RATE_INFO_MAXβ highest rate_info number currently defined
πΈ Description πΈ
So here's the tea β β these attribute types are used with NL80211_STA_INFO_TXRATE when getting information about the bitrate of a station.
There are 2 attributes for bitrate, bestie: a legacy one that represents a 16-bit value, and new one that represents a 32-bit value.
If the rate value fits into 16 bit, both attributes are reported with the same value. But if the rate is too high to fit into 16 bits (>6.5535Gbps) only 32-bit attribute is included. User space tools encouraged to use the 32-bit attribute and fall back to the 16-bit one for compatibility with older kernels. That last bit is genuinely important ngl β go 32-bit first, fall back for the old heads π
π¦ SEE ALSO π¦
Kernel file ./include/uapi/linux/nl80211.h, plus literally the entire extended nl80211 cinematic universe π β station handling(9), Frame transmission/registration support(9), Virtual interface / concurrency capabilities(9), packet coalesce support(9), WPA/WPA2 EAPOL handshake offload(9), FILS shared key authentication offload(9), SAE authentication offload(9), VLAN offload support for setting group keys and binding STAs to VLANs(9), TID configuration(9), FILS shared key crypto offload(9), Multi-Link Operation(9), OWE DH IE handling offload(9), enum nl80211_commands(9), enum nl80211_attrs(9), enum nl80211_iftype(9), enum nl80211_sta_flags(9), enum nl80211_sta_p2p_ps_status(9), struct nl80211_sta_flag_update(9), enum nl80211_he_gi(9), enum nl80211_he_ltf(9), enum nl80211_he_ru_alloc(9), enum nl80211_eht_gi(9), enum nl80211_eht_ltf(9), enum nl80211_eht_ru_alloc(9), enum nl80211_sta_bss_param(9), enum nl80211_sta_info(9), enum nl80211_tid_stats(9), enum nl80211_txq_stats(9), enum nl80211_mpath_flags(9), enum nl80211_mpath_info(9), enum nl80211_band_iftype_attr(9), enum nl80211_band_attr(9), enum nl80211_nan_phy_cap_attr(9), enum nl80211_wmm_rule(9), enum nl80211_frequency_attr(9), enum nl80211_bitrate_attr(9), enum nl80211_reg_initiator(9), enum nl80211_reg_type(9), enum nl80211_reg_rule_attr(9), enum nl80211_sched_scan_match_attr(9), enum nl80211_reg_rule_flags(9), enum nl80211_dfs_regions(9), enum nl80211_user_reg_hint_type(9), enum nl80211_survey_info(9), enum nl80211_mntr_flags(9), enum nl80211_mesh_power_mode(9), enum nl80211_meshconf_params(9), enum nl80211_mesh_setup_params(9), enum nl80211_txq_attr(9), enum nl80211_channel_type(9), enum nl80211_key_mode(9), enum nl80211_chan_width(9), enum nl80211_bss_scan_width(9), enum nl80211_bss_use_for(9), enum nl80211_bss_cannot_use_reasons(9), enum nl80211_bss(9), enum nl80211_bss_status(9), enum nl80211_auth_type(9), enum nl80211_key_type(9), enum nl80211_mfp(9), enum nl80211_key_default_types(9), enum nl80211_key_attributes(9), enum nl80211_tx_rate_attributes(9), struct nl80211_txrate_vht(9), struct nl80211_txrate_he(9), struct nl80211_txrate_eht(9), enum nl80211_band(9), enum nl80211_ps_state(9), enum nl80211_attr_cqm(9), enum nl80211_cqm_rssi_threshold_event(9), enum nl80211_tx_power_setting(9), enum nl80211_tid_config(9), enum nl80211_packet_pattern_attr(9), struct nl80211_pattern_support(9), enum nl80211_wowlan_triggers(9), TCP connection wakeup(9), struct nl80211_wowlan_tcp_data_seq(9), struct nl80211_wowlan_tcp_data_token(9), struct nl80211_wowlan_tcp_data_token_feature(9), enum nl80211_wowlan_tcp_attrs(9), struct nl80211_coalesce_rule_support(9), enum nl80211_attr_coalesce_rule(9), enum nl80211_coalesce_condition(9), enum nl80211_iface_limit_attrs(9), enum nl80211_if_combination_attrs(9), enum nl80211_plink_state(9), enum nl80211_plink_action(9), enum nl80211_rekey_data(9), enum nl80211_hidden_ssid(9), enum nl80211_sta_wme_attr(9), enum nl80211_pmksa_candidate_attr(9), enum nl80211_tdls_operation(9), enum nl80211_ap_sme_features(9), enum nl80211_feature_flags(9), enum nl80211_ext_feature_index(9), enum nl80211_probe_resp_offload_support_attr(9), enum nl80211_connect_failed_reason(9), enum nl80211_timeout_reason(9), enum nl80211_scan_flags(9), enum nl80211_acl_policy(9), enum nl80211_smps_mode(9), enum nl80211_radar_event(9), enum nl80211_dfs_state(9), enum nl80211_protocol_features(9), enum nl80211_crit_proto_id(9), enum nl80211_rxmgmt_flags(9), struct nl80211_vendor_cmd_info(9), enum nl80211_tdls_peer_capability(9), enum nl80211_sched_scan_plan(9), struct nl80211_bss_select_rssi_adjust(9), enum nl80211_bss_select_attr(9), enum nl80211_nan_function_type(9), enum nl80211_nan_publish_type(9), enum nl80211_nan_func_term_reason(9), enum nl80211_nan_func_attributes(9), enum nl80211_nan_srf_attributes(9), enum nl80211_nan_match_attributes(9), enum nl80211_nan_band_conf_attributes(9), enum nl80211_nan_conf_attributes(9), enum nl80211_external_auth_action(9), enum nl80211_ftm_responder_attributes(9), enum nl80211_preamble(9), enum nl80211_peer_measurement_type(9), enum nl80211_peer_measurement_status(9), enum nl80211_peer_measurement_req(9), enum nl80211_peer_measurement_resp(9), enum nl80211_peer_measurement_ftm_req_type(9), enum nl80211_peer_measurement_peer_attrs(9), enum nl80211_peer_measurement_attrs(9), enum nl80211_peer_measurement_ftm_capa(9), enum nl80211_peer_measurement_ftm_type_capa(9), enum nl80211_peer_measurement_ftm_req(9), enum nl80211_peer_measurement_ftm_failure_reasons(9), enum nl80211_peer_measurement_ftm_resp(9), enum nl80211_obss_pd_attributes(9), enum nl80211_bss_color_attributes(9), enum nl80211_iftype_akm_attributes(9), enum nl80211_fils_discovery_attributes(9), enum nl80211_unsol_bcast_probe_resp_attributes(9), enum nl80211_sae_pwe_mechanism(9), enum nl80211_sar_type(9), enum nl80211_sar_attrs(9), enum nl80211_sar_specs_attrs(9), enum nl80211_mbssid_config_attributes(9), enum nl80211_ap_settings_flags(9), enum nl80211_wiphy_radio_attrs(9), enum nl80211_wiphy_radio_freq_range(9), enum nl80211_s1g_short_beacon_attrs(9), enum nl80211_nan_capabilities(9), enum nl80211_nan_peer_map_attrs(9)
π That's the whole page, bestie. Rate info understood, vibe check passed, no cap.
This lil masterpiece lives in ./include/uapi/linux and it's dated October 2026 β enum nl80211_rate_info(9), out here being iconic. Mwah, study safe π«Άπ
π¦ 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