STRUCT IWL_SCAN_REQ_LMAC(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– struct iwl_scan_req_lmac(9) πŸ’–

okay bestie, welcome to the Kernel API Manual β€” section 9, we're deep in the wifi weeds and honestly? iconic. this is the page for struct iwl_scan_req_lmac, aka SCAN_REQUEST_CMD_API_S_VER_1. she's giving "the blueprint for telling the firmware to go look for networks" energy and we're gonna read her top to bottom, no skipping πŸ’…


✨ NAME ✨

struct iwl_scan_req_lmac β€” literally SCAN_REQUEST_CMD_API_S_VER_1. that's her whole name, that's the whole vibe πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

here's the struct in all her glory, copy it exactly bestie, do NOT freestyle:

struct iwl_scan_req_lmac {
    __le32 reserved1;
    u8 n_channels;
    u8 active_dwell;
    u8 passive_dwell;
    u8 fragmented_dwell;
    u8 extended_dwell;
    u8 reserved2;
    __le16 rx_chain_select;
    __le32 scan_flags;
    __le32 max_out_time;
    __le32 suspend_time;
    __le32 flags;
    __le32 filter_flags;
    struct iwl_scan_req_tx_cmd tx_cmd[2];
    struct iwl_ssid_ie direct_scan[PROBE_OPTION_MAX];
    __le32 scan_prio;
    __le32 iter_num;
    __le32 delay;
    struct iwl_scan_schedule_lmac schedule[IWL_MAX_SCHED_SCAN_PLANS];
    struct iwl_scan_channel_opt channel_opt[2];
    u8 data[];
};

🌸 Members 🌸

okay so now we go field by field, and yes we're doing all of them, this is a completionist household πŸ’ͺ

  • reserved1 β€” just chillin'. it's there for alignment and future use. she's a placeholder, she's a vibe holder 🫢
  • n_channels β€” num of channels to scan. literally the count of channels, no cap.
  • active_dwell β€” dwell time for active channels. how long we hang out and actually talk to the AP ⏱️
  • passive_dwell β€” dwell time for passive channels. how long we just sit there and listen, no interrupting πŸ™ˆ
  • fragmented_dwell β€” dwell time for fragmented passive scan.
  • extended_dwell β€” dwell time for channels 1, 6 and 11 (in certain cases). the famous ones get extra time, main character channels honestly πŸ‘‘
  • reserved2 β€” another alignment/future-use cutie. for alignment and future use, bestie.
  • rx_chain_select β€” PHY_RX_CHAIN_* flags. which receive chains we're using, keep the exact flag family name pls.
  • scan_flags β€” enum iwl_mvm_lmac_scan_flags. the enum does the heavy lifting here.
  • max_out_time β€” max time (in TU) to be out of associated channel. like how long we can ghost our home channel before it gets suspicious 😭
  • suspend_time β€” pause scan this long (TUs) when returning to service channel. we come home, we chill, we go back out.
  • flags β€” RXON flags.
  • filter_flags β€” RXON filter.
  • tx_cmd β€” tx command for active scan; for 2GHz and for 5GHz. two of them, one per band, both slaying πŸ’…
  • direct_scan β€” list of SSIDs for directed active scan. it's an array: struct iwl_ssid_ie direct_scan[PROBE_OPTION_MAX]. you point it at specific networks, it goes hunting 🎯
  • scan_prio β€” enum iwl_scan_priority. priority, obviously.
  • iter_num β€” number of scan iterations. how many times we do the thing πŸ”
  • delay β€” delay in seconds before first iteration. yes, seconds, not TUs, don't mix it up bestie ⚠️
  • schedule β€” two scheduling plans. The first one is finite, the second one can be infinite. one is a lil errand, one is forever πŸŒ€
  • channel_opt β€” channel optimization options, for full and partial scan. it's struct iwl_scan_channel_opt channel_opt[2], bestie.
  • data β€” channel configuration and probe request packet. the u8 data[] flex array at the end, carrying the actual goods πŸ“¦

⭐ SEE ALSO ⭐

the whole friend group, all of them, alphabetically-adjacent-ish, exactly as listed, because we do not leave a single reference behind 🫢 (from Kernel file ./drivers/net/wireless/intel/iwlwifi/fw/api/scan.h, ily):

  • enum iwl_scan_subcmd_ids(9)
  • struct iwl_ssid_ie(9)
  • struct iwl_scan_offload_blocklist(9)
  • struct iwl_scan_offload_profile(9)
  • struct iwl_scan_offload_profile_cfg_data(9)
  • struct iwl_scan_offload_profile_cfg_v1(9)
  • struct iwl_scan_offload_profile_cfg(9)
  • struct iwl_scan_schedule_lmac(9)
  • struct iwl_scan_req_tx_cmd(9)
  • struct iwl_scan_channel_cfg_lmac(9)
  • struct iwl_scan_probe_segment(9)
  • struct iwl_scan_probe_req_v1(9)
  • struct iwl_scan_probe_req(9)
  • struct iwl_scan_channel_opt(9)
  • enum iwl_mvm_lmac_scan_flags(9)
  • struct iwl_scan_results_notif(9)
  • struct iwl_lmac_scan_complete_notif(9)
  • struct iwl_periodic_scan_complete(9)
  • struct iwl_scan_dwell(9)
  • struct iwl_scan_config_v1(9)
  • struct iwl_scan_config_v2(9)
  • struct iwl_scan_config(9)
  • enum iwl_umac_scan_flags(9)
  • enum iwl_umac_scan_general_flags2(9)
  • enum iwl_umac_scan_general_flags_v2(9)
  • enum iwl_umac_scan_general_params_flags2(9)
  • struct iwl_scan_channel_cfg_umac(9)
  • struct iwl_scan_umac_schedule(9)
  • struct iwl_scan_req_umac_tail_v2(9)
  • struct iwl_scan_umac_chan_param(9)
  • struct iwl_scan_req_umac(9)
  • struct iwl_scan_probe_params_v3(9)
  • struct iwl_scan_probe_params_v4(9)
  • struct iwl_scan_channel_params_v4(9)
  • struct iwl_scan_channel_params_v7(9)
  • struct iwl_scan_channel_params_v8(9)
  • struct iwl_scan_general_params_v11(9)
  • struct iwl_scan_periodic_parms_v1(9)
  • struct iwl_scan_req_params_v12(9)
  • struct iwl_scan_req_params_v17(9)
  • struct iwl_scan_req_params_v18(9)
  • struct iwl_scan_req_umac_v12(9)
  • struct iwl_scan_req_umac_v17(9)
  • struct iwl_scan_req_umac_v18(9)
  • struct iwl_umac_scan_abort(9)
  • enum iwl_umac_scan_abort_status(9)
  • struct iwl_umac_scan_start(9)
  • struct iwl_umac_scan_complete(9)
  • struct iwl_scan_offload_profile_match_v1(9)
  • struct iwl_scan_offload_profiles_query_v1(9)
  • struct iwl_scan_offload_profile_match(9)
  • struct iwl_scan_offload_match_info(9)
  • struct iwl_umac_scan_iter_complete_notif(9)
  • struct iwl_umac_scan_channel_survey_notif(9)

and that's the page!! you ate that, bestie, fr fr πŸ”₯ this version came from ./drivers/net/wireless/intel/i... and it's dated October 2026 β€” so go forth, scan responsibly, and remember: the vibe changes, the fields do not πŸ’œβœ¨

πŸ“¦ where this page comes from