STRUCT IWL_SCAN_REQ_UMAC(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct iwl_scan_req_umac β€” the scan request command bestie!! ✨

okay so this is the struct iwl_scan_req_umac manual page from the Kernel API Manual, and ngl it's giving "firmware scan command realness" πŸ’– like this is the struct you send when you want the UMAC firmware to go find some networks for you. iconic behavior honestly. let me walk you through it 🫢


🌸 SYNOPSIS 🌸

like, here's the whole literal struct, no cap, every field exactly as it is:

struct iwl_scan_req_umac {
    __le32 flags;
    __le32 uid;
    __le32 ooc_priority;
    __le16 general_flags;
    u8 reserved;
    u8 scan_start_mac_id;
    union {
      struct {
        u8 extended_dwell;
        u8 active_dwell;
        u8 passive_dwell;
        u8 fragmented_dwell;
        __le32 max_out_time;
        __le32 suspend_time;
        __le32 scan_priority;
        struct iwl_scan_umac_chan_param channel;
        u8 data[];
      } v1;
      struct {
        u8 extended_dwell;
        u8 active_dwell;
        u8 passive_dwell;
        u8 fragmented_dwell;
        __le32 max_out_time[SCAN_TWO_LMACS];
        __le32 suspend_time[SCAN_TWO_LMACS];
        __le32 scan_priority;
        struct iwl_scan_umac_chan_param channel;
        u8 data[];
      } v6;
      struct {
        u8 active_dwell;
        u8 passive_dwell;
        u8 fragmented_dwell;
        u8 adwell_default_n_aps;
        u8 adwell_default_n_aps_social;
        u8 reserved3;
        __le16 adwell_max_budget;
        __le32 max_out_time[SCAN_TWO_LMACS];
        __le32 suspend_time[SCAN_TWO_LMACS];
        __le32 scan_priority;
        struct iwl_scan_umac_chan_param channel;
        u8 data[];
      } v7;
      struct {
        u8 active_dwell[SCAN_TWO_LMACS];
        u8 reserved2;
        u8 adwell_default_n_aps;
        u8 adwell_default_n_aps_social;
        u8 general_flags2;
        __le16 adwell_max_budget;
        __le32 max_out_time[SCAN_TWO_LMACS];
        __le32 suspend_time[SCAN_TWO_LMACS];
        __le32 scan_priority;
        u8 passive_dwell[SCAN_TWO_LMACS];
        u8 num_of_fragments[SCAN_TWO_LMACS];
        struct iwl_scan_umac_chan_param channel;
        u8 data[];
      } v8;
      struct {
        u8 active_dwell[SCAN_TWO_LMACS];
        u8 adwell_default_hb_n_aps;
        u8 adwell_default_lb_n_aps;
        u8 adwell_default_n_aps_social;
        u8 general_flags2;
        __le16 adwell_max_budget;
        __le32 max_out_time[SCAN_TWO_LMACS];
        __le32 suspend_time[SCAN_TWO_LMACS];
        __le32 scan_priority;
        u8 passive_dwell[SCAN_TWO_LMACS];
        u8 num_of_fragments[SCAN_TWO_LMACS];
        struct iwl_scan_umac_chan_param channel;
        u8 data[];
      } v9;
    };
 };

the way this thing has FIVE union members for different firmware versions… it's giving evolution of a main character tbh πŸ¦‹ v1, v6, v7, v8, v9 all stacked in one anonymous union like a lil squad πŸ’€


πŸŽ€ the MEMBERS (iykyk) πŸŽ€

  • flags β€” it's an enum iwl_umac_scan_flags, slay ✨
  • uid β€” the scan id, specifically enum iwl_umac_scan_uid_offsets πŸ’œ
  • ooc_priority β€” out of channel priority, which is enum iwl_scan_priority πŸ”₯
  • general_flags β€” enum iwl_umac_scan_general_flags 🌸
  • reserved β€” literally reserved, leave it alone bestie πŸ™ˆ
  • scan_start_mac_id β€” report the scan start TSF time according to this mac's TSF πŸ‘‘
  • {unnamed_union} β€” anonymous, mysterious, lowkey main character energy πŸ’…
  • v1 β€” version 1 command data πŸŽ€

✨ v1 details (the OG) ✨

  • v1.extended_dwell β€” dwell time for channels 1, 6 and 11 πŸ“
  • v1.active_dwell β€” dwell time for active scan per LMAC 🌈
  • v1.passive_dwell β€” dwell time for passive scan per LMAC 🧚
  • v1.fragmented_dwell β€” dwell time for fragmented passive scan ⭐
  • v1.max_out_time β€” max out of serving channel time, per LMAC β€” for CDB there are 2 LMACs bestie, not me forgetting that 😭
  • v1.suspend_time β€” max suspend time, per LMAC β€” again, for CDB there are 2 LMACs 🫢
  • v1.scan_priority β€” scan internal prioritization, enum iwl_scan_priority πŸ’–
  • v1.channel β€” it's a struct iwl_scan_umac_chan_param πŸ’œ
  • v1.data β€” struct iwl_scan_channel_cfg_umac and struct iwl_scan_req_umac_tail πŸ”₯
  • v6 β€” version 6 command data, the glow-up continues πŸ¦‹
  • v7 β€” version 7 command data ✨

πŸ’« v7 lil extras πŸ’«

  • v7.adwell_default_n_aps β€” for adaptive dwell, the default number of APs per channel πŸ’…
  • v7.adwell_default_n_aps_social β€” for adaptive dwell, the default number of APs per social (1,6,11) channel 🌸
  • v7.adwell_max_budget β€” for adaptive dwell, the maximal budget of TU to be added to total scan time πŸŽ€
  • v8 β€” version 8 command data πŸ‘‘

🌈 v8 lil extras 🌈

  • v8.general_flags2 β€” enum iwl_umac_scan_general_flags2 🧚
  • v8.num_of_fragments β€” Number of fragments needed for full coverage per band. Relevant only for fragmented scan. fr fr note that ⭐
  • v9 β€” version 9 command data, the latest icon 🫢

πŸ”₯ SEE ALSO πŸ”₯

okay so here's the whole friend group of related structs and enums, all from the kernel file ./drivers/net/wireless/intel/iwlwifi/fw/api/scan.h β€” go check them out bestie, they ate:

  1. enum iwl_scan_subcmd_ids(9)
  2. struct iwl_ssid_ie(9)
  3. struct iwl_scan_offload_blocklist(9)
  4. struct iwl_scan_offload_profile(9)
  5. struct iwl_scan_offload_profile_cfg_data(9)
  6. struct iwl_scan_offload_profile_cfg_v1(9)
  7. struct iwl_scan_offload_profile_cfg(9)
  8. struct iwl_scan_schedule_lmac(9)
  9. struct iwl_scan_req_tx_cmd(9)
  10. struct iwl_scan_channel_cfg_lmac(9)
  11. struct iwl_scan_probe_segment(9)
  12. struct iwl_scan_probe_req_v1(9)
  13. struct iwl_scan_probe_req(9)
  14. struct iwl_scan_channel_opt(9)
  15. enum iwl_mvm_lmac_scan_flags(9)
  16. struct iwl_scan_req_lmac(9)
  17. struct iwl_scan_results_notif(9)
  18. struct iwl_lmac_scan_complete_notif(9)
  19. struct iwl_periodic_scan_complete(9)
  20. struct iwl_scan_dwell(9)
  21. struct iwl_scan_config_v1(9)
  22. struct iwl_scan_config_v2(9)
  23. struct iwl_scan_config(9)
  24. enum iwl_umac_scan_flags(9)
  25. enum iwl_umac_scan_general_flags2(9)
  26. enum iwl_umac_scan_general_flags_v2(9)
  27. enum iwl_umac_scan_general_params_flags2(9)
  28. struct iwl_scan_channel_cfg_umac(9)
  29. struct iwl_scan_umac_schedule(9)
  30. struct iwl_scan_req_umac_tail_v2(9)
  31. struct iwl_scan_umac_chan_param(9)
  32. struct iwl_scan_probe_params_v3(9)
  33. struct iwl_scan_probe_params_v4(9)
  34. struct iwl_scan_channel_params_v4(9)
  35. struct iwl_scan_channel_params_v7(9)
  36. struct iwl_scan_channel_params_v8(9)
  37. struct iwl_scan_general_params_v11(9)
  38. struct iwl_scan_periodic_parms_v1(9)
  39. struct iwl_scan_req_params_v12(9)
  40. struct iwl_scan_req_params_v17(9)
  41. struct iwl_scan_req_params_v18(9)
  42. struct iwl_scan_req_umac_v12(9)
  43. struct iwl_scan_req_umac_v17(9)
  44. struct iwl_scan_req_umac_v18(9)
  45. struct iwl_umac_scan_abort(9)
  46. enum iwl_umac_scan_abort_status(9)
  47. struct iwl_umac_scan_start(9)
  48. struct iwl_umac_scan_complete(9)
  49. struct iwl_scan_offload_profile_match_v1(9)
  50. struct iwl_scan_offload_profiles_query_v1(9)
  51. struct iwl_scan_offload_profile_match(9)
  52. struct iwl_scan_offload_match_info(9)
  53. struct iwl_umac_scan_iter_complete_notif(9)
  54. struct iwl_umac_scan_channel_survey_notif(9)

okay that's the whole page bestie, every single field and reference preserved, you're welcome πŸ’– this came from ./drivers/net/wireless/intel/i... and the manual is dated October 2026, struct iwl_scan_req_umac(9) periodt 🌟 go slay your scans βœ¨πŸ¦‹πŸ‘‘

πŸ“¦ where this page comes from