STRUCT BSS_PARAMETERS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸŽ€ struct bss_parameters β€” the Kernel API Manual, bestie edition πŸŽ€

okay so we're talking about struct bss_parameters from the Kernel API Manual, and honestly? This thing is the whole vibe check for your BSS. Let me walk you through it, no cap.


✨ NAME ✨

struct bss_parameters β€” BSS parameters, literally exactly what it says on the tin πŸ’…


🌸 SYNOPSIS 🌸

Here's the shape of it, character for character, don't touch:

struct bss_parameters {
    int link_id;
    int use_cts_prot;
    int use_short_preamble;
    int use_short_slot_time;
    const u8 *basic_rates;
    u8 basic_rates_len;
    int ap_isolate;
    int ht_opmode;
    s8 p2p_ctwindow, p2p_opp_ps;
};

πŸ¦‹ Members πŸ¦‹

okay, member by member, let's get into it πŸ‘‘

  • link_id β€” the link_id, or -1 if you're not doing MLD at all. Non-MLD girlies, this is your field.
  • use_cts_prot β€” whether to use CTS protection. 0 = no, 1 = yes, and -1 = do not change (leave it exactly as it is, hands off πŸ™ˆ).
  • use_short_preamble β€” whether short preambles are allowed. 0 = no, 1 = yes, -1 = do not change.
  • use_short_slot_time β€” whether short slot time is allowed. 0 = no, 1 = yes, -1 = do not change.
  • basic_rates β€” the basic rates, in IEEE 802.11 format. Or NULL for no change, your call 🫢
  • basic_rates_len β€” the number of basic rates. simple as that, that's the count.
  • ap_isolate β€” do not forward packets between connected stations. 0 = no, 1 = yes, -1 = do not change. so like, keeping everyone in their own little lane.
  • ht_opmode β€” HT Operation mode (a u16 = opmode, or -1 = do not change).
  • p2p_ctwindow β€” P2P CT Window (-1 = no change).
  • p2p_opp_ps β€” P2P opportunistic PS (-1 = no change).

🌈 Description 🌈

So what's this struct actually for? It's used to change BSS parameters β€” mainly in AP mode.

That's it. That's the whole deal. Main character energy, minimal explanation 😭✨

🫢 SEE ALSO 🫢

okay bestie, buckle up, because this is the part where the manpage just dumps the entire friend group on you πŸ’– this is the cross-reference list, aka everybody who's ever been in the group chat with struct bss_parameters. there are like a gazillion of them ngl, so we're gonna go through them in order, and you can just scroll and vibe check the one you need ✨

first up, the source of truth itself, the literal origin story:

look at that first block, it's giving "capabilities of every generation of Wi-Fi at once" πŸ’… and honestly? iconic. note the leading underscore on _ieee80211_set_sband_iftype_data(9) β€” that is not a typo, that's her whole legal government name, do not come for her 🫢


next, the whole doing stuff section, aka the main characters of configuration:

the chandef girlies really said "we are legion" and honestly, respect 😭 if you ever wondered "is this channel definition valid / usable / DFS-required", there's literally a function for each of those thoughts. they ate and left no crumbs 🌸

  • 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 mesh_config(9)
  • struct mesh_setup(9)
  • struct ocb_setup(9)
  • struct ieee80211_txq_params(9)

see enum bss_param_flags(9) and struct sta_bss_parameters(9) sitting right there in the middle? yeah, that's the actual family of the page you're reading rn πŸ’€ we're literally in the credits of our own movie. obsessed πŸŽ€


now the scanning saga, aka "how do I even find a BSS":

  • 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)

the way this chunk goes from scanning β†’ auth β†’ assoc β†’ deauth β†’ disassoc β†’ and then just casually slides into wowlan and QoS maps 😭 it's giving "one thing led to another". no cap, that's just how the header file is laid out πŸ¦‹


and now… NAN. Neighbor Awareness Networking. the lowkey mysterious one:

  • 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)
  • 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)

pmsr stands for peer measurement, and yes she has four structs about it, she's thorough like that πŸ’… and struct cfg80211_update_owe_info(9)?? the OWE girlies stay winning πŸ”₯


the wiphy cinematic universe, aka the biggest block, aka main character energy only:

the way wiphy_work_* and wiphy_delayed_work_* and wiphy_hrtimer_work_* each have their lil quartet of queue / cancel / flush / pending 😭 it's a whole matching set, she's consistent, she's organized, she's THAT girl πŸŽ€


utility functions, the "little helpers who actually run the place" block:

convert channel β†’ kHz, kHz β†’ frequency, frequency β†’ channel, channel β†’ frequency… it's giving musical chairs but make it unit conversion πŸ’€ and yes there's both ieee80211_channel_to_frequency(9) and ieee80211_channel_to_freq_khz(9), they are different, don't @ me 🫢


data path helpers, for when the packets actually gotta move:

the find_* family: find_elem, find_ie, find_ext_elem, find_ext_ie, find_vendor_elem, find_vendor_ie β€” she literally made every combination so you'd never have to guess 😭 queen of not making you think 🌈


regulatory infrastructure, aka the part that decides if your radio is even allowed to vibe:

quick heads up bestie: __cfg80211_get_bss(9) has two underscores in front, and cfg80211_get_bss(9) has zero. they are two different entries, both listed, keep them both, do not "clean up" the underscores πŸ™ˆ also cfg80211_ref_bss(9) and cfg80211_put_bss(9) are a matching pair, and cfg80211_sched_scan_stopped(9) vs cfg80211_sched_scan_stopped_locked(9) is a whole "same but locked" situation, iykyk πŸ’…


rfkill, vendor commands, test mode β€” the side quest block:

not the connect flow having five separate endings (done, bss, result, timeout, and then cfg80211_disconnected(9) for when it all falls apart) 😭 she's emotionally complex, okay, leave her alone πŸ“

and that's where this part of the list lands ✨ the cqm_*_notify quartet (rssi, pktloss, txe, beacon_loss) is a full little notification squad, and yes __cfg80211_radar_event(9) is back with the double underscore again, she never misses πŸ’€ the SEE ALSO list keeps going after this, so don't close the tab β€” more names incoming πŸ«ΆπŸ’–

…and the list keeps going, bestie, because apparently we're not done meeting the whole friend group πŸ’… every one of these is a (9) page just like this one, so go say hi:

Like, that's sixty-four whole cross-references, no cap 😭 the wireless subsystem really said "bring the whole group chat." Screenshot the ones you need and tap in later, bestie 🫢


And that's a wrap on struct bss_parameters(9)! ✨ This lil masterpiece lives over in ./include/net, and it's dated October 2026, so yeah β€” future-coded of it 🌸 go forth, pass your bss_parameters around responsibly, and remember: the struct is the moment πŸ’…πŸ‘‘πŸ“

πŸ“¦ where this page comes from