ieee80211_rx_napi(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹ ieee80211_rx_napi(9) πŸ¦‹

okay so bestie, welcome to the Kernel API Manual ✨ β€” yes, the actual kernel manual, we're doing this, we're built different today. This page is all about ieee80211_rx_napi, aka the ✨receive frame from NAPI context✨ girlie. She's iconic, she's specific, and she has opinions about how you call her. Buckle up πŸ’…


🌸 NAME 🌸

ieee80211_rx_napi β€” receive frame from NAPI context 🫢


⭐ SYNOPSIS ⭐

void ieee80211_rx_napi (struct ieee80211_hw *hw , struct ieee80211_sta
*sta , struct sk_buff *skb , struct napi_struct *napi );

that's the whole signature, no cap πŸ‘‘


πŸŽ€ ARGUMENTS πŸŽ€

  • hw β€” the hardware this frame came in on πŸ–₯️ like, which wifi card is having a moment rn
  • sta β€” the station the frame was received from, or NULL (yes, NULL is a valid vibe here, don't panic πŸ™ˆ)
  • skb β€” the buffer to receive, owned by mac80211 after this call πŸ‘€ read that again: after this call it's mac80211's, not yours, hands off fr
  • napi β€” the NAPI context πŸ’«

πŸ’– DESCRIPTION πŸ’–

Use this function to hand received frames to mac80211. Like, this is the handoff. You got a frame? You give it to mac80211. That's the whole relationship 🌈

The receive buffer in skb must start with an IEEE 802.11 header. Not optional, not negotiable, it's giving non-negotiable πŸ’…

In case of a paged skb is used, the driver is recommended to put the ieee80211 header of the frame on the linear part of the skb to avoid memory allocation and/or memcpy by the stack. lowkey a glow-up move β€” do it and you dodge allocs and memcpys 🧚✨

⚠️ THE RULES, BESTIE, DO NOT SKIP THESE ⚠️ - This function may not be called in IRQ context. absolutely not. 🚫 - Calls to this function for a single hardware must be synchronized against each other. no racing, we don't do that here 😀 - Calls to this function, ieee80211_rx_ni and ieee80211_rx_irqsafe may not be mixed for a single hardware. pick a lane, stay in it πŸ’€ - Must not run concurrently with ieee80211_tx_status_skb or ieee80211_tx_status_ni. these are not friends, keep them apart πŸ™…β€β™€οΈ - This function must be called with BHs disabled.

BHs disabled, periodt. That's not a suggestion, that's the vibe check and you failed if you skipped it 😭


πŸ¦‹ SEE ALSO πŸ¦‹

okay this is the part where the page just keeps going β€” and we mean it, every single one of these made the list and we're not cutting a single one. here's the whole friend group πŸ’œ

✨ the kernel file + the intros ✨

  • Kernel file ./include/net/mac80211.h
  • Introduction(9)
  • Calling mac80211 from interrupts(9)
  • Warning(9)
  • Frame format(9)
  • mac80211 workqueue(9)
  • mac80211 software tx queueing(9)
  • HW timestamping(9)

πŸŽ€ enums & structs: the early era πŸŽ€

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

πŸ’« events, events, and more events πŸ’«

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

πŸ”₯ tx info & rx flags, the main characters πŸ”₯

  • 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 era 🌸

πŸ”‘ keys, stations, hardware πŸ”‘

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

🧚 hw macros & the ops crew 🧚

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

πŸ’œ alloc / register / unregister πŸ’œ

πŸ’€ rx family (our girl's siblings) πŸ’€

πŸ“ sta power save & tx status πŸ“

πŸ‘‘ beacons & frames, absolute royalty πŸ‘‘

πŸ” tkip & key things πŸ”

🌈 queues & scanning 🌈

πŸ¦‹ iterating, bestie πŸ¦‹

🫢 workqueue + block ack 🫢

πŸ‘€ finding stations & airtime πŸ‘€

🧚 itering keys & chan contexts 🧚

😭 losses, disconnects, and drama 😭

πŸ’… rx block ack, offloaded edition πŸ’…

⭐ rate control & caps ⭐

🌸 p2p noa & tdls 🌸

πŸ”₯ txq, the whole saga πŸ”₯

🌈 nan, airtime math, fils 🌈

πŸ‘‘ the final stretch, we made it πŸ‘‘


and that's the whole page, bestie, you ate that πŸ’…βœ¨

πŸŽ€ cute little sign-off: this gem lives in ./include/net, the version is October 2026, and the page is β€” say it with me β€” ieee80211_rx_napi(9). bye, ily, go disable those BHs πŸ«ΆπŸ’–
πŸ“¦ where this page comes from