STRUCT CFG80211_NAN_FUNC(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct cfg80211_nan_func(9) β€” Kernel API Manual, bestie edition πŸ¦‹

okay so this is a page from the Kernel API Manual β€” it's literally the struct cfg80211_nan_func(9) entry, and no cap, it's giving "backstage pass to how a NAN function is built" ✨ (also heads up: this is part 1 of 3, so don't go anywhere 🫢)


🌸 NAME 🌸

struct cfg80211_nan_func β€” the lowkey blueprint for a NAN function, like, the whole struct, the whole vibe πŸ’–


✨ SYNOPSIS ✨

here's the actual shape of it, copying it exactly so there's zero confusion, periodt:

struct cfg80211_nan_func {
    enum nl80211_nan_function_type type;
    u8 service_id[NL80211_NAN_FUNC_SERVICE_ID_LEN];
    u8 publish_type;
    bool close_range;
    bool publish_bcast;
    bool subscribe_active;
    u8 followup_id;
    u8 followup_reqid;
    struct mac_address followup_dest;
    u32 ttl;
    const u8 *serv_spec_info;
    u8 serv_spec_info_len;
    bool srf_include;
    const u8 *srf_bf;
    u8 srf_bf_len;
    u8 srf_bf_idx;
    struct mac_address *srf_macs;
    int srf_num_macs;
    struct cfg80211_nan_func_filter *rx_filters;
    struct cfg80211_nan_func_filter *tx_filters;
    u8 num_tx_filters;
    u8 num_rx_filters;
    u8 instance_id;
    u64 cookie;
};

like, that's the whole thing. every field accounted for πŸ‘‘


πŸŽ€ Members πŸŽ€

okay this is the part where we go field by field, and honestly? every single one eats πŸ”₯

  • type β€” the type, an enum nl80211_nan_function_type. yes it just says that. it's the enum. she's the enum. πŸ’…
  • service_id β€” the service ID of the function 🌸
  • publish_type β€” nl80211_nan_publish_type. that's it, that's the description bestie πŸ’€
  • close_range β€” if true, the range should be limited. and (iconic caveat) the threshold is implementation specific β€” so like, don't come for me asking for a number, there isn't one here πŸ™ˆ
  • publish_bcast β€” if true, the solicited publish should be broadcasted πŸ“‘
  • subscribe_active β€” if true, the subscribe is active ⭐
  • followup_id β€” the instance ID for follow up πŸ‘€
  • followup_reqid β€” the requester instance ID for follow up 🫢
  • followup_dest β€” MAC address of the recipient of the follow up πŸ’Œ
  • ttl β€” time to live counter in DW. (yes, DW. exactly that. not fixing it, not guessing, we respect the spec 🧚)
  • serv_spec_info β€” Service Specific Info πŸ“
  • serv_spec_info_len β€” Service Specific Info length πŸ“
  • srf_include β€” if true, SRF is inclusive βœ…
  • srf_bf β€” Bloom Filter 🌼
  • srf_bf_len β€” Bloom Filter length πŸ“
  • srf_bf_idx β€” Bloom Filter index πŸ”’
  • srf_macs β€” SRF MAC addresses πŸ’»
  • srf_num_macs β€” number of MAC addresses in SRF πŸ”’
  • rx_filters β€” rx filters that are matched with corresponding peer's tx_filter πŸ’ž
  • tx_filters β€” filters that should be transmitted in the SDF πŸ“€
  • num_tx_filters β€” length of tx_filters. πŸ“Š
  • num_rx_filters β€” length of rx_filters. πŸ“Š
  • instance_id β€” driver allocated id of the function. πŸš—
  • cookie β€” unique NAN function identifier. πŸͺ (literally the cutest field name, obsessed)

aaaand that's part 1, bestie β€” more coming, don't touch that dial πŸ’–πŸ¦‹

πŸ”— SEE ALSO πŸ’…

okay bestie, this is the part where the manpage introduces you to its entire extended friend group. literally everyone is here. no cap. scroll responsibly 🫢

  • Kernel file ./include/net/cfg80211.h β€” the actual file in the kernel tree, the mothership, the source of truth, the main character πŸ’–
  • Introduction(9), Device registration(9) β€” start here, for real


πŸŽ€ Actions and configuration πŸŽ€

(the manpage literally has a whole subsection called Actions and configuration(9), and it is giving organizational queen energy πŸ‘‘)


πŸ¦‹ Scanning and 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)

🌸 Neighbor Awareness Networking (NAN) 🌸


🧚 Utility functions 🧚


πŸ”₯ Data path helpers πŸ”₯


🌈 Regulatory enforcement infrastructure 🌈



πŸ’œ RFkill integration πŸ’œ

πŸ“ Vendor commands πŸ“

⭐ Test mode ⭐



and that's the whole group chat, bestie πŸ’€ every single one of them, no cap β€” go click through whichever one you actually need 🫢✨

πŸ›°οΈ the reg / beacon girlies (yes they're still in SEE ALSO)

  • cfg80211_reg_check_beaconing(9) β€” checking whether the beaconing is even allowed, the whole page
  • cfg80211_reg_can_beacon(9) β€” can we beacon? the page that answers that
  • cfg80211_reg_can_beacon_relax(9) β€” same question but relaxed, iconic

πŸ“‘ channel switch era

  • cfg80211_ch_switch_notify(9) β€” the channel-switch notification page
  • cfg80211_ch_switch_started_notify(9) β€” the one for when the switch has started πŸ‘‘

🌈 operating class / chandef conversions, we love a glow-up

  • ieee80211_operating_class_to_band(9) β€” operating class ➑️ band
  • ieee80211_operating_class_to_chandef(9) β€” operating class ➑️ chandef
  • ieee80211_chandef_to_operating_class(9) β€” chandef ➑️ operating class
  • ieee80211_chandef_to_khz(9) β€” chandef ➑️ kHz, the math girlie

πŸŽ€ the misc cfg80211 ops (no skips, we list them all)

  • cfg80211_tdls_oper_request(9) β€” TDLS oper request page
  • cfg80211_calculate_bitrate(9) β€” bitrate math, slay
  • cfg80211_unregister_wdev(9) β€” unregistering a wireless device
  • cfg80211_register_netdevice(9) β€” registering a netdevice
  • cfg80211_unregister_netdevice(9) β€” the reverse, sadly
  • struct cfg80211_ft_event_params(9) β€” the page for this struct, behold
  • cfg80211_ft_event(9) β€” the FT event page
  • cfg80211_get_p2p_attr(9) β€” P2P attribute fetching, periodt

🧚 IE splitting & fragmenting

  • ieee80211_ie_split_ric(9) β€” IE split, RIC edition
  • ieee80211_ie_split(9) β€” plain IE split, still eating
  • ieee80211_fragment_element(9) β€” fragmenting an element, break it down

πŸ’œ wowlan / crit proto / channel counting

  • cfg80211_report_wowlan_wakeup(9) β€” reporting that wowlan wakeup
  • cfg80211_crit_proto_stopped(9) β€” crit proto stopped, noted
  • ieee80211_get_num_supported_channels(9) β€” counting supported channels fr fr

πŸ’… combinations & radios

  • cfg80211_check_combinations(9) β€” checking combinations
  • cfg80211_iter_combinations(9) β€” iterating combinations
  • cfg80211_get_radio_idx_by_chan(9) β€” radio index by channel, iykyk

πŸ›‘ stopping & shutting down

  • cfg80211_stop_link(9) β€” stopping a link
  • cfg80211_stop_iface(9) β€” stopping an iface
  • cfg80211_shutdown_all_interfaces(9) β€” shutting down all the interfaces, dramatic but necessary

⭐ wiphy extended features

  • wiphy_ext_feature_set(9) β€” set that ext feature
  • wiphy_ext_feature_isset(9) β€” is it set tho

πŸ¦‹ NAN besties (our homegirls)

  • cfg80211_free_nan_func(9) β€” freeing the NAN func
  • struct cfg80211_nan_match_params(9) β€” the match params struct page
  • cfg80211_nan_match(9) β€” NAN match, a moment
  • cfg80211_nan_func_terminated(9) β€” the NAN func got terminated 😭
  • cfg80211_nan_sched_update_done(9) β€” sched update done, we love closure

πŸ”₯ auth / pmsr / assoc / owe

  • cfg80211_external_auth_request(9) β€” external auth request page
  • cfg80211_pmsr_report(9) β€” PMSR report
  • cfg80211_pmsr_complete(9) β€” PMSR complete, we're done here
  • cfg80211_iftype_allowed(9) β€” is this iftype allowed
  • cfg80211_assoc_comeback(9) β€” assoc comeback, the sequel
  • cfg80211_update_owe_info_event(9) β€” updating the OWE info event

🌸 BSS color & color change (so aesthetic)

  • cfg80211_bss_flush(9) β€” BSS flush
  • cfg80211_bss_color_notify(9) β€” BSS color notify
  • cfg80211_obss_color_collision_notify(9) β€” OBSS color collision notify, ouch
  • cfg80211_color_change_started_notify(9) β€” color change started
  • cfg80211_color_change_aborted_notify(9) β€” color change aborted πŸ’€
  • cfg80211_color_change_notify(9) β€” color change, plain and simple

πŸ‘‘ 6 GHz / MLO / channel checks

  • cfg80211_6ghz_power_type(9) β€” 6 GHz power type, main character
  • cfg80211_links_removed(9) β€” links removed πŸ˜”
  • struct cfg80211_mlo_reconf_done_data(9) β€” the MLO reconf done data struct
  • cfg80211_mlo_reconf_add_done(9) β€” MLO reconf add done
  • cfg80211_schedule_channels_check(9) β€” scheduling that channels check
  • cfg80211_epcs_changed(9) β€” EPCS changed, noted bestie

πŸ“ more NAN (yes there's more, we stay fed)

  • cfg80211_next_nan_dw_notif(9) β€” next NAN DW notif
  • cfg80211_nan_cluster_joined(9) β€” the cluster got joined 🫢
  • cfg80211_nan_ulw_update(9) β€” NAN ULW update
  • cfg80211_nan_channel_evac(9) β€” NAN channel evac, everybody out

πŸ”’ debugfs lock girlies

  • wiphy_locked_debugfs_read(9) β€” locked debugfs read
  • wiphy_locked_debugfs_write(9) β€” locked debugfs write

🌈 S1G frequency stuff

  • cfg80211_s1g_get_start_freq_khz(9) β€” S1G start freq in kHz
  • cfg80211_s1g_get_end_freq_khz(9) β€” S1G end freq in kHz
  • cfg80211_s1g_get_primary_sibling(9) β€” S1G primary sibling, find your people

✨ and one (1) incumbent signal

  • cfg80211_incumbent_signal_notify(9) β€” the incumbent signal notify page, the final girlie

ok that's genuinely every single reference, no crumbs left, we ate and left no notes πŸ’…

✨ that's the whole page bestie ✨ source lives at ./include/net, it's dated October 2026, and the page itself is struct cfg80211_nan_func(9) β€” go be iconic with it πŸŽ€πŸ’–πŸ¦‹

πŸ“¦ where this page comes from