STRUCT IWL_BEACON_FILTER_CMD(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ‘‘ struct iwl_beacon_filter_cmd β€” beacon filter command πŸ’…

okay bestie, this is a page straight out of the Kernel API Manual, and it's all about struct iwl_beacon_filter_cmd, which is literally the beacon filter command. no cap, it's giving "let me tell you exactly when to wake up the driver" energy. πŸ¦‹


✨ NAME ✨

struct iwl_beacon_filter_cmd β€” beacon filter command

REPLY_BEACON_FILTERING_CMD = 0xd2 (command) πŸ’–


🌸 SYNOPSIS 🌸

struct iwl_beacon_filter_cmd {
    __le32 bf_energy_delta;
    __le32 bf_roaming_energy_delta;
    __le32 bf_roaming_state;
    __le32 bf_temp_threshold;
    __le32 bf_temp_fast_filter;
    __le32 bf_temp_slow_filter;
    __le32 bf_enable_beacon_filter;
    __le32 bf_debug_flag;
    __le32 bf_escape_timer;
    __le32 ba_escape_timer;
    __le32 ba_enable_beacon_abort;
    __le32 bf_threshold_absolute_low[2];
    __le32 bf_threshold_absolute_high[2];
 };

like, look at her. iconic struct. every single field is a __le32, periodt. πŸ’…


πŸŽ€ Members πŸŽ€

πŸ’œ bf_energy_delta

used for RSSI filtering, but only if we're in the 'normal' state. the rule: send the beacon to the driver if the delta in the Energy values calculated for this beacon and the last passed beacon is greater than this threshold. a zero value means the Energy change is totally ignored for beacon filtering, and the beacon won't be forced to be sent to the driver regardless of this delta. typical energy delta is 5dB. slay. ⭐

πŸ’œ bf_roaming_energy_delta

same vibe, but for when we're in the 'roaming' state. send the beacon to the driver if the delta in Energy values calculated for this beacon and the last passed beacon is greater than this threshold. a zero value means the Energy change is ignored for beacon filtering while in Roaming state. typical energy delta is 1dB. πŸ¦‹

πŸ’œ bf_roaming_state

used for RSSI filtering too. if the absolute Energy values calculated for the current beacon are less than the threshold, use the Roaming Energy Delta Threshold; otherwise use the normal Energy Delta Threshold. typical energy threshold is -72dBm. iykyk. 🌈

πŸ’œ bf_temp_threshold

this threshold decides which type of temperature filtering gets picked β€” Slow or Fast (units are in Celsius, bestie): if the current temperature is above this threshold, the Fast filter is used. if the current temperature is below this threshold, the Slow filter is used. πŸ”₯

πŸ’œ bf_temp_fast_filter

send the Beacon to the driver if the delta in temperature values calculated for this beacon and the last passed beacon is greater than this threshold. a zero value means the temperature change is ignored for beacon filtering; beacons will not be forced to be sent to the driver regardless of whether its temperature has been changed. 🌸

πŸ’œ bf_temp_slow_filter

send the Beacon to the driver if the delta in temperature values calculated for this beacon and the last passed beacon is greater than this threshold. a zero value means the temperature change is ignored for beacon filtering; beacons will not be forced to be sent to the driver regardless of whether its temperature has been changed. (yes it's the same wording as fast filter, no i'm not making the rules, the manpage said it, i'm just delivering it with love 🫢) πŸ“

πŸ’œ bf_enable_beacon_filter

1 = beacon filtering is enabled. 0 = disabled. simple as that, bestie. ✨

πŸ’œ bf_debug_flag

beacon filtering debug configuration. cute little debug switch. πŸŽ€

πŸ’œ bf_escape_timer

send beacons to the driver if no beacons were passed for a specific period of time. units: Beacons. ⭐

πŸ’œ ba_escape_timer

fully receive and parse a beacon if no beacons were passed for a longer period of time than this escape-timeout. units: Beacons. πŸ’€

πŸ’œ ba_enable_beacon_abort

1 = beacon abort is enabled. 0 = disabled. periodt. πŸ’…

πŸ’œ bf_threshold_absolute_low

see below. literally, that's what it says β€” "See below." 😭 the actual explanation lives in the next member, so keep scrolling bestie, don't leave me hanging.

πŸ’œ bf_threshold_absolute_high

send the Beacon to the driver if the Energy value calculated for this beacon crossed this absolute threshold. for the 'Increase' direction, bf_energy_absolute_low[i] is used. for the 'Decrease' direction, bf_energy_absolute_high[i] is used. a zero value means this specific threshold is ignored for beacon filtering, and the beacon will not be forced to be sent to the driver because of this setting. 🌈


πŸ¦‹ SEE ALSO πŸ¦‹

kernel file ./drivers/net/wireless/intel/iwlwifi/fw/api/power.h, plus the whole friend group:

  • enum iwl_ltr_config_flags(9)
  • struct iwl_ltr_config_cmd_v1(9)
  • struct iwl_ltr_config_cmd(9)
  • enum iwl_power_flags(9)
  • struct iwl_powertable_cmd(9)
  • enum iwl_device_power_flags(9)
  • struct iwl_device_power_cmd(9)
  • struct iwl_mac_power_cmd_v2(9)
  • struct iwl_mac_power_cmd(9)
  • struct iwl_dev_tx_power_common(9)
  • struct iwl_dev_tx_power_cmd_v3(9)
  • struct iwl_dev_tx_power_cmd_v4(9)
  • struct iwl_dev_tx_power_cmd_v5(9)
  • struct iwl_dev_tx_power_cmd_v8(9)
  • struct iwl_dev_tx_power_cmd_v3_v8(9)
  • struct iwl_dev_tx_power_cmd_v9(9)
  • struct iwl_dev_tx_power_cmd_v10(9)
  • enum iwl_geo_per_chain_offset_operation(9)
  • struct iwl_per_chain_offset(9)
  • struct iwl_geo_tx_power_profiles_cmd_v1(9)
  • struct iwl_geo_tx_power_profiles_cmd_v2(9)
  • struct iwl_geo_tx_power_profiles_cmd_v3(9)
  • struct iwl_geo_tx_power_profiles_cmd_v4(9)
  • struct iwl_geo_tx_power_profiles_cmd_v5(9)
  • struct iwl_geo_tx_power_profiles_cmd_v6(9)
  • struct iwl_geo_tx_power_profiles_resp(9)
  • enum iwl_ppag_flags(9)
  • union iwl_ppag_table_cmd(9)
  • struct iwl_sar_offset_mapping_cmd(9)
  • struct iwl_txpower_constraints_cmd(9)

ngl bestie, the temperature + energy thresholds are doing a whole lot of heavy lifting here. read them twice, your RSSI will thank you. πŸ’–

and that's the whole page, mwah πŸ’‹ β€” sourced from ./drivers/net/wireless/intel/i..., dated October 2026, signed off as struct iwl_b...n_filter_cmd(9). go forth and filter those beacons, queen πŸ‘‘βœ¨

πŸ“¦ where this page comes from