VENDOR COMMANDS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 Vendor commands 🌸

Kernel API Manual Β· Vendor commands(9) Β· part 1 of 3, bestie, buckle up πŸŽ€


πŸ’… VENDOR COMMANDS πŸ’…

okay so picture this: every once in a while there's some special protocol or firmware feature that literally cannot be implemented very openly. awk. 😭 For that vibe and cases like it, the vendor command functionality lets you implement those features with (typically closed-source) userspace and firmware, using nl80211 as the configuration mechanism. slay, we have a channel ✨

A driver that supports vendor commands must register them as an array in struct wiphy, with handlers for each one. no shortcuts, no vibes-only registration, bestie πŸ™ˆ Each command also has an OUI and a sub command ID to identify it β€” that's its whole little identity, iykyk πŸ¦‹

⚠️ okay this part matters: do NOT (ab)use this feature to implement protocol features that could openly be shared across drivers. like, it's giving off-label use and we're not doing that πŸ’€ In particular, it must never be required to use vendor commands to implement any "normal" functionality that higher-level userspace like connection managers etc. need. periodt. if a connection manager needs it, it's not a vendor-command thing, full stop 🌈

more coming in part 2, don't go anywhere πŸ‘‘

Okay so like β€” the amount of ✨lore✨ here is genuinely unhinged, but every single link is a real one, so buckle up bestie πŸ’–

  • ./include/net/cfg80211.h β€” the kernel file itself, the mothership, the source of truth πŸŽ€

🌸 the intro squad

πŸ¦‹ channel + rate + capability vibes (iftype data era)


✨ Actions and configuration ✨

Like, the whole "actually doing stuff" section, and it is a lot πŸ’…

πŸŽ€ the params & chandef girlies

🫢 crypto, beacon, AP settings (the build-an-AP kit)

  • struct cfg80211_crypto_settings(9)
  • struct cfg80211_mbssid_config(9)
  • struct cfg80211_mbssid_elems(9)
  • struct cfg80211_rnr_elems(9)
  • struct cfg80211_beacon_data(9)
  • struct cfg80211_acl_data(9)
  • struct cfg80211_fils_discovery(9)
  • struct cfg80211_unsol_bcast_probe_resp(9)
  • struct cfg80211_s1g_short_beacon(9)
  • struct cfg80211_ap_settings(9)
  • struct cfg80211_ap_update(9)
  • struct cfg80211_csa_settings(9)
  • struct cfg80211_color_change_settings(9)
  • struct iface_combination_params(9)
  • enum station_parameters_apply_mask(9)
  • struct sta_txpwr(9)
  • struct link_station_parameters(9)
  • struct link_station_del_parameters(9)
  • struct cfg80211_ttlm_params(9)
  • struct station_parameters(9)
  • struct station_del_parameters(9)
  • enum cfg80211_station_type(9)
  • cfg80211_check_station_change(9)
  • enum rate_info_flags(9)
  • enum rate_info_bw(9)
  • struct rate_info(9)
  • enum bss_param_flags(9)
  • struct sta_bss_parameters(9)
  • struct cfg80211_txq_stats(9)
  • struct cfg80211_tid_stats(9)
  • struct link_station_info(9)
  • struct station_info(9)
  • struct cfg80211_sar_sub_specs(9)
  • struct cfg80211_sar_specs(9)
  • struct cfg80211_sar_freq_ranges(9)
  • struct cfg80211_sar_capa(9)
  • cfg80211_get_station(9)
  • enum monitor_flags(9)
  • enum mpath_info_flags(9)
  • struct mpath_info(9)
  • enum wiphy_bss_param_flags(9)
  • struct bss_parameters(9)
  • struct mesh_config(9)
  • struct mesh_setup(9)
  • struct ocb_setup(9)
  • struct ieee80211_txq_params(9)

🌈 Scanning and BSS list handling 🌈

Scanning, connecting, wowlan, and also a surprise appearance from qos maps at the end, no cap πŸ”₯

  • struct cfg80211_ssid(9)
  • struct cfg80211_scan_info(9)
  • struct cfg80211_scan_6ghz_params(9)
  • struct cfg80211_scan_request(9)
  • struct cfg80211_match_set(9)
  • struct cfg80211_sched_scan_plan(9)
  • struct cfg80211_bss_select_adjust(9)
  • struct cfg80211_sched_scan_request(9)
  • enum cfg80211_signal_type(9)
  • struct cfg80211_inform_bss(9)
  • struct cfg80211_bss_ies(9)
  • struct cfg80211_bss(9)
  • ieee80211_bss_get_elem(9)
  • ieee80211_bss_get_ie(9)
  • struct cfg80211_auth_request(9)
  • struct cfg80211_assoc_link(9)
  • struct cfg80211_ml_reconf_req(9)
  • enum cfg80211_assoc_req_flags(9)
  • struct cfg80211_assoc_request(9)
  • struct cfg80211_deauth_request(9)
  • struct cfg80211_disassoc_request(9)
  • struct cfg80211_ibss_params(9)
  • struct cfg80211_bss_selection(9)
  • struct cfg80211_connect_params(9)
  • enum cfg80211_connect_params_changed(9)
  • enum wiphy_params_flags(9)
  • struct cfg80211_pmksa(9)
  • struct cfg80211_pkt_pattern(9)
  • struct cfg80211_wowlan_tcp(9)
  • struct cfg80211_wowlan(9)
  • struct cfg80211_coalesce_rules(9)
  • struct cfg80211_coalesce(9)
  • struct cfg80211_wowlan_nd_match(9)
  • struct cfg80211_wowlan_nd_info(9)
  • struct cfg80211_wowlan_wakeup(9)
  • struct cfg80211_gtk_rekey_data(9)
  • struct cfg80211_update_ft_ies_params(9)
  • struct cfg80211_mgmt_tx_params(9)
  • struct cfg80211_dscp_exception(9)
  • struct cfg80211_dscp_range(9)
  • struct cfg80211_qos_map(9)

πŸ¦„ Neighbor Awareness Networking (NAN) πŸ¦„

NAN, then it just keeps going into pmk / external auth / FTM / PMSR and honestly? iconic πŸ‘‘

  • struct cfg80211_nan_band_config(9)
  • struct cfg80211_nan_conf(9)
  • struct cfg80211_nan_channel(9)
  • struct cfg80211_nan_local_sched(9)
  • struct cfg80211_nan_peer_map(9)
  • struct cfg80211_nan_peer_sched(9)
  • enum cfg80211_nan_conf_changes(9)
  • struct cfg80211_nan_func_filter(9)
  • struct cfg80211_nan_func(9)
  • struct cfg80211_pmk_conf(9)
  • struct cfg80211_external_auth_params(9)
  • struct cfg80211_ftm_responder_stats(9)
  • struct cfg80211_pmsr_ftm_result(9)
  • struct cfg80211_pmsr_result(9)
  • struct cfg80211_pmsr_ftm_request_peer(9)
  • struct cfg80211_pmsr_request_peer(9)
  • struct cfg80211_pmsr_request(9)
  • struct cfg80211_update_owe_info(9)
  • struct mgmt_frame_regs(9)
  • struct cfg80211_ops(9)
  • enum wiphy_flags(9)
  • struct ieee80211_iface_limit(9)
  • struct ieee80211_iface_combination(9)
  • enum wiphy_wowlan_support_flags(9)
  • struct wiphy_wowlan_support(9)
  • struct wiphy_coalesce_support(9)
  • enum wiphy_vendor_command_flags(9)
  • enum wiphy_opmode_flag(9)
  • struct sta_opmode_info(9)
  • struct wiphy_vendor_command(9)
  • struct wiphy_iftype_ext_capab(9)
  • cfg80211_get_iftype_ext_capa(9)
  • struct cfg80211_pmsr_capabilities(9)
  • struct wiphy_iftype_akm_suites(9)
  • struct wiphy_radio_cfg(9)
  • struct wiphy_radio_freq_range(9)
  • struct wiphy_radio(9)
  • enum wiphy_nan_flags(9)
  • struct wiphy_nan_capa(9)

πŸ’œ wiphy + wireless_dev (the whole personality) πŸ’œ


🧚 Utility functions 🧚

Channel math, header lengths, the little helpers that carry the whole operation fr fr


πŸ“ Data path helpers πŸ“

Converting frames, finding IEs, defragging elements β€” the plumbing bestie πŸ’…


🌸 Regulatory enforcement infrastructure 🌸

Rules are rules, bestie, and the regulator is always watching πŸ‘€

πŸŽ€ Internal regulatory db functions πŸŽ€


⭐ BSS informing + event notifying (say it with me: notify) ⭐


πŸ¦‹ RFkill integration πŸ¦‹


πŸ‘‘ vendor cmd replies + events (yes, the section you literally just read, but the function-level lore) πŸ‘‘

πŸŽ€ Test mode πŸŽ€


πŸ’– connecting, roaming, and telling everyone about it πŸ’–

…and here's the rest of the friend group, because this page literally does not know how to end a guest list πŸ’…

🌸 the regulatory besties

πŸ¦‹ channel switch era

✨ operating class math (iconic honestly)

πŸŽ€ tdls + bitrate

πŸ’– register/unregister arc

🧚 fast BSS transition corner

  • struct cfg80211_ft_event_params(9) β€” the lil struct holding FT event params
  • cfg80211_ft_event(9) β€” the FT event itself, main character energy

πŸ”₯ p2p + IE splitting

⭐ wowlan + critical protocol

πŸ¦‹ channels & combinations

πŸ’… shutting things down

🌈 ext features

πŸ“ NAN (neighbor awareness networking) crew, part 1

πŸ”₯ auth + pmsr

πŸ’œ iftype, assoc comeback, owe

πŸ‘‘ BSS

πŸŽ€ color change saga

⭐ 6 GHz + MLO

πŸ’– channel checks + EPCS

🧚 NAN crew, part 2 (they're back)

πŸ¦‹ debugfs (locked edition)

🌸 S1G math trio

πŸ’… last but never least


okay that's genuinely everyone, no cap, I checked twice πŸ’€ go read the ones u need and hydrate while ur at it 🫢

This lil rewrite was brought to u from ./include/net, dated October 2026 β€” so it's basically a period piece now. The page is Vendor commands(9), and yes, it's still called that, and yes, I love her for it. βœ¨πŸŽ€ bye bestie πŸ’–

πŸ“¦ where this page comes from