STRUCT IWL_SCAN_REQ_LMAC(9)
π 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'sstruct iwl_scan_channel_opt channel_opt[2], bestie.dataβ channel configuration and probe request packet. theu8 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
- 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