__libeth_xdp_xmit_do_bulk(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… __libeth_xdp_xmit_do_bulk(9) β€” it's giving Kernel API Manual energy ✨

okay bestie, so we're in the Linux kernel API manual (section 9, the (9) is part of the vibe, not a typo 🫢) and today's main character is __libeth_xdp_xmit_do_bulk β€” the internal function that does the actual heavy lifting behind .ndo_xdp_xmit(). yes, the underscore-prefixed one. the private one. the "not for you, but actually for you" one. πŸ’œ


🌸 NAME 🌸

__libeth_xdp_xmit_do_bulk β€” the internal function that implements .ndo_xdp_xmit(). that's it, that's the whole name section, she's concise πŸ’…


✨ SYNOPSIS ✨

int __libeth_xdp_xmit_do_bulk (struct libeth_xdp_tx_bulk *bq , struct
xdp_frame **frames , u32 n , u32 flags , bool (*flush_bulk)(struct
libeth_xdp_tx_bulk *bq, u32 flags) , void (*finalize)(void *xdpsq, bool
sent, bool flush) );

look at that signature. the way she takes six whole arguments and one of them is a function pointer and another one is also a function pointer 😭 she's highkey doing the most and honestly? iconic.


πŸŽ€ ARGUMENTS πŸŽ€

  • bq β€” the XDP Tx bulk you're queuing frames onto. this is home base, the group chat where all the frames get dropped off. 🏠
  • frames β€” the XDP frames, handed over by the stack. they're not yours, you're just batching them, bestie. πŸ™ˆ
  • n β€” number of frames. literally just the count. respect the count fr fr πŸ”’
  • flags β€” flags passed by the stack. keep them exactly as given, do not improvise, we don't do that here 🚩
  • flush_bulk β€” driver callback to flush an XDP xmit bulk. it's a function pointer: bool (*flush_bulk)(struct libeth_xdp_tx_bulk *bq, u32 flags). the driver supplies it, you call it πŸ”₯
  • finalize β€” driver callback to finalize sending XDP Tx frames on the queue. also a function pointer: void (*finalize)(void *xdpsq, bool sent, bool flush). the closing ceremony, the credits, the final bow πŸ‘‘

πŸ¦‹ DESCRIPTION πŸ¦‹

so what does she actually do? okay, step by step, no cap:

  • Perform the common checks βœ…
  • Map the frags πŸ—ΊοΈ
  • Queue them to the bulk πŸ“₯
  • Then flush the bulk to the XDPSQ 🚿

and if the stack requests it β€” finalize the queue. that's the whole flow. she's a pipeline and she knows it ✨

this is the internal implementation, remember. the do-bulk behind the do-bulk. libeth_xdp_xmit_do_bulk(9) is the public-facing one; this one has the two underscores of destiny. πŸ’€

🌈 RETURN 🌈

she returns the number of frames sent, or -errno on error. that's it. success = a count, failure = that little minus sign and an errno. no ambiguity, she's not mysterious 😌


⭐ SEE ALSO ⭐

the friend group 🫢 β€” and yes, we are listing every single one, because nobody gets left behind:

that's the whole squad, all sixty-something of them, ate and left no crumbs πŸ“


and that's the page, bestie 🧚 source is ./include/net/libeth, dated October 2026, and she's filed under __libeth_xdp_xmit_do_bulk(9) β€” go forth, batch your frames, flush responsibly, and remember: the underscore prefix means internal, so act like you know πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from