STRUCT IEEE80211_BSS_CONF(9)
π¦ struct ieee80211_bss_conf β the Kernel API Manual tea π«Ά
okay so bestie, welcome to struct ieee80211_bss_conf, which is literally the struct that holds the BSS's changing parameters. yes, changing. it's giving "the vibes of a BSS are always in flux and this is where we keep track" energy. π
β¨ SYNOPSIS β¨
no cap, here's the whole thing, character for character, because we do not play about struct definitions:
struct ieee80211_bss_conf {
struct ieee80211_vif *vif;
struct cfg80211_bss *bss;
const u8 *bssid;
unsigned int link_id;
u8 addr[ETH_ALEN];
u8 htc_trig_based_pkt_ext;
bool uora_exists;
u8 uora_ocw_range;
u16 frame_time_rts_th;
bool he_support;
bool twt_requester;
bool twt_responder;
bool twt_protected;
bool twt_broadcast;
bool use_cts_prot;
bool use_short_preamble;
bool use_short_slot;
bool enable_beacon;
u8 dtim_period;
u16 beacon_int;
u16 assoc_capability;
u64 sync_tsf;
u32 sync_device_ts;
u8 sync_dtim_count;
u32 basic_rates;
struct ieee80211_rate *beacon_rate;
int mcast_rate[NUM_NL80211_BANDS];
u16 ht_operation_mode;
s32 cqm_rssi_thold;
u32 cqm_rssi_hyst;
s32 cqm_rssi_low;
s32 cqm_rssi_high;
struct ieee80211_chan_req chanreq;
struct ieee80211_mu_group_data mu_group;
bool qos;
bool hidden_ssid;
int txpower;
enum nl80211_tx_power_setting txpower_type;
struct ieee80211_p2p_noa_attr p2p_noa_attr;
bool allow_p2p_go_ps;
u16 max_idle_period;
bool protected_keep_alive;
bool ftm_responder;
struct ieee80211_ftm_responder_params *ftmr_params;
bool nontransmitted;
struct ieee80211_bss_conf *tx_bss_conf;
u8 transmitter_bssid[ETH_ALEN];
u8 bssid_index;
u8 bssid_indicator;
bool ema_ap;
u8 profile_periodicity;
struct {
u32 params;
u16 nss_set;
} he_oper;
struct ieee80211_he_obss_pd he_obss_pd;
struct cfg80211_he_bss_color he_bss_color;
struct ieee80211_fils_discovery fils_discovery;
u32 unsol_bcast_probe_resp_interval;
struct cfg80211_bitrate_mask beacon_tx_rate;
enum ieee80211_ap_reg_power power_type;
struct ieee80211_parsed_tpe tpe;
u8 pwr_reduction;
bool eht_support;
bool epcs_support;
bool uhr_support;
bool csa_active;
bool mu_mimo_owner;
struct ieee80211_chanctx_conf *chanctx_conf;
bool color_change_active;
u8 color_change_color;
bool ht_ldpc;
bool vht_ldpc;
bool he_ldpc;
bool vht_su_beamformer;
bool vht_su_beamformee;
bool vht_mu_beamformer;
bool vht_mu_beamformee;
bool he_su_beamformer;
bool he_su_beamformee;
bool he_mu_beamformer;
bool he_full_ul_mumimo;
bool eht_su_beamformer;
bool eht_su_beamformee;
bool eht_mu_beamformer;
bool eht_80mhz_full_bw_ul_mumimo;
bool eht_disable_mcs15;
u8 bss_param_ch_cnt;
u8 bss_param_ch_cnt_link_id;
u8 enh_bss_param_ch_cnt;
u8 enh_bss_param_ch_cnt_link_id;
u8 s1g_long_beacon_period;
struct ieee80211_bss_npca_params npca;
};
β¨ iconic. no notes. moving on to the members, because there are so many and every single one is getting its moment. π
πΈ Members πΈ
vifβ reference to owning VIF. the main character VIF, fr fr.bssβ thecfg80211bss descriptor. Valid only for a station, and only when associated. Note: This contains information which is not necessarily authenticated. For example, information coming from probe responses. π so like, don't blindly trust it, bestie.bssidβ The BSSID for this BSS.link_idβ link ID, or0for non-MLO.addrβ (link) address used locally.htc_trig_based_pkt_extβ default PE in4usunits, if BSS supports HE.uora_existsβ is the UORA element advertised by AP.uora_ocw_rangeβ UORA element's OCW Range field.frame_time_rts_thβ HE duration RTS threshold, in units of32us.he_supportβ does this BSS support HE.twt_requesterβ does this BSS support TWT requester (relevant for managed mode only, set if the AP advertises TWT responder role).twt_responderβ does this BSS support TWT requester (relevant for managed mode only, set if the AP advertises TWT responder role). yes, the description says requester again β we are keeping it exactly as the original says it. no editing the lore. πtwt_protectedβ does this BSS support protected TWT frames.twt_broadcastβ does this BSS support broadcast TWT.use_cts_protβ use CTS protection.use_short_preambleβ use802.11bshort preamble.use_short_slotβ use short slot time (only relevant for ERP).enable_beaconβ whether beaconing should be enabled or not.dtim_periodβ num of beacons before the next DTIM, for beaconing, valid in station mode only if after the driver was notified with theBSS_CHANGED_BEACON_INFOflag, will be non-zero then.beacon_intβ beacon interval.assoc_capabilityβ capabilities taken from assoc resp.sync_tsfβ last beacon's/probe response's TSF timestamp (could be old as it may have been received during scanning long ago). If the HW flagIEEE80211_HW_TIMING_BEACON_ONLYis set, then this can only come from a beacon, but might not become valid until after association when a beacon is received (which is notified with theBSS_CHANGED_DTIMflag.). See alsosync_dtim_countimportant notice.sync_device_tsβ the device timestamp corresponding to thesync_tsf, the driver/device can use this to calculate synchronisation (seesync_tsf). See alsosync_dtim_countimportant notice.sync_dtim_countβ Only valid whenIEEE80211_HW_TIMING_BEACON_ONLYis requested, seesync_tsf/sync_device_ts. IMPORTANT: These threesync_*parameters would possibly be out of sync by the time the driver will use them. The synchronized view is currently guaranteed only in certain callbacks. Note also that this is not used with MLD associations, mac80211 doesn't know how to track beacons for all of the links for this. π so yeah, timing is a whole situation.basic_ratesβ bitmap of basic rates, each bit stands for an index into the rate table configured by the driver in the current band.beacon_rateβ associated AP's beacon TX rate.mcast_rateβ per-band multicast rate index+ 1(0: disabled).ht_operation_modeβ HT operation mode like instruct ieee80211_ht_operation. This field is only valid when the channel is a wide HT/VHT channel. Note that with TDLS this can be the case (channel is HT, protection must be used from this field) even when the BSS association isn't using HT.cqm_rssi_tholdβ Connection quality monitor RSSI threshold, a zero value implies disabled. As with thecfg80211callback, a change here should cause an event to be sent indicating where the current value is in relation to the newly configured threshold.cqm_rssi_hystβ Connection quality monitor RSSI hysteresis.cqm_rssi_lowβ Connection quality monitor RSSI lower threshold, a zero value implies disabled. This is an alternative mechanism to the single threshold event and can't be enabled simultaneously with it.cqm_rssi_highβ Connection quality monitor RSSI upper threshold.chanreqβ Channel request for this BSS β the hardware might be configured a higher bandwidth than this BSS uses, for example. π hardware doing the most, as usual.mu_groupβ VHT MU-MIMO group membership data.qosβ This is a QoS-enabled BSS.hidden_ssidβ The SSID of the currentvifis hidden. Only valid in AP-mode.txpowerβ TX power in dBm.INT_MINmeans not configured.txpower_typeβ TX power adjustment used to control per packet Transmit Power Control (TPC) in lower driver for the currentvif. In particular TPC is enabled if value passed intxpower_typeisNL80211_TX_POWER_LIMITED(allow using less than specified from userspace), whereas TPC is disabled iftxpower_typeis set toNL80211_TX_POWER_FIXED(use value configured from userspace).p2p_noa_attrβ P2P NoA attribute for P2P powersave.allow_p2p_go_psβ indication for AP or P2P GO interface, whether it's allowed to use P2P PS mechanism or not. AP/P2P GO is not allowed to use P2P PS if it has associated clients without P2P PS support.max_idle_periodβ the time period during which the station can refrain from transmitting frames to its associated AP without being disassociated. In units of1000TUs. Zero value indicates that the AP did not include a (valid) BSS Max Idle Period Element.protected_keep_aliveβ if set, indicates that the station should send an RSN protected frame to the AP to reset the idle timer at the AP for the station.ftm_responderβ whether to enable or disable fine timing measurement FTM responder functionality.ftmr_paramsβ configurable lci/civic parameter when enabling FTM responder.nontransmittedβ this BSS is a nontransmitted BSS profile.tx_bss_confβ Pointer to the BSS configuration of transmitting interface if MBSSID is enabled. This pointer is RCU-protected due to CSA finish and BSS color change flows accessing it. π₯ RCU-protected, bestie, respect the RCU.transmitter_bssidβ the address of transmitter AP.bssid_indexβ index inside the multiple BSSID set.bssid_indicatorβ2^bssid_indicatoris the maximum number of APs in set.ema_apβ AP supports enhancements of discovery and advertisement of nontransmitted BSSIDs.profile_periodicityβ the least number of beacon frames need to be received in order to discover all the nontransmitted BSSIDs in the set.he_operβ HE operation information of the BSS (AP/Mesh) or of the AP we are connected to (STA).he_obss_pdβ OBSS Packet Detection parameters.he_bss_colorβ BSS coloring settings, if BSS supports HE.fils_discoveryβ FILS discovery configuration.unsol_bcast_probe_resp_intervalβ Unsolicited broadcast probe response interval.beacon_tx_rateβ The configured beacon transmit rate that needs to be passed to driver when rate control is offloaded to firmware.power_typeβ power type of BSS for6 GHz.tpeβ the transmit power envelope info π« like, the actual power vibes this BSS is serving.pwr_reductionβ the power constraint of the BSS. lowkey a budget cap on wattage πeht_supportβ does this BSS support EHT? yes or no bestie β¨epcs_supportβ does this BSS support EPCS? πuhr_supportβ does this BSS support UHR? πcsa_activeβ marks whether a channel switch is going on. like a little "brb moving" sign π¦mu_mimo_ownerβ indicates the interface owns MU-MIMO capability π it's giving main character holding the keyschanctx_confβ the channel context this interface is assigned to, orNULLwhen it's not assigned. and here's the tea: this pointer is RCU-protected, because the TX path needs to access it. so even though the netdev carrier will always be off when it'sNULL, there can still be races, and packets could be processed after it switches back toNULL. so like, don't get cocky about it π
ngl, that one's a real one β the pointer going NULL doesn't magically stop everything, so respect the RCU rules fr fr.
color_change_activeβ marks whether a color change is ongoing π¨β¨color_change_colorβ the bss color that'll be used after the change. so like, the glow-up target πht_ldpcβ in AP mode, indicates the interface has HT LDPC capability π«Άvht_ldpcβ in AP mode, indicates the interface has VHT LDPC capability πhe_ldpcβ in AP mode, indicates the interface has HE LDPC capability πΈvht_su_beamformerβ in AP mode, does this BSS support operating as an VHT SU beamformer? π‘vht_su_beamformeeβ in AP mode, does this BSS support operating as an VHT SU beamformee? π‘vht_mu_beamformerβ in AP mode, does this BSS support operating as an VHT MU beamformer? π‘vht_mu_beamformeeβ in AP mode, does this BSS support operating as an VHT MU beamformee? π‘he_su_beamformerβ in AP mode, does this BSS support operating as an HE SU beamformer? π₯he_su_beamformeeβ in AP mode, does this BSS support operating as an HE SU beamformee? π₯he_mu_beamformerβ in AP mode, does this BSS support operating as an HE MU beamformer? π₯he_full_ul_mumimoβ does this BSS support reception (on an AP) or transmission (on a non-AP STA) of an HE TB PPDU on an RU that spans the entire PPDU bandwidth? literally the whole bandwidth, no crumbs π€eht_su_beamformerβ in AP mode, does this BSS enable operation as an EHT SU beamformer? βeht_su_beamformeeβ in AP mode, does this BSS enable operation as an EHT SU beamformee? βeht_mu_beamformerβ in AP mode, does this BSS enable operation as an EHT MU beamformer? βeht_80mhz_full_bw_ul_mumimoβ in AP mode, does this BSS support reception of an EHT TB PPDU on an RU that spans the entire PPDU bandwidth? bestie that's the full80mhzof it, iconic πeht_disable_mcs15β disables EHT-MCS 15 reception capability. like, turning it off on purpose π«bss_param_ch_cntβ in BSS mode, the BSS params change count. this is the latest known value, and it can come from this link's beacon or from a beacon sent by another link. sneaky but valid πbss_param_ch_cnt_link_idβ in BSS mode, thelink_idof the beacon that updatedbss_param_ch_cnt. okay example time because this one's a whole saga: if link 1 doesn't hear its beacons, and link 2 sends a beacon with an RNR element that updated link 1's BSS params change count, then link 1'sbss_param_ch_cnt_link_idwill be2. that means link 1 knows that link 2 was the link that updated itsbss_param_ch_cntvalue. and if link 1 hears its own beacon again,bss_param_ch_cnt_link_idgets updated to1β even ifbss_param_ch_cntdidn't change. this lets the link know it heard the latest value from its own beacon, as opposed to hearing its value from another link's beacon. chef's kiss tracking π§enh_bss_param_ch_cntβ in BSS mode, the enhanced BSS parameters change counter. seebss_param_ch_cntβ it works the exact same way π«enh_bss_param_ch_cnt_link_idβ in BSS mode, thelink_idfor the enhanced BSS parameter change counter. seebss_param_ch_cnt_link_idπs1g_long_beacon_periodβ number of beacon intervals between each long beacon transmission. so like, the gap between the long ones π¦npcaβ NPCA parameters π
π°οΈ Description π°οΈ
okay so the whole vibe of this structure is: it keeps information about a BSS β and an association to that BSS β that can change during the lifetime of the BSS. like, it's the living document of a BSS, not the frozen-at-birth stuff. if it evolves mid-run, it lives here π
π SEE ALSO π
okay bestie, deep breath. this is the part where the page stops explaining and just lists. and lists. and lists. it is giving phone-book energy, i'm not gonna lie to you. but every single one of these is a real section (9) page and every single one of them is here, so scroll with me and don't skip, i'm watching π«Ά
first up, the mac80211 starter pack:
./include/net/mac80211.hβ the kernel file this whole page lives in, paired withIntroduction(9)Calling mac80211 from interrupts(9)Warning(9)Frame format(9)mac80211 workqueue(9)mac80211 software tx queueing(9)HW timestamping(9)
then the queue + channel-context girlies π
enum ieee80211_max_queues(9)enum ieee80211_ac_numbers(9)struct ieee80211_tx_queue_params(9)enum ieee80211_chanctx_change(9)struct ieee80211_chan_req(9)struct ieee80211_chanctx_conf(9)enum ieee80211_chanctx_switch_mode(9)struct ieee80211_vif_chanctx_switch(9)
events, measurement, and a whole nan era πΈ
enum ieee80211_bss_change(9)enum ieee80211_event_type(9)enum ieee80211_rssi_event_data(9)struct ieee80211_rssi_event(9)enum ieee80211_mlme_event_data(9)enum ieee80211_mlme_event_status(9)struct ieee80211_mlme_event(9)struct ieee80211_ba_event(9)struct ieee80211_event(9)struct ieee80211_mu_group_data(9)struct ieee80211_ftm_responder_params(9)struct ieee80211_fils_discovery(9)struct ieee80211_parsed_tpe(9)struct ieee80211_bss_npca_params(9)struct ieee80211_nan_channel(9)struct ieee80211_nan_peer_map(9)struct ieee80211_nan_peer_sched(9)
tx/rx era β the flags, the rates, the statuses β¨
enum mac80211_tx_info_flags(9)enum mac80211_tx_control_flags(9)enum mac80211_tx_status_flags(9)enum mac80211_rate_control_flags(9)struct ieee80211_tx_rate(9)struct ieee80211_tx_info(9)struct ieee80211_tx_status(9)struct ieee80211_scan_ies(9)ieee80211_tx_info_clear_status(9)enum mac80211_rx_flags(9)enum mac80211_rx_encoding_flags(9)struct ieee80211_rx_status(9)
conf, vif config, and ttlm things (say that three times fast, i dare you):
enum ieee80211_conf_flags(9)enum ieee80211_conf_changed(9)enum ieee80211_smps_mode(9)struct ieee80211_conf(9)struct ieee80211_channel_switch(9)enum ieee80211_vif_flags(9)enum ieee80211_offload_flags(9)struct ieee80211_eml_params(9)struct ieee80211_nan_sched_cfg(9)struct ieee80211_vif_cfg(9)struct ieee80211_neg_ttlm(9)enum ieee80211_neg_ttlm_res(9)
the vif + key crowd π
struct ieee80211_vif(9)ieee80211_vif_usable_links(9)ieee80211_vif_is_mld(9)ieee80211_vif_link_active(9)wdev_to_ieee80211_vif(9)ieee80211_vif_to_wdev(9)enum ieee80211_key_flags(9)struct ieee80211_key_conf(9)struct ieee80211_key_seq(9)enum set_key_cmd(9)
stations, hardware, and the little helpers that hold it all together π
enum ieee80211_sta_state(9)enum ieee80211_sta_rx_bandwidth(9)struct ieee80211_sta_rates(9)struct ieee80211_sta_txpwr(9)struct ieee80211_sta_aggregates(9)struct ieee80211_link_sta(9)struct ieee80211_sta(9)enum sta_notify_cmd(9)struct ieee80211_tx_control(9)struct ieee80211_txq(9)enum ieee80211_hw_flags(9)struct ieee80211_hw(9)struct ieee80211_scan_request(9)struct ieee80211_tdls_ch_sw_params(9)wiphy_to_ieee80211_hw(9)SET_IEEE80211_DEV(9)SET_IEEE80211_PERM_ADDR(9)ieee80211_free_txskb(9)ieee80211_purge_tx_queue(9)
and here are the ones with the cute prose titles instead of an underscore situation, no cap:
Hardware crypto acceleration(9)Powersave support(9)Beacon filter support(9)Spatial multiplexing power save(9)Frame filtering(9)AP support for powersaving clients(9)HW queue control(9)
back to the underscored icon lineup:
enum ieee80211_filter_flags(9)enum ieee80211_ampdu_mlme_action(9)struct ieee80211_ampdu_params(9)enum ieee80211_frame_release_type(9)enum ieee80211_rate_control_changed(9)enum ieee80211_roc_type(9)enum ieee80211_reconfig_type(9)struct ieee80211_prep_tx_info(9)struct ieee80211_ops(9)
allocating, registering, and all the LED cuteness (the LEDs are genuinely iconic, i don't make the rules):
ieee80211_alloc_hw_nm(9)ieee80211_alloc_hw(9)ieee80211_register_hw(9)struct ieee80211_tpt_blink(9)enum ieee80211_tpt_led_trigger_flags(9)ieee80211_get_tx_led_name(9)ieee80211_get_rx_led_name(9)ieee80211_get_assoc_led_name(9)ieee80211_get_radio_led_name(9)ieee80211_create_tpt_led_trigger(9)ieee80211_unregister_hw(9)ieee80211_free_hw(9)ieee80211_restart_hw(9)
rx, powersave, and tx status β the whole data path bestie π
ieee80211_rx_list(9)ieee80211_rx_napi(9)ieee80211_rx(9)ieee80211_rx_irqsafe(9)ieee80211_rx_ni(9)ieee80211_sta_ps_transition(9)ieee80211_sta_ps_transition_ni(9)ieee80211_sta_pspoll(9)ieee80211_sta_uapsd_trigger(9)ieee80211_sta_set_buffered(9)ieee80211_get_tx_rates(9)ieee80211_tx_rate_update(9)ieee80211_tx_status_skb(9)ieee80211_tx_status_ext(9)ieee80211_tx_status_noskb(9)ieee80211_tx_status_ni(9)ieee80211_tx_status_irqsafe(9)ieee80211_report_low_ack(9)
beacon era π (yes there are this many, yes they all matter)
struct ieee80211_mutable_offsets(9)ieee80211_beacon_get_template(9)ieee80211_beacon_get_template_ema_index(9)struct ieee80211_ema_beacons(9)ieee80211_beacon_get_template_ema_list(9)ieee80211_beacon_free_ema_list(9)ieee80211_beacon_get_tim(9)ieee80211_beacon_get(9)ieee80211_beacon_update_cntdwn(9)ieee80211_beacon_set_cntdwn(9)ieee80211_csa_finish(9)ieee80211_beacon_cntdwn_is_complete(9)ieee80211_color_change_finish(9)
all the frame getters and their duration besties:
ieee80211_proberesp_get(9)ieee80211_pspoll_get(9)ieee80211_nullfunc_get(9)ieee80211_probereq_get(9)ieee80211_rts_get(9)ieee80211_rts_duration(9)ieee80211_ctstoself_get(9)ieee80211_ctstoself_duration(9)ieee80211_generic_frame_duration(9)ieee80211_get_buffered_bc(9)
tkip + key sequence things, very "i know what an IV is" of them π
ieee80211_get_tkip_p1k_iv(9)ieee80211_get_tkip_p1k(9)ieee80211_get_tkip_rx_p1k(9)ieee80211_get_tkip_p2k(9)ieee80211_tkip_add_iv(9)ieee80211_get_key_rx_seq(9)ieee80211_set_key_rx_seq(9)ieee80211_gtk_rekey_add(9)ieee80211_gtk_rekey_notify(9)ieee80211_key_mic_failure(9)ieee80211_key_replay(9)
queue control + scanning:
ieee80211_wake_queue(9)ieee80211_stop_queue(9)ieee80211_queue_stopped(9)ieee80211_stop_queues(9)ieee80211_wake_queues(9)ieee80211_scan_completed(9)ieee80211_sched_scan_results(9)ieee80211_sched_scan_stopped(9)
iteration girlies (the for_each_* ones are lowkey the moment):
enum ieee80211_interface_iteration_flags(9)ieee80211_iterate_interfaces(9)ieee80211_iterate_active_interfaces(9)ieee80211_iterate_active_interfaces_atomic(9)for_each_interface(9)for_each_active_interface(9)ieee80211_iterate_active_interfaces_mtx(9)ieee80211_iterate_stations_atomic(9)for_each_station(9)ieee80211_iterate_stations_mtx(9)ieee80211_queue_work(9)ieee80211_queue_delayed_work(9)
aggregation, stations, and airtime π₯
ieee80211_refresh_tx_agg_session_timer(9)ieee80211_start_tx_ba_session(9)ieee80211_start_tx_ba_cb_irqsafe(9)ieee80211_stop_tx_ba_session(9)ieee80211_stop_tx_ba_cb_irqsafe(9)ieee80211_find_sta(9)ieee80211_find_sta_by_ifaddr(9)ieee80211_find_sta_by_link_addrs(9)ieee80211_sta_block_awake(9)ieee80211_sta_eosp(9)ieee80211_send_eosp_nullfunc(9)ieee80211_sta_recalc_aggregates(9)ieee80211_sta_register_airtime(9)ieee80211_txq_airtime_check(9)ieee80211_txq_aql_pending(9)
iteration round two + all the "something went wrong" notifications π
ieee80211_iter_keys(9)ieee80211_iter_keys_rcu(9)ieee80211_iter_chan_contexts_atomic(9)ieee80211_iter_chan_contexts_mtx(9)ieee80211_ap_probereq_get(9)ieee80211_beacon_loss(9)ieee80211_connection_loss(9)ieee80211_disconnect(9)ieee80211_resume_disconnect(9)ieee80211_hw_restart_disconnect(9)ieee80211_cqm_rssi_notify(9)ieee80211_cqm_beacon_loss_notify(9)ieee80211_radar_detected(9)ieee80211_chswitch_done(9)ieee80211_channel_switch_disconnect(9)ieee80211_request_smps(9)ieee80211_ready_on_channel(9)ieee80211_remain_on_channel_expired(9)ieee80211_stop_rx_ba_session(9)ieee80211_mark_rx_ba_filtered_frames(9)ieee80211_send_bar(9)ieee80211_manage_rx_ba_offl(9)ieee80211_start_rx_ba_session_offl(9)ieee80211_stop_rx_ba_session_offl(9)ieee80211_rx_ba_timer_expired(9)
rate control, capability checks, and the noa/tdls crew π¦
struct ieee80211_tx_rate_control(9)enum rate_control_capabilities(9)rate_control_set_rates(9)ieee80211_get_he_iftype_cap_vif(9)ieee80211_get_he_6ghz_capa_vif(9)ieee80211_get_eht_iftype_cap_vif(9)ieee80211_get_uhr_iftype_cap_vif(9)ieee80211_update_mu_groups(9)ieee80211_ave_rssi(9)ieee80211_calculate_rx_timestamp(9)ieee80211_report_wowlan_wakeup(9)ieee80211_tx_prepare_skb(9)ieee80211_parse_tx_radiotap(9)struct ieee80211_noa_data(9)ieee80211_parse_p2p_noa(9)ieee80211_update_p2p_noa(9)ieee80211_tdls_oper_request(9)ieee80211_reserve_tid(9)ieee80211_unreserve_tid(9)
and the final stretch, we made it, i'm so proud of you π
ieee80211_tx_dequeue(9)ieee80211_tx_dequeue_ni(9)ieee80211_handle_wake_tx_queue(9)ieee80211_next_txq(9)ieee80211_txq_schedule_start(9)ieee80211_schedule_txq(9)ieee80211_return_txq(9)ieee80211_txq_may_transmit(9)ieee80211_txq_get_depth(9)ieee80211_nan_func_terminated(9)ieee80211_nan_func_match(9)ieee80211_nan_sched_update_done(9)ieee80211_nan_cluster_joined(9)ieee80211_nan_try_evacuate(9)ieee80211_calc_rx_airtime(9)ieee80211_calc_tx_airtime(9)ieee80211_get_fils_discovery_tmpl(9)ieee80211_get_unsol_bcast_probe_resp_tmpl(9)ieee80211_obss_color_collision_notify(9)ieee80211_is_tx_data(9)ieee80211_set_active_links(9)ieee80211_set_active_links_async(9)ieee80211_send_teardown_neg_ttlm(9)ieee80211_chan_width_to_rx_bw(9)ieee80211_prepare_rx_omi_bw(9)ieee80211_finalize_rx_omi_bw(9)ieee80211_vif_nan_started(9)ieee80211_encrypt_tx_skb(9)
and that's the whole list, bestie. every single one, not a crumb left behind. okay bye, ily, go read a struct π
this page calls ./include/net home, it's dated October 2026, and it is, forever and always, struct ieee80211_bss_conf(9) β periodt π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms