ieee80211_sta_block_awake(9)
π ieee80211_sta_block_awake β a Kernel API Manual moment (section 9, bestie) π
okay so picture this: it's a section 9 manual page, she's from the Kernel API Manual, and her whole job is vibing about blocking stations from waking up. no cap, she's lowkey a legend and we're gonna get into it. β¨
πΈ NAME πΈ
ieee80211_sta_block_awake β block station from waking up. that's it. that's the whole name. she does exactly what it says on the tin, main character energy only. π
π¦ SYNOPSIS π¦
void ieee80211_sta_block_awake (struct ieee80211_hw *hw , struct
ieee80211_sta *pubsta , bool block );
look at her. three args, returns nothing, absolutely unbothered. π
π ARGUMENTS π
hwβ the hardware. yeah. THE hardware. the actual chip situation. π«Άpubstaβ the station. the one we're talking about. the girl in question. πblockβ whether to block or unblock. it's abool, so it's giving "yes or no, pick one, no in-between." π₯
β¨ DESCRIPTION β¨
okay so here's the tea β β some devices are picky. like, highkey picky. they require that all frames that are on the queues for a specific station that went to sleep are flushed before a poll response, or frames after the station woke up, can be delivered to that it. and yes, the original says "to that it," we're keeping it, it's iconic, we don't fix it. π
β οΈ important detail bestie: such frames must be rejected by the driver as filtered, with the appropriate status flag. that's not a suggestion, that's the rules. π
this function lets you implement this whole mode in a race-free manner. race-free!! she said no to chaos, yes to order. πβ¨
so how do you actually do the thing? glad you asked:
- a driver must keep track of the number of frames still enqueued for a specific station. bookkeeping era. π
- if this number is not zero when the station goes to sleep, the driver must call this function to force mac80211 to consider the station to be asleep regardless of the station's actual state. like, we're lying to mac80211 for its own good. gaslight gatekeep girlboss. π
- once the number of outstanding frames reaches zero, the driver must call this function again to unblock the station. π
and what does unblocking do? so glad you asked, because it's giving consequences:
- it will cause mac80211 to be able to send ps-poll responses π
- and if the station queried in the meantime, then frames will also be sent out as a result of this π¬
- additionally, the driver will be notified that the station woke up some time after it is unblocked β and that's regardless of whether the station actually woke up while blocked or not. she's a little unpredictable like that, but we love her. π
π SEE ALSO π
okay. deep breath. this list is long long. like, unhinged long. but we don't skip, we don't summarise, we list every single one because that's the assignment and we ate. π₯π
first up, the source of truth:
Kernel file ./include/net/mac80211.h
then the whole extended universe, in order, no cap:
Introduction(9)Calling mac80211 from interrupts(9)Warning(9)Frame format(9)mac80211 workqueue(9)mac80211 software tx queueing(9)HW timestamping(9)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)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_bss_conf(9)struct ieee80211_nan_channel(9)struct ieee80211_nan_peer_map(9)struct ieee80211_nan_peer_sched(9)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)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)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)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)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)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)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)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)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)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)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)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)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)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_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)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)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)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)
likeβ¦ 274 of them. we counted. we're obsessed. iykyk. π§π
and that's the page!! ok bye bestie, go keep those frame counters accurate, stay race-free, and remember β this whole thing lives at ./include/net, dated October 2026, and it's ieee80211_sta_block_awake(9) forever. slay π
β¨ππ¦π
π¦ 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