STRUCT IWL_LINK_CONFIG_CMD(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ NAME ✨

struct iwl_link_config_cmd β€” the command structure you use to configure the LINK context in the MLD API, bestie. Also known as LINK_CONFIG_CMD =0x9 🫢 This is from the Kernel API Manual, just so you know where we're living rn.


πŸŽ€ SYNOPSIS πŸŽ€

okay so here's the whole struct, and yes it's giving "final boss of structs" energy but we're gonna get through it together πŸ’…

struct iwl_link_config_cmd {
    __le32 action;
    __le32 link_id;
    __le32 mac_id;
    __le32 phy_id;
    u8 local_link_addr[6];
    __le16 reserved_for_local_link_addr;
    __le32 modify_mask;
    __le32 active;
    union {
      __le32 listen_lmac;
      struct {
        u8 block_tx;
        u8 modify_bandwidth;
        u8 reserved1[2];
      };
    };
    __le32 cck_rates;
    __le32 ofdm_rates;
    __le32 cck_short_preamble;
    __le32 short_slot;
    __le32 protection_flags;
    __le32 qos_flags;
    struct iwl_ac_qos ac[AC_NUM + 1];
    u8 htc_trig_based_pkt_ext;
    u8 rand_alloc_ecwmin;
    u8 rand_alloc_ecwmax;
    u8 ndp_fdbk_buff_th_exp;
    struct iwl_he_backoff_conf trig_based_txf[AC_NUM];
    __le32 bi;
    __le32 dtim_interval;
    __le16 puncture_mask;
    __le16 frame_time_rts_th;
    __le32 flags;
    __le32 flags_mask;
    u8 ref_bssid_addr[6];
    __le16 reserved_for_ref_bssid_addr;
    u8 bssid_index;
    u8 bss_color;
    u8 spec_link_id;
    u8 ul_mu_data_disable;
    u8 ibss_bssid_addr[6];
    __le16 reserved_for_ibss_bssid_addr;
    struct iwl_npca_params npca_params;
    struct iwl_ac_qos prio_edca_params;
    __le32 reserved3[4];
 };

πŸ’… Members πŸ’…

okay bestie, field by field, no skips, no "ngl I forgot that one" πŸ™ˆ

  • action β€” the action we're performing, check enum iwl_ctxt_action for the deets.
  • link_id β€” the id of the link that this cmd configures.
  • mac_id β€” interface ID. Only matters if action is FW_CTXT_ACTION_ADD β€” like, only then, fr.
  • phy_id β€” PHY index. Can only be changed if the link was inactive (and stays inactive). If the link is active (or becomes active), this field is literally ignored πŸ’€
  • local_link_addr β€” the link's MAC address. Can be changed only if the link was inactive (and stays inactive). If the link is active (or becomes active), this field is ignored too β€” same rule, iconic consistency.
  • reserved_for_local_link_addr β€” reserved πŸ¦‹
  • modify_mask β€” from enum iwl_link_ctx_modify_flags, selects what to change. Relevant only if action is FW_CTXT_ACTION_MODIFY.
  • active β€” indicates whether the link is active or not.
  • {unnamed_union} β€” anonymous, mysterious, no name, main character energy ✨
  • listen_lmac β€” indicates whether the link should be allocated on the Listen Lmac or on the Main Lmac. Cannot be changed on an active Link. Relevant only for eSR.
  • {unnamed_struct} β€” anonymous again πŸ’€
  • block_tx β€” tell the firmware that this link can't Tx. This should be used only when a link is de-activated because of CSA with mode = 1. Available since version 5.
  • modify_bandwidth β€” bandwidth request value for RX OMI (see also LINK_CONTEXT_MODIFY_BANDWIDTH), from enum iwl_link_modify_bandwidth.
  • reserved1 β€” in version 2, listen_lmac became reserved.
  • cck_rates β€” basic rates available for CCK.
  • ofdm_rates β€” basic rates available for OFDM.
  • cck_short_preamble β€” 1 for enabling short preamble, 0 otherwise.
  • short_slot β€” 1 for enabling short slots, 0 otherwise.
  • protection_flags β€” combination of enum iwl_link_ctx_protection_flags.
  • qos_flags β€” from enum iwl_mac_qos_flags.
  • ac β€” one iwl_mac_qos configuration for each AC.
  • htc_trig_based_pkt_ext β€” default PE in 4us units.
  • rand_alloc_ecwmin β€” random CWmin = 2**ECWmin-1.
  • rand_alloc_ecwmax β€” random CWmax = 2**ECWmax-1.
  • ndp_fdbk_buff_th_exp β€” set exponent for the NDP feedback buffered threshold.
  • trig_based_txf β€” MU EDCA Parameter set for the trigger based traffic queues.
  • bi β€” beacon interval in TU, applicable only when associated.
  • dtim_interval β€” DTIM interval in TU. Relevant only for GO, otherwise this is offloaded.
  • puncture_mask β€” puncture mask for EHT (removed in VER_3). gone but not forgotten 😭
  • frame_time_rts_th β€” HE duration RTS threshold, in units of 32us.
  • flags β€” a combination from enum iwl_link_ctx_flags.
  • flags_mask β€” what of flags have changed. Also enum iwl_link_ctx_flags. Below fields are for multi-bssid:
  • ref_bssid_addr β€” reference BSSID used by the AP.
  • reserved_for_ref_bssid_addr β€” reserved πŸŽ€
  • bssid_index β€” index of the associated VAP.
  • bss_color β€” 11ax AP ID that is used in the HE SIG-A to mark inter BSS frame.
  • spec_link_id β€” link_id as the AP knows it.
  • ul_mu_data_disable β€” OM Control UL MU Data Disable RX Support (bit 44) in HE MAC Capabilities information field as defined in figure 9-897 in IEEE802.11REVme-D5.0. yes that's the whole citation, we keep it πŸ”₯
  • ibss_bssid_addr β€” bssid for ibss.
  • reserved_for_ibss_bssid_addr β€” reserved 🌸
  • npca_params β€” NPCA parameters.
  • prio_edca_params β€” priority EDCA parameters for enhanced QoS.
  • reserved3 β€” reserved for future use πŸ‘€ (future us is gonna have OPINIONS)
heads up bestie: phy_id, local_link_addr, and listen_lmac are all "only while inactive" girls. If the link is active or becoming active, those fields get ignored and that's not a vibe, that's just the spec πŸ’€

🌈 SEE ALSO 🌈

the whole group chat of related definitions, all of them, no cap β€” and they live in Kernel file ./drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h:

  • enum iwl_mac_conf_subcmd_ids(9)
  • struct iwl_p2p_noa_attr(9)
  • struct iwl_probe_resp_data_notif(9)
  • struct iwl_missed_vap_notif(9)
  • struct iwl_channel_switch_start_notif_v1(9)
  • struct iwl_channel_switch_start_notif(9)
  • struct iwl_channel_switch_error_notif_v1(9)
  • struct iwl_channel_switch_error_notif(9)
  • struct iwl_cancel_channel_switch_cmd(9)
  • struct iwl_chan_switch_te_cmd(9)
  • struct iwl_mac_low_latency_cmd(9)
  • struct iwl_mac_client_data(9)
  • struct iwl_mac_p2p_dev_data(9)
  • enum iwl_mac_config_filter_flags(9)
  • struct iwl_mac_wifi_gen_support_v2(9)
  • struct iwl_mac_wifi_gen_support(9)
  • struct iwl_mac_config_cmd_v3(9)
  • struct iwl_mac_nan_data(9)
  • struct iwl_mac_config_cmd(9)
  • enum iwl_link_ctx_modify_flags(9)
  • enum iwl_link_ctx_protection_flags(9)
  • enum iwl_link_ctx_flags(9)
  • enum iwl_link_modify_bandwidth(9)
  • enum iwl_npca_flags(9)
  • struct iwl_npca_params(9)
  • enum iwl_fw_sta_type(9)
  • struct iwl_sta_cfg_cmd_v1(9)
  • struct iwl_sta_cfg_cmd_v2(9)
  • struct iwl_sta_cfg_cmd(9)
  • struct iwl_aux_sta_cmd(9)
  • struct iwl_remove_sta_cmd(9)
  • struct iwl_mvm_sta_disable_tx_cmd(9)
  • enum iwl_mvm_fw_esr_recommendation(9)
  • struct iwl_esr_mode_notif_v1(9)
  • enum iwl_esr_leave_reason(9)
  • struct iwl_esr_mode_notif(9)
  • struct iwl_missed_beacons_notif(9)
  • struct iwl_esr_trans_fail_notif(9)
  • struct iwl_twt_operation_cmd(9)
  • struct iwl_nan_band_config(9)
  • enum iwl_nan_flags(9)
  • struct iwl_nan_config_cmd(9)
  • struct iwl_nan_schedule_cmd_v1(9)
  • struct iwl_nan_schedule_cmd(9)
  • struct iwl_nan_peer_cmd(9)
  • enum iwl_nan_cluster_notif_flags(9)
  • struct iwl_nan_cluster_notif(9)
  • struct iwl_nan_dw_end_notif(9)
  • struct iwl_nan_ulw_attr_notif(9)
  • enum iwl_nan_sched_update_status(9)
  • struct iwl_nan_sched_update_completed_notif(9)

and that's the whole page, bestie, you ate that πŸ“ this one came out of Kernel API Manual, page dated October 2026, sourced from ./drivers/net/wireless/intel/i... β€” go read the rest of the kernel docs, ily, bye πŸ’œπŸ§š

πŸ“¦ where this page comes from