SCANNING AND BSS LIST HANDLING(9)

๐Ÿ“ฆ version 7.3.1, in nixpkgs unstable

๐ŸŒธ Scanning and BSS list handling ๐ŸŒธ

okay so this is the Scanning and BSS list handling(9) page from the Kernel API Manual, and bestie, it's giving "small but mighty" energy. let's get into it ๐Ÿ’…


So the scanning process itself? honestly kind of simple, lowkey. but cfg80211 is out here offering quite a bit of helper functionality โ€” like it's that friend who brings snacks to the study session and also has a full color-coded spreadsheet. iconic behavior, honestly ๐Ÿซถ

โœจ starting a scan โœจ

To start a scan, the scan operation gets invoked with a scan definition. and what's in that scan definition, you ask? ๐Ÿ‘€

  • the channels to scan
  • the SSIDs to send probe requests for (including the wildcard, if that's what you're into)

A passive scan is indicated by having no SSIDs to probe โ€” so like, no SSIDs, no active probing, it's just vibing and listening ๐Ÿ’€

Additionally, a scan request may contain extra information elements that should get added to the probe request. and here's the slay part: the IEs are guaranteed to be well-formed โœจ and they will not exceed the maximum length that the driver advertised in the wiphy structure. so no surprise chaos, they stay within the limits the driver set. respect. ๐Ÿ‘‘

๐Ÿฆ‹ found a BSS? tell cfg80211 ๐Ÿฆ‹

When scanning finds a BSS, cfg80211 needs to be notified of that โ€” because it is the one responsible for maintaining the BSS list, periodt. the driver should not maintain a list itself, no cap. and for this notification? various functions exist. pick your fighter, they're there for you ๐Ÿ’–

๐ŸŽ€ searching and sharing ๐ŸŽ€

Since drivers do not maintain a BSS list, there are also a number of functions to search for a BSS and obtain information about it from the BSS structure that cfg80211 maintains. so cfg80211 holds the data, you just go ask it nicely ๐ŸŒธ

oh and โ€” the BSS list is also made available to userspace. everybody eats ๐Ÿ“


okay that's the whole vibe for this part, but there's literally more where this came from ๐ŸŒˆ

โœจ SEE ALSO โœจ

Kernel file ./include/net/cfg80211.h โ€” yes bestie, all of these live in that one header. One file. One. Iconic behaviour honestly ๐ŸŽ€

Okay so this is the big reference list, and it is long โ€” so grab a snack, hydrate, and let's go through it together. I'm keeping every single one because every single one matters ๐Ÿ’…

That's the capability-and-band era of the list, and yes there are both a _ieee80211_set_sband_iftype_data and an ieee80211_set_sband_iftype_data โ€” one little underscore, two whole entries, no I will not be merging them ๐Ÿ™ˆ

  • Actions and configuration(9)
  • struct vif_params(9)
  • struct key_params(9)
  • struct cfg80211_chan_def(9)
  • struct cfg80211_tid_cfg(9)
  • struct cfg80211_tid_config(9)
  • struct cfg80211_fils_aad(9)
  • struct cfg80211_set_hw_timestamp(9)
  • cfg80211_get_chandef_type(9)
  • cfg80211_chandef_create(9)
  • cfg80211_chandef_identical(9)
  • cfg80211_chandef_is_edmg(9)
  • cfg80211_chandef_is_s1g(9)
  • cfg80211_chandef_compatible(9)
  • nl80211_chan_width_to_mhz(9)
  • cfg80211_chandef_get_width(9)
  • cfg80211_chandef_valid(9)
  • cfg80211_chandef_usable(9)
  • cfg80211_chandef_dfs_required(9)
  • cfg80211_chandef_dfs_usable(9)
  • cfg80211_chandef_dfs_cac_time(9)
  • cfg80211_chandef_primary(9)
  • cfg80211_chandef_npca_valid(9)
  • cfg80211_chandef_add_npca(9)
  • cfg80211_chandef_add_dbe(9)
  • nl80211_send_chandef(9)
  • ieee80211_chandef_max_power(9)
  • cfg80211_chandef_s1g_pri_width(9)
  • cfg80211_any_usable_channels(9)
  • enum survey_info_flags(9)
  • struct survey_info(9)
  • 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)
  • 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)

Alphabetical-ish would've been nice but no, we're vibing through the structs in file order, and honestly? Respect ๐Ÿซถ

The whole wiphy_work_* / wiphy_delayed_work_* / wiphy_hrtimer_work_* family is here in full โ€” queue, cancel, flush, and (for the delayed + hrtimer ones) pending. Four flavours each, no cap ๐Ÿ’€

Note that ieee80211_channel_to_khz, ieee80211_channel_to_freq_khz and ieee80211_channel_to_frequency are all separate entries, and so are ieee80211_freq_khz_to_channel and ieee80211_frequency_to_channel โ€” yes the khz and non-khz versions both exist, keep them straight bestie ๐Ÿฆ‹

The finder family is fully intact: elem, ie, elem_match, ie_match, ext_elem, ext_ie, vendor_elem, vendor_ie. Eight of them. All distinct. Do not @ me ๐Ÿ˜ญ

Heads up: __cfg80211_get_bss(9) and cfg80211_get_bss(9) are both on here โ€” the double-underscore one is its own entry, so don't go thinking they're the same thing โœจ

And that's the whole reference list, bestie โ€” every last (9) accounted for, nothing dropped, nothing renamed ๐Ÿ’– Three-hundred-plus entries and we got through them all. If you were looking for something and it's not here, then it's not in the SEE ALSO, periodt ๐Ÿซถ

okay so the SEE ALSO fam is huge โ€” like, this is the extended-extended family and they all pulled up to the group chat at once ๐Ÿ’–. Every single one, no skips, no cap, in order:


and that's the whole page, bestie โ€” you made it to the end of all three parts ๐ŸŽ‰ like genuinely, go hydrate. this one lives over in ./include/net, dated October 2026, and it's part of the Kernel API Manual as Scanning and...ist handling(9). bye ily, go read the actual pages now ๐Ÿ’–โœจ

๐Ÿ“ฆ where this page comes from