STRUCT SKB_FRAME_DESC(9)
π struct skb_frame_desc(9) π
okay so bestie, welcome to struct skb_frame_desc β literally the descriptor-info situation for the skb buffer. it's in the Kernel API Manual, and it's giving "small struct, big responsibilities" energy. π
β¨ NAME β¨
struct skb_frame_desc β descriptor information for the skb buffer. that's it, that's the whole vibe. π¦
πΈ SYNOPSIS πΈ
struct skb_frame_desc {
u8 flags;
u8 desc_len;
u8 tx_rate_idx;
u8 tx_rate_flags;
void *desc;
__le32 iv[2];
dma_addr_t skb_dma;
struct ieee80211_sta *sta;
};
no cap, that's the whole thing. now let's meet the members π«Ά
π Members π
flagsβ the frame flags, okurrr. seeenum skb_frame_desc_flagsfor the whole lore.desc_lenβ length of the frame descriptor. it's the desc's length. iconic of it.tx_rate_idxβ the index of the TX rate, and it's used for TX status reporting πtx_rate_flagsβ the TX rate flags, also used for TX status reporting. twins fr fr.descβ pointer to the descriptor part of the frame. β οΈ heads up bestie: this pointer could point to something outside of the scope of theskb->datapointer. so likeβ¦ don't assume it lives insideskb->data, because it does not. be careful out there πivβ the IV/EIV data used during encryption/decryption. little__le32 iv[2]doing crypto duties π₯skb_dmaβ (PCI-only!) the DMA address associated with the sk buffer. PCI-only, so don't come looking for it elsewhere πstaβ the station where the sk buffer was sent. main character station energy β
π Description π
okay so here's the tea: this structure gets placed over the driver_data array. and that means β literally means β this structure should not exceed the size of that array, which is 40 bytes. that's the budget. 40 bytes. don't be greedy, don't overflow it, that's the whole deal π
π SEE ALSO π
the whole friend group, gathered for you π§:
- Kernel file
./drivers/net/wireless/ralink/rt2x00/rt2x00queue.h - Entry
frame size(9) enum data_queue_qid(9)enum skb_frame_desc_flags(9)get_skb_frame_desc(9)enum rxdone_entry_desc_flags(9)RXDONE_SIGNAL_MASK(9)struct rxdone_entry_desc(9)enum txdone_entry_desc_flags(9)struct txdone_entry_desc(9)enum txentry_desc_flags(9)struct txentry_desc(9)enum queue_entry_flags(9)struct queue_entry(9)enum queue_index(9)enum data_queue_flags(9)struct data_queue(9)queue_end(9)tx_queue_end(9)queue_next(9)queue_loop(9)queue_for_each(9)tx_queue_for_each(9)txall_queue_for_each(9)rt2x00queue_for_each_entry(9)rt2x00queue_empty(9)rt2x00queue_full(9)rt2x00queue_threshold(9)rt2x00queue_dma_timeout(9)_rt2x00_desc_read(9)rt2x00_desc_read(9)rt2x00_desc_write(9)
bestie reminder:descmay point outsideskb->data's scope, and this whole struct has to fit in 40 bytes. those two facts are the ones that will get you. π
and that's the page!! mwah π this came from ./drivers/net/wireless/ralink/..., dated October 2026 β go off, kernel docs, you ate. β¨π
π¦ 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