STRUCT IWL_MVM_VIF(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct iwl_mvm_vif(9) πŸ’…

okay so β€” welcome to section 9 of the Kernel API Manual, bestie πŸŽ€. This is the page for struct iwl_mvm_vif, and no cap, it's literally "data per Virtual Interface, it is a MAC context." That's the whole NAME, and honestly? iconic brevity.


✨ SYNOPSIS ✨

get a load of this absolute unit of a struct, iykyk:

struct iwl_mvm_vif {
    struct iwl_mvm *mvm;
    u16 id;
    u16 color;
    bool associated;
    u8 ap_assoc_sta_count;
    bool uploaded;
    bool ap_ibss_active;
    bool pm_enabled;
    bool monitor_active;
    bool session_prot_connection_loss;
    u8 low_latency: 6;
    u8 low_latency_actual: 1;
    u8 authorized:1;
    bool ps_disabled;
    u32 ap_beacon_time;
    bool bf_enabled;
    bool ba_enabled;
  #ifdef CONFIG_PM_SLEEP;
    struct {
      u8 kck[NL80211_KCK_EXT_LEN];
      u8 kek[NL80211_KEK_EXT_LEN];
      size_t kek_len;
      size_t kck_len;
      u32 akm;
      __le64 replay_ctr;
      bool valid;
    } rekey_data;
    int tx_key_idx;
    bool seqno_valid;
    u16 seqno;
  #endif;
  #if IS_ENABLED(CONFIG_IPV6);
    struct in6_addr
target_ipv6_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_MAX];
    unsigned long
tentative_addrs[BITS_TO_LONGS(IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_MAX)];
    int num_target_ipv6_addrs;
  #endif;
  #ifdef CONFIG_IWLWIFI_DEBUGFS;
    struct dentry *dbgfs_dir;
    struct dentry *dbgfs_slink;
    struct iwl_dbgfs_pm dbgfs_pm;
    struct iwl_dbgfs_bf dbgfs_bf;
    struct iwl_mac_power_cmd_v2 mac_pwr_cmd;
    int dbgfs_quota_min;
    bool ftm_unprotected;
  #endif;
    u8 uapsd_misbehaving_ap_addr[ETH_ALEN];
    struct delayed_work uapsd_nonagg_detected_wk;
    bool csa_countdown;
    bool csa_failed;
    bool csa_bcn_pending;
    bool csa_blocks_tx;
    u16 csa_target_freq;
    u16 csa_count;
    u16 csa_misbehave;
    struct delayed_work csa_work;
    enum iwl_tsf_id tsf_id;
    struct iwl_mvm_time_event_data time_event_data;
    struct iwl_mvm_time_event_data hs_time_event_data;
    enum iwl_roc_activity roc_activity;
    bool p2p_in_binding;
    netdev_features_t features;
    struct ieee80211_sta *ap_sta;
    struct ieee80211_key_conf *ap_early_keys[4];
    struct {
      struct ieee80211_key_conf *keys[2];
    } bcn_prot;
    u16 max_tx_op;
    struct iwl_mvm_vif_link_info deflink;
    struct iwl_mvm_vif_link_info *link[IEEE80211_MLD_MAX_NUM_LINKS];
};

she's long, she's got conditional compilation moments, she's got vibes πŸ’…. now let's meet every single member, bestie β€” all of them, no skipping 🫢


πŸ¦‹ Members πŸ¦‹

  • mvm β€” pointer back to the mvm struct 🌸
  • id β€” between 0 and 3
  • color β€” to solve races upon MAC addition and removal
  • associated β€” indicates that we're currently associated, used only for managing the firmware state in iwl_mvm_bss_info_changed_station
  • ap_assoc_sta_count β€” count of stations associated to us β€” valid only if VIF type is AP
  • uploaded β€” indicates the MAC context has been added to the device
  • ap_ibss_active β€” indicates that AP/IBSS is configured and that the interface should get quota etc. pm_enabled - indicate if MAC power management is allowed
  • pm_enabled β€” indicates powersave is enabled ✨
  • monitor_active β€” indicates that monitor context is configured, and that the interface should get quota etc.
  • session_prot_connection_loss β€” the connection was lost due to session protection ending without receiving a beacon, so we need to now protect the deauth separately
  • low_latency β€” bit flags for low latency, see enum iwl_mvm_low_latency_cause for causes.
  • low_latency_actual β€” boolean, indicates low latency is set, as a result from low_latency bit flags and takes force into account.
  • authorized β€” indicates the AP station was set to authorized
  • ps_disabled β€” indicates that this interface requires PS to be disabled
  • ap_beacon_time β€” AP beacon time for synchronisation (on older FW)
  • bf_enabled β€” indicates if beacon filtering is enabled
  • ba_enabled β€” indicated if beacon abort is enabled
  • rekey_data β€” rekeying data for WoWLAN GTK rekey offload
  • tx_key_idx β€” WEP transmit key index for D3
  • seqno_valid β€” indicates seqno is valid
  • seqno β€” storage for seqno for older firmware D0/D3 transition
  • target_ipv6_addrs β€” IPv6 addresses on this interface for offload 🧚
  • tentative_addrs β€” bitmap of tentative IPv6 addresses in target_ipv6_addrs
  • num_target_ipv6_addrs β€” number of target_ipv6_addrs
  • dbgfs_dir β€” debugfs directory for this vif
  • dbgfs_slink β€” debugfs symlink for this interface
  • dbgfs_pm β€” power management debugfs data
  • dbgfs_bf β€” beamforming debugfs data
  • mac_pwr_cmd β€” debugfs override for MAC power command
  • dbgfs_quota_min β€” debugfs value for minimal quota
  • ftm_unprotected β€” unprotected FTM debugfs override
  • uapsd_misbehaving_ap_addr β€” MLD address/BSSID of U-APSD misbehaving AP, to not use U-APSD on reconnection
  • uapsd_nonagg_detected_wk β€” worker for handling detection of no aggregation in U-APSD
  • csa_countdown β€” indicates that CSA countdown may be started
  • csa_failed β€” CSA failed to schedule time event, report an error later 😭
  • csa_bcn_pending β€” indicates that we are waiting for a beacon on a new channel
  • csa_blocks_tx β€” CSA is blocking TX
  • csa_target_freq β€” CSA target channel frequency (old implementation)
  • csa_count β€” CSA counter (old CSA implementation w/o firmware)
  • csa_misbehave β€” CSA AP misbehaviour flag (old implementation)
  • csa_work β€” CSA work (old implementation)
  • tsf_id β€” the TSF resource ID assigned in firmware (for firmware needing that)
  • time_event_data β€” session protection time event data
  • hs_time_event_data β€” hotspot/AUX ROC time event data
  • roc_activity β€” currently running ROC activity for this vif (or ROC_NUM_ACTIVITIES if no activity is running).
  • p2p_in_binding β€” indicates that this P2P-Device interface should be added to the binding, i.e. is running ROC right now
  • features β€” hw features active for this vif
  • ap_sta β€” pointer to the AP STA data structure
  • ap_early_keys β€” The firmware cannot install keys before stations etc., but higher layers work differently, so we store the keys here for later installation. πŸ”₯
  • bcn_prot β€” beacon protection data (keys; FIXME: needs to be per link) πŸ‘€
  • max_tx_op β€” max TXOP in usecs for all ACs, zero for no limit.
  • deflink β€” default link data for use in non-MLO
  • link β€” link data for each link in MLO

🌈 SEE ALSO 🌈

all the friends-and-family of this struct, straight outta the kernel file ./drivers/net/wireless/intel/iwlwifi/mvm/mvm.h:

  • struct iwl_mvm_mod_params(9)
  • enum iwl_power_scheme(9)
  • enum iwl_mvm_low_latency_force(9)
  • enum iwl_mvm_low_latency_cause(9)
  • struct iwl_mvm_link_bf_data(9)
  • struct iwl_probe_resp_data(9)
  • struct iwl_mvm_vif_link_info(9)
  • struct iwl_mvm_tt_mgmt(9)
  • struct iwl_mvm_thermal_device(9)
  • struct iwl_mvm_reorder_buffer(9)
  • struct iwl_mvm_reorder_buf_entry(9)
  • struct iwl_mvm_baid_data(9)
  • struct iwl_mvm_tvqm_txq_info(9)
  • struct iwl_mvm_acs_survey_channel(9)
  • enum iwl_mvm_status(9)
  • struct iwl_mvm_roc_ops(9)
  • struct iwl_mvm_switch_vif_chanctx_ops(9)

okay and one last little sign-off, bestie 🫢 β€” this gorgeous page came from the source path ./drivers/net/wireless/intel/i... and it's dated October 2026, and it's struct iwl_mvm_vif(9) all the way down. go read your structs, ily, periodt πŸ’–βœ¨
πŸ“¦ where this page comes from