libeth_xdp_xmit_frame_dma(9)
π libeth_xdp_xmit_frame_dma π
okay bestie, welcome to the Kernel API Manual β¨ this one's a tiny little internal helper β libeth_xdp_xmit_frame_dma β and honestly it's giving "small but crucial" main character energy π
πΈ NAME πΈ
libeth_xdp_xmit_frame_dma β an internal helper that gets you access to the DMA of an &xdp_frame π
β¨ SYNOPSIS β¨
libeth_xdp_xmit_frame_dma (xf );
(no cap, that's literally the whole call β one argument, one vibe check π )
π¦ ARGUMENTS π¦
xfβ a pointer to the XDP frame π that's it, that's the whole input, she's low maintenance
π DESCRIPTION π
so here's the situation: there's no place inside libeth_xdp_tx_frame to store the DMA address for an xdp_frame head π like, nowhere. not a single slot. tragic.
so what do we do? we use the headroom π«Ά the address gets placed right after the frame struct, and it's naturally aligned β so it just slides in there all cute and correct β¨
π RETURN π
a pointer to the DMA address you should use π that's the whole gift, bestie π
π§ SEE ALSO π§
the whole friend group, no one left out fr fr π β plus the kernel file ./include/net/libeth/xdp.h:
struct libeth_xdp_buff(9)__LIBETH_XDP_ONSTACK_BUFF(9)LIBETH_XDP_ONSTACK_BUFF(9)libeth_xdpsq_num(9)libeth_xdpsq_shared(9)libeth_xdpsq_id(9)libeth_xdpsq_get(9)libeth_xdpsq_put(9)libeth_xdpsq_lock(9)libeth_xdpsq_unlock(9)libeth_xdpsq_deinit_timer(9)libeth_xdpsq_queue_timer(9)libeth_xdpsq_run_timer(9)enum (anonymous)(9)β yes this one shows up twice in the original list, keeping both because I don't gatekeep πenum (anonymous)(9)struct libeth_xdp_tx_frame(9)struct libeth_xdp_tx_bulk(9)LIBETH_XDP_ONSTACK_BULK(9)struct libeth_xdpsq(9)struct libeth_xdp_tx_desc(9)libeth_xdp_ptr_to_priv(9)libeth_xdp_priv_to_ptr(9)libeth_xdp_tx_xmit_bulk(9)libeth_xdp_tx_queue_head(9)libeth_xdp_tx_queue_frag(9)libeth_xdp_tx_queue_bulk(9)libeth_xdp_tx_fill_stats(9)libeth_xdp_tx_fill_buf(9)__libeth_xdp_tx_flush_bulk(9)libeth_xdp_tx_flush_bulk(9)libeth_xdp_xmit_init_bulk(9)libeth_xdp_xmit_queue_head(9)libeth_xdp_xmit_queue_frag(9)libeth_xdp_xmit_queue_bulk(9)libeth_xdp_xmit_fill_buf(9)libeth_xdp_xmit_flush_bulk(9)__libeth_xdp_xmit_do_bulk(9)libeth_xdp_xmit_do_bulk(9)libeth_xdp_tx_init_bulk(9)libeth_xdp_init_buff(9)libeth_xdp_save_buff(9)libeth_xdp_return_stash(9)libeth_xdp_return_buff(9)libeth_xdp_prepare_buff(9)libeth_xdp_process_buff(9)libeth_xdp_buff_stats_frags(9)__libeth_xdp_run_prog(9)__libeth_xdp_run_flush(9)libeth_xdp_run_prog(9)__libeth_xdp_run_pass(9)libeth_xdp_run_pass(9)libeth_xdp_finalize_rx(9)LIBETH_XDP_DEFINE_TIMER(9)LIBETH_XDP_DEFINE_FLUSH_TX(9)LIBETH_XDP_DEFINE_FLUSH_XMIT(9)LIBETH_XDP_DEFINE_RUN_PROG(9)LIBETH_XDP_DEFINE_RUN_PASS(9)LIBETH_XDP_DEFINE_RUN(9)LIBETH_XDP_DEFINE_FINALIZE(9)libeth_xdp_buff_to_rq(9)libeth_xdpmo_rx_hash(9)__libeth_xdp_complete_tx(9)libeth_xdp_set_features(9)libeth_xdp_set_features_noredir(9)
and that's the whole page, bestie, you ate it up π source lives at ./include/net/libeth, dated October 2026 β mwah, go read some XDP code ππ·
π¦ 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