STRUCT CFG80211_CHAN_DEF(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹ struct cfg80211_chan_def(9) πŸ’… β€” channel definition

okay bestie, welcome to the Kernel API Manual entry for struct cfg80211_chan_def β€” yes the manual name goes right up top like a little name tag because we're polite ✨ This is the channel definition struct, and honestly it's giving main character energy in the wireless stack. Let's get into it.


🌸 NAME 🌸

struct cfg80211_chan_def β€” channel definition, literally exactly what it says on the tin πŸŽ€


✨ SYNOPSIS ✨

here's the whole vibe, character for character, no cap:

struct cfg80211_chan_def {
    struct ieee80211_channel *chan;
    struct ieee80211_channel *npca_chan;
    enum nl80211_chan_width width;
    u32 center_freq1;
    u32 center_freq2;
    struct ieee80211_edmg edmg;
    u16 freq1_offset;
    u16 punctured, npca_punctured;
    bool s1g_primary_2mhz;
};

look at all those fields, she's organized πŸ’œ


πŸŽ€ Members πŸŽ€

okay so now the part where we go field by field, because every single one matters and I would never skip one πŸ™ˆ

  • chan β€” the (control) channel. this is the one, the main character channel πŸ”₯
  • npca_chan β€” the NPCA primary channel. and listen, important note: if DBE is in use, this channel may appear to be inside the primary half of the chandef. Implementations can use the position of this channel to understand how NPCA is used β€” so like, the position is the whole tea, iykyk πŸ“
  • width β€” channel width. that's it, that's the field πŸ’…
  • center_freq1 β€” center frequency of the first segment ✨
  • center_freq2 β€” center frequency of the second segment, and this one's exclusive bestie: only with 80+80 MHz πŸ‘‘
  • edmg β€” defines the EDMG channels configuration. here's the catch tho: if edmg is requested (i.e. the .channels member is non-zero), then chan will define the primary channel and all other parameters are ignored. like, fully ignored. don't come for me, that's just how it works 😭
  • freq1_offset β€” offset from center_freq1, in KHz (capital K, capital H, we respect the units) ⭐
  • punctured β€” mask of the punctured 20 MHz subchannels, with bits turned on being disabled (punctured); numbered from lower to higher frequency (like in the spec). so a 1 bit means that subchannel said "not today" πŸ’€
  • npca_punctured β€” NPCA puncturing bitmap, like punctured but for NPCA transmissions. if NPCA is used (npca_chan is not NULL) this will be a superset of the punctured bimap. and heads up: if DBE is used, this bitmap is also shifted to be in accordance with the overall chandef bandwidth 🌈
  • s1g_primary_2mhz β€” indicates if the control channel pointed to by chan exists as a 1 MHz primary subchannel within an S1G 2 MHz primary channel 🧚

that's the whole member list, fully intact, nothing dropped, not even the tiny bool at the bottom 🫢

✨ SEE ALSO ✨

okay bestie, this is the part where the kernel doc is like "here's literally every single thing even remotely related to this struct" and honestly? it's giving reference material that ate πŸ’…. The original points you at the kernel file ./include/net/cfg80211.h plus a massive pile of companion pages. Every single one is listed below β€” no skipping, no "etc.", we don't do that here ✨

🫢 the actions & configuration cluster

🌸 scanning & BSS list handling

  • Scanning and BSS list handling(9), 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)

πŸ¦‹ NAN time

  • Neighbor Awareness Networking (NAN)(9), 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)

πŸ’œ the wiphy extended universe, lowkey the main character

🧚 utility functions (the little helpers that carry the whole squad)

πŸ“ data path helpers

🌈 regulatory land

⭐ BSS / MLME notification crew

πŸŽ€ rfkill, vendor commands & test mode

πŸ‘‘ connect / roam / mgmt / notify everything


like… that's the whole guest list πŸ’€ every name here is literally a real page you can go read, so if you're deep in the wireless stack and you need the tea on any of these, you know where to find it 🫢✨

okay so the roster continues and it is long, but every single one of these is a real one, no skips, no cap πŸ’… here's the rest of the squad:

and then we hit the NAN girlies, yes all of them, they're a whole friend group 🫢

and that's a wrap, no more names, we made it 😭✨


okay bye bestie, go read the other pages πŸ’– this one lives in ./include/net, it's dated October 2026, and the whole thing is filed under struct cfg80211_chan_def(9) β€” that's the vibe check and it passed πŸ¦‹πŸŒΈ

πŸ“¦ where this page comes from