STRUCT LIBETH_RQ_NAPI_STATS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– NAME πŸ’–

struct libeth_rq_napi_stats β€” the "hot" counters you update in the Rx polling loop, bestie ✨

Like, this is the little stats struct that lives on the fast path, so it's giving "keep it tight, keep it quick" energy fr fr πŸƒβ€β™€οΈπŸ’¨


πŸ¦‹ SYNOPSIS πŸ¦‹

struct libeth_rq_napi_stats {
    union {
      struct {
        u32 packets;
        u32 bytes;
        u32 fragments;
        u32 hsplit;
      };
      u32 raw[];
   };
};

No cap, that's the whole thing β€” nested anonymous union + anonymous struct so you can name the fields or index them like array, your choice πŸ’…


🌸 Members 🌸

okay so let's go member by member, iykyk πŸ‘‘

  • {unnamed_union} β€” anonymous, it just vibes there with no name 🫢
  • {unnamed_struct} β€” also anonymous, also just existing ✨
  • packets β€” received frames counter, the classic "how many did we get" number πŸ“¦
  • bytes β€” sum of bytes of the received frames above, so like, the size total for those same frames πŸ”’
  • fragments β€” sum of fragments of received S/G frames, S/G being scatter-gather bestie 🧩
  • hsplit β€” number of frames the device performed the header split for, so hsplit = header split, iconic πŸŽ€
  • raw β€” alias to access all the fields as an array, absolutely main character energy for iterating πŸ‘‘
lowkey the whole point: raw lets you loop over everything without naming each field, and the anonymous union/struct makes both access styles work. slay πŸ’…

🌈 SEE ALSO 🌈

  • Kernel file ./include/net/libeth/types.h β€” go read it, it ate πŸ”₯
  • struct libeth_sq_napi_stats(9)
  • struct libeth_xdpsq_napi_stats(9)
  • struct libeth_xdpsq_lock(9)
  • struct libeth_xdpsq_timer(9)
  • struct libeth_xdp_buff_stash(9)

the whole squad, fr fr πŸ‘―β€β™€οΈ


and that's the page, bestie πŸŽ€ source lives at ./include/net/libeth, dated October 2026, and the name on the cover is struct libeth_rq_napi_stats(9) β€” periodt πŸ’œπŸ¦‹

πŸ“¦ where this page comes from