STRUCT IEEE80211_RX_STATUS(9)
β¨ NAME β¨
okay bestie, welcome to the struct ieee80211_rx_status(9) page from the Kernel API Manual π this is literally the receive status struct, and it is giving βdriver hands mac80211 a whole little receipt for every frameβ energy. no cap.
π¦ SYNOPSIS π¦
hereβs the actual shape of the struct, bestie β keep every field exactly as it is:
struct ieee80211_rx_status {
u64 mactime;
union {
u64 boottime_ns;
ktime_t ack_tx_hwtstamp;
};
u32 device_timestamp;
u32 ampdu_reference;
u32 flag;
u16 freq: 13, freq_offset: 1;
u8 enc_flags;
u8 encoding:3, bw:4;
union {
struct {
u8 he_ru:3;
u8 he_gi:2;
u8 he_dcm:1;
};
struct {
u8 ru:4;
u8 gi:2;
} eht;
struct {
u8 ru:4;
u8 gi:2;
u8 elr:1;
u8 im:1;
} uhr;
};
u8 rate_idx;
u8 nss;
u8 rx_flags;
u8 band;
u8 antenna;
s8 signal;
u8 chains;
s8 chain_signal[IEEE80211_MAX_CHAINS];
u8 zero_length_psdu_type;
u8 link_valid:1, link_id:4;
};
π«Ά Members π«Ά
mactimeβ value in microseconds of the 64-bit Time Synchronization Function (TSF) timer when the first data symbol (MPDU) arrived at the hardware β±οΈ{unnamed_union}β anonymous.boottime_nsβCLOCK_BOOTTIMEtimestamp the frame was received at. this is needed only for beacons and probe responses that update the scan cache πack_tx_hwtstampβ hardware timestamp for the ack TX in nanoseconds. only needed for Timing measurement and Fine timing measurement action frames. only reported by devices that have timestamping enabled β¨device_timestampβ arbitrary timestamp for the device.mac80211doesnβt use it, but can store it and pass it back to the driver for synchronisation πampdu_referenceβ A-MPDU reference number. it must be a different value for each A-MPDU, but the same for each subframe within one A-MPDU π₯flagβRX_FLAG_freqβ frequency the radio was tuned to when receiving this frame, in MHz. this field must be set for management frames, but isnβt strictly needed for data (other) frames β for those it only affects radiotap reporting π‘freq_offsetβfreqhas a positive offset of500Khz.enc_flagsβ uses bits fromenum mac80211_rx_encoding_flagsencodingβenum mac80211_rx_encodingbwβenum rate_info_bw{unnamed_union}β anonymous.{unnamed_struct}β anonymous.he_ruβ HE RU, fromenum nl80211_he_ru_alloche_giβ HE GI, fromenum nl80211_he_gihe_dcmβ HE DCM valueehtβ EHT specific rate information πΈeht.ruβ EHT RU, fromenum nl80211_eht_ru_alloceht.giβ EHT GI, fromenum nl80211_eht_giuhrβ UHR specific rate information πuhr.ruβ UHR RU, fromenum nl80211_eht_ru_allocuhr.giβ UHR GI, fromenum nl80211_eht_giuhr.elrβ UHR ELR MCS was useduhr.imβ UHR interference mitigation was usedrate_idxβ index of data rate into bandβs supported rates or MCS index if HT or VHT is used (RX_FLAG_HT/RX_FLAG_VHT)nssβ number of streams (VHT, HE, EHT and UHR only)rx_flagsβ internal RX flags formac80211bandβ the active band when this frame was receivedantennaβ antenna usedsignalβ signal strength when receiving this frame, either in dBm, in dB or unspecified depending on the hardware capabilities flagsIEEE80211_HW_SIGNAL_*πΆchainsβ bitmask of receive chains for which separate signal strength values were filled.chain_signalβ per-chain signal strength, in dBm (unlikesignal, doesnβt support dB or unspecified units)zero_length_psdu_typeβ radiotap type of the 0-length PSDUlink_validβ if the link which is identified bylink_idis valid. this flag is set only when connection is MLO πlink_idβ id of the link used to receive the packet. this is used along withlink_valid.
π Description π
the low-level driver should provide this information (the subset supported by hardware) to the 802.11 code with each received frame, in the skbβs control buffer (cb). periodt π
π SEE ALSO (aka the reading list) π
okay bestie you made it to the end, and now we hit the part where the manual page just. keeps. going. this is the see-also zone and it is long β but every single one of these is a real page you can pull up, so here's the whole list, zero skips, no cap π
- the whole header itself β
Kernel file ./include/net/mac80211.h - start here, for real β
Introduction(9),Calling mac80211 from interrupts(9),Warning(9),Frame format(9),mac80211 workqueue(9),mac80211 software tx queueing(9),HW timestamping(9) - queues, channels & the chanctx crowd β
enum ieee80211_max_queues(9),enum ieee80211_ac_numbers(9),struct ieee80211_tx_queue_params(9),enum ieee80211_chanctx_change(9),struct ieee80211_chan_req(9),struct ieee80211_chanctx_conf(9),enum ieee80211_chanctx_switch_mode(9),struct ieee80211_vif_chanctx_switch(9) - bss change + the event fam β
enum ieee80211_bss_change(9),enum ieee80211_event_type(9),enum ieee80211_rssi_event_data(9),struct ieee80211_rssi_event(9),enum ieee80211_mlme_event_data(9),enum ieee80211_mlme_event_status(9),struct ieee80211_mlme_event(9),struct ieee80211_ba_event(9),struct ieee80211_event(9) - the bss_conf extended universe β
struct ieee80211_mu_group_data(9),struct ieee80211_ftm_responder_params(9),struct ieee80211_fils_discovery(9),struct ieee80211_parsed_tpe(9),struct ieee80211_bss_npca_params(9),struct ieee80211_bss_conf(9) - NAN things β
struct ieee80211_nan_channel(9),struct ieee80211_nan_peer_map(9),struct ieee80211_nan_peer_sched(9) - tx info & flags energy β
enum mac80211_tx_info_flags(9),enum mac80211_tx_control_flags(9),enum mac80211_tx_status_flags(9),enum mac80211_rate_control_flags(9),struct ieee80211_tx_rate(9),struct ieee80211_tx_info(9),struct ieee80211_tx_status(9),struct ieee80211_scan_ies(9),ieee80211_tx_info_clear_status(9) - rx side of things (hi, that's us) β
enum mac80211_rx_flags(9),enum mac80211_rx_encoding_flags(9) - conf & vif core β
enum ieee80211_conf_flags(9),enum ieee80211_conf_changed(9),enum ieee80211_smps_mode(9),struct ieee80211_conf(9),struct ieee80211_channel_switch(9),enum ieee80211_vif_flags(9),enum ieee80211_offload_flags(9),struct ieee80211_eml_params(9),struct ieee80211_nan_sched_cfg(9),struct ieee80211_vif_cfg(9),struct ieee80211_neg_ttlm(9),enum ieee80211_neg_ttlm_res(9),struct ieee80211_vif(9) - vif helper besties β
ieee80211_vif_usable_links(9),ieee80211_vif_is_mld(9),ieee80211_vif_link_active(9),wdev_to_ieee80211_vif(9),ieee80211_vif_to_wdev(9) - keys & sta structs β
enum ieee80211_key_flags(9),struct ieee80211_key_conf(9),struct ieee80211_key_seq(9),enum set_key_cmd(9),enum ieee80211_sta_state(9),enum ieee80211_sta_rx_bandwidth(9),struct ieee80211_sta_rates(9),struct ieee80211_sta_txpwr(9),struct ieee80211_sta_aggregates(9),struct ieee80211_link_sta(9),struct ieee80211_sta(9),enum sta_notify_cmd(9),struct ieee80211_tx_control(9),struct ieee80211_txq(9) - hw structs & the SET_ macros β
enum ieee80211_hw_flags(9),struct ieee80211_hw(9),struct ieee80211_scan_request(9),struct ieee80211_tdls_ch_sw_params(9),wiphy_to_ieee80211_hw(9),SET_IEEE80211_DEV(9),SET_IEEE80211_PERM_ADDR(9),ieee80211_free_txskb(9),ieee80211_purge_tx_queue(9) - the concept pages, iconic β
Hardware crypto acceleration(9),Powersave support(9),Beacon filter support(9),Spatial multiplexing power save(9),Frame filtering(9),AP support for powersaving clients(9),HW queue control(9) - filter / ampdu / ops territory β
enum ieee80211_filter_flags(9),enum ieee80211_ampdu_mlme_action(9),struct ieee80211_ampdu_params(9),enum ieee80211_frame_release_type(9),enum ieee80211_rate_control_changed(9),enum ieee80211_roc_type(9),enum ieee80211_reconfig_type(9),struct ieee80211_prep_tx_info(9),struct ieee80211_ops(9) - alloc / register / led era β
ieee80211_alloc_hw_nm(9),ieee80211_alloc_hw(9),ieee80211_register_hw(9),struct ieee80211_tpt_blink(9),enum ieee80211_tpt_led_trigger_flags(9),ieee80211_get_tx_led_name(9),ieee80211_get_rx_led_name(9),ieee80211_get_assoc_led_name(9),ieee80211_get_radio_led_name(9),ieee80211_create_tpt_led_trigger(9),ieee80211_unregister_hw(9),ieee80211_free_hw(9),ieee80211_restart_hw(9) - rx entry points & powersave β
ieee80211_rx_list(9),ieee80211_rx_napi(9),ieee80211_rx(9),ieee80211_rx_irqsafe(9),ieee80211_rx_ni(9),ieee80211_sta_ps_transition(9),ieee80211_sta_ps_transition_ni(9),ieee80211_sta_pspoll(9),ieee80211_sta_uapsd_trigger(9),ieee80211_sta_set_buffered(9) - tx rates & tx status β
ieee80211_get_tx_rates(9),ieee80211_tx_rate_update(9),ieee80211_tx_status_skb(9),ieee80211_tx_status_ext(9),ieee80211_tx_status_noskb(9),ieee80211_tx_status_ni(9),ieee80211_tx_status_irqsafe(9),ieee80211_report_low_ack(9) - beacon / csa / color change β
struct ieee80211_mutable_offsets(9),ieee80211_beacon_get_template(9),ieee80211_beacon_get_template_ema_index(9),struct ieee80211_ema_beacons(9),ieee80211_beacon_get_template_ema_list(9),ieee80211_beacon_free_ema_list(9),ieee80211_beacon_get_tim(9),ieee80211_beacon_get(9),ieee80211_beacon_update_cntdwn(9),ieee80211_beacon_set_cntdwn(9),ieee80211_csa_finish(9),ieee80211_beacon_cntdwn_is_complete(9),ieee80211_color_change_finish(9) - frame builders β
ieee80211_proberesp_get(9),ieee80211_pspoll_get(9),ieee80211_nullfunc_get(9),ieee80211_probereq_get(9),ieee80211_rts_get(9),ieee80211_rts_duration(9),ieee80211_ctstoself_get(9),ieee80211_ctstoself_duration(9),ieee80211_generic_frame_duration(9),ieee80211_get_buffered_bc(9) - tkip + key seq + rekey β
ieee80211_get_tkip_p1k_iv(9),ieee80211_get_tkip_p1k(9),ieee80211_get_tkip_rx_p1k(9),ieee80211_get_tkip_p2k(9),ieee80211_tkip_add_iv(9),ieee80211_get_key_rx_seq(9),ieee80211_set_key_rx_seq(9),ieee80211_gtk_rekey_add(9),ieee80211_gtk_rekey_notify(9),ieee80211_key_mic_failure(9),ieee80211_key_replay(9) - queue control β
ieee80211_wake_queue(9),ieee80211_stop_queue(9),ieee80211_queue_stopped(9),ieee80211_stop_queues(9),ieee80211_wake_queues(9) - scan + iteration macros β
ieee80211_scan_completed(9),ieee80211_sched_scan_results(9),ieee80211_sched_scan_stopped(9),enum ieee80211_interface_iteration_flags(9),ieee80211_iterate_interfaces(9),ieee80211_iterate_active_interfaces(9),ieee80211_iterate_active_interfaces_atomic(9),for_each_interface(9),for_each_active_interface(9),ieee80211_iterate_active_interfaces_mtx(9),ieee80211_iterate_stations_atomic(9),for_each_station(9),ieee80211_iterate_stations_mtx(9) - work queueing + ba sessions + sta helpers β
ieee80211_queue_work(9),ieee80211_queue_delayed_work(9),ieee80211_refresh_tx_agg_session_timer(9),ieee80211_start_tx_ba_session(9),ieee80211_start_tx_ba_cb_irqsafe(9),ieee80211_stop_tx_ba_session(9),ieee80211_stop_tx_ba_cb_irqsafe(9),ieee80211_find_sta(9),ieee80211_find_sta_by_ifaddr(9),ieee80211_find_sta_by_link_addrs(9),ieee80211_sta_block_awake(9),ieee80211_sta_eosp(9),ieee80211_send_eosp_nullfunc(9),ieee80211_sta_recalc_aggregates(9),ieee80211_sta_register_airtime(9),ieee80211_txq_airtime_check(9),ieee80211_txq_aql_pending(9) - iteration, disconnect & notify drama β
ieee80211_iter_keys(9),ieee80211_iter_keys_rcu(9),ieee80211_iter_chan_contexts_atomic(9),ieee80211_iter_chan_contexts_mtx(9),ieee80211_ap_probereq_get(9),ieee80211_beacon_loss(9),ieee80211_connection_loss(9),ieee80211_disconnect(9),ieee80211_resume_disconnect(9),ieee80211_hw_restart_disconnect(9),ieee80211_cqm_rssi_notify(9),ieee80211_cqm_beacon_loss_notify(9),ieee80211_radar_detected(9),ieee80211_chswitch_done(9),ieee80211_channel_switch_disconnect(9),ieee80211_request_smps(9),ieee80211_ready_on_channel(9),ieee80211_remain_on_channel_expired(9),ieee80211_stop_rx_ba_session(9),ieee80211_mark_rx_ba_filtered_frames(9),ieee80211_send_bar(9),ieee80211_manage_rx_ba_offl(9),ieee80211_start_rx_ba_session_offl(9),ieee80211_stop_rx_ba_session_offl(9),ieee80211_rx_ba_timer_expired(9) - rate control + caps + airtime + noa + tid β
struct ieee80211_tx_rate_control(9),enum rate_control_capabilities(9),rate_control_set_rates(9),ieee80211_get_he_iftype_cap_vif(9),ieee80211_get_he_6ghz_capa_vif(9),ieee80211_get_eht_iftype_cap_vif(9),ieee80211_get_uhr_iftype_cap_vif(9),ieee80211_update_mu_groups(9),ieee80211_ave_rssi(9),ieee80211_calculate_rx_timestamp(9),ieee80211_report_wowlan_wakeup(9),ieee80211_tx_prepare_skb(9),ieee80211_parse_tx_radiotap(9),struct ieee80211_noa_data(9),ieee80211_parse_p2p_noa(9),ieee80211_update_p2p_noa(9),ieee80211_tdls_oper_request(9),ieee80211_reserve_tid(9),ieee80211_unreserve_tid(9) - txq scheduling squad β
ieee80211_tx_dequeue(9),ieee80211_tx_dequeue_ni(9),ieee80211_handle_wake_tx_queue(9),ieee80211_next_txq(9),ieee80211_txq_schedule_start(9),ieee80211_schedule_txq(9),ieee80211_return_txq(9),ieee80211_txq_may_transmit(9),ieee80211_txq_get_depth(9) - final stretch, the deep cuts β
ieee80211_nan_func_terminated(9),ieee80211_nan_func_match(9),ieee80211_nan_sched_update_done(9),ieee80211_nan_cluster_joined(9),ieee80211_nan_try_evacuate(9),ieee80211_calc_rx_airtime(9),ieee80211_calc_tx_airtime(9),ieee80211_get_fils_discovery_tmpl(9),ieee80211_get_unsol_bcast_probe_resp_tmpl(9),ieee80211_obss_color_collision_notify(9),ieee80211_is_tx_data(9),ieee80211_set_active_links(9),ieee80211_set_active_links_async(9),ieee80211_send_teardown_neg_ttlm(9),ieee80211_chan_width_to_rx_bw(9),ieee80211_prepare_rx_omi_bw(9),ieee80211_finalize_rx_omi_bw(9),ieee80211_vif_nan_started(9),ieee80211_encrypt_tx_skb(9)
ngl that was a lot of cross-references, so if you read all of them you're genuinely the main character of the kernel docs ππ«Ά
and that's a wrap on struct ieee80211_rx_status(9) bestie!! the whole thing lives in ./include/net, and this particular page is dated October 2026 β so go forth, cite it, and slay your driver code β¨ππ
π¦ 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