STRUCT MVM_STATISTICS_RX_NON_PHY(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct mvm_statistics_rx_non_phy(9) β€” a lil' Kernel API Manual moment

okay so bestie, welcome to section 9 of the kernel API manual, and today's main character is struct mvm_statistics_rx_non_phy β€” literally the non-PHY RX statistics struct. yes that's a mouthful, no I will not be shortening it, we respect the full name here 🫢


✨ NAME ✨

struct mvm_statistics_rx_non_phy β€” non-PHY RX statistics. that's it, that's the whole vibe check. it's a bag of counters that tells you what the radio heard when it wasn't busy being all PHY about it πŸ’–


🌸 SYNOPSIS 🌸

struct mvm_statistics_rx_non_phy {
    __le32 bogus_cts;
    __le32 bogus_ack;
    __le32 non_channel_beacons;
    __le32 channel_beacons;
    __le32 num_missed_bcon;
    __le32 adc_rx_saturation_time;
    __le32 ina_detection_search_time;
    __le32 beacon_silence_rssi_a;
    __le32 beacon_silence_rssi_b;
    __le32 beacon_silence_rssi_c;
    __le32 interference_data_flag;
    __le32 channel_load;
    __le32 beacon_rssi_a;
    __le32 beacon_rssi_b;
    __le32 beacon_rssi_c;
    __le32 beacon_energy_a;
    __le32 beacon_energy_b;
    __le32 beacon_energy_c;
    __le32 num_bt_kills;
    __le32 mac_id;
};

look at her. twenty __le32 fields, all little-endian, all iconic, all accounted for πŸ”₯


πŸ¦‹ MEMBERS πŸ¦‹

twenty members, zero skips, let's go member by member because we do NOT leave anyone out:

  • bogus_cts β€” CTS received when you weren't even expecting a CTS. rude. unexpected. counted anyway πŸ’€
  • bogus_ack β€” ACK received when not expecting an ACK. same energy, different frame.
  • non_channel_beacons β€” beacons that have our bss id but aren't on our serving channel. so close and yet so far 😭
  • channel_beacons β€” beacons with our bss id and sitting right in our serving channel. these are the good ones πŸ‘‘
  • num_missed_bcon β€” number of missed beacons. ngl this one hurts to look at.
  • adc_rx_saturation_time β€” count, in 0.8us units, of the time the ADC was in saturation. yes, 0.8us. not 1us. remember that. ✨
  • ina_detection_search_time β€” total time (in 0.8us) spent searching for INA. same unit, keep it consistent bestie πŸŽ€
  • beacon_silence_rssi_a β€” RSSI silence after beacon frame. antenna A, doing her thing πŸ’œ
  • beacon_silence_rssi_b β€” RSSI silence after beacon frame. antenna B, same energy 🌸
  • beacon_silence_rssi_c β€” RSSI silence after beacon frame. antenna C, completing the trio πŸŽ€
  • interference_data_flag β€” a flag for interference data availability: it's 1 when the data is available. literally just tell me if you have the data, king πŸ™ˆ
  • channel_load β€” counts RX Enable time in uSec. note: uSec here, 0.8us up there. do not mix them up fr fr
  • beacon_rssi_a β€” beacon RSSI on antenna A πŸ“‘
  • beacon_rssi_b β€” beacon RSSI on antenna B πŸ“‘
  • beacon_rssi_c β€” beacon RSSI on antenna C πŸ“‘
  • beacon_energy_a β€” beacon energy on antenna A ⚑
  • beacon_energy_b β€” beacon energy on antenna B ⚑
  • beacon_energy_c β€” beacon energy on antenna C ⚑
  • num_bt_kills β€” number of BT "kills" (frame TX aborts). quoting "kills" because that's literally how the manpage says it and I am not about to editorialise πŸ’…
  • mac_id β€” mac ID. short, sweet, essential. we stan a minimal field 🫢

🌈 SEE ALSO 🌈

the friend group is huge, buckle up. all of these live in the kernel file ./drivers/net/wireless/intel/iwlwifi/fw/api/stats.h:

  • struct mvm_statistics_load(9)
  • enum iwl_statistics_notif_flags(9)
  • enum iwl_statistics_cmd_flags(9)
  • struct iwl_statistics_cmd(9)
  • enum iwl_statistics_notify_type_id(9)
  • enum iwl_statistics_cfg_flags(9)
  • struct iwl_system_statistics_cmd(9)
  • enum iwl_fw_statistics_type(9)
  • struct iwl_statistics_ntfy_hdr(9)
  • struct iwl_stats_ntfy_per_link(9)
  • struct iwl_stats_ntfy_part1_per_link(9)
  • struct iwl_stats_ntfy_per_mac(9)
  • struct iwl_stats_ntfy_per_phy_v1(9)
  • struct iwl_stats_ntfy_coex(9)
  • struct iwl_stats_ntfy_per_phy(9)
  • struct iwl_stats_ntfy_per_sta(9)
  • struct iwl_system_statistics_notif_oper_v3(9)
  • struct iwl_system_statistics_notif_oper(9)
  • struct iwl_system_statistics_part1_notif_oper(9)
  • struct iwl_system_statistics_end_notif(9)
  • struct iwl_statistics_operational_ntfy(9)
  • struct iwl_statistics_operational_ntfy_ver_14(9)
  • struct iwl_statistics_phy_ntfy(9)
  • struct iwl_statistics_mac_ntfy(9)
  • struct iwl_statistics_rx_ntfy(9)
  • struct iwl_statistics_tx_ntfy(9)
  • struct iwl_statistics_duration_ntfy(9)
  • struct iwl_statistics_he_ntfy(9)

like I said. huge friend group. go read them, they're all lovely 🧚

ok and a tiny heads-up before you go: everything above is a straight-up field dump, so don't go assuming behaviour the page doesn't state. the manpage gives you fields, units, and flags β€” nothing more, no cap πŸ’€

that's the whole page bestie, hope the stats struct is now your best friend πŸ’–βœ¨

sign-off time 🌟 β€” this little slice of documentation comes straight from ./drivers/net/wireless/intel/i... (yes, the path really does get truncated like that in the footer, it's giving mysterious) and it's dated October 2026. mwah, go forth and count your beacons πŸŽ€πŸ’…

πŸ“¦ where this page comes from