STRUCT IAVF_RX_DESC(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct iavf_rx_desc(9) β€” the Kernel API Manual glow-up πŸ’…

okay bestie, sit down, because we're about to read a receive descriptor together and honestly? it's giving dual-personality icon. this is struct iavf_rx_desc, and it handles both legacy and flexible layouts β€” yes, both, at the same time, in the same struct. main character energy fr fr πŸŽ€


✨ SYNOPSIS ✨

struct iavf_rx_desc {
    aligned_le64 qw0;
  #define IAVF_RXD_LEGACY_RSS_M                   GENMASK_ULL(63, 32);
  #define IAVF_RXD_LEGACY_L2TAG1_M                GENMASK_ULL(33, 16);
  #define IAVF_RXD_FLEX_PTYPE_M                   GENMASK_ULL(25, 16);
  #define IAVF_RXD_FLEX_PKT_LEN_M                 GENMASK_ULL(45, 32);
    aligned_le64 qw1;
  #define IAVF_RXD_LEGACY_DD_M                    BIT(0);
  #define IAVF_RXD_LEGACY_EOP_M                   BIT(1);
  #define IAVF_RXD_LEGACY_L2TAG1P_M               BIT(2);
  #define IAVF_RXD_LEGACY_L3L4P_M                 BIT(3);
  #define IAVF_RXD_LEGACY_IPV6EXADD_M             BIT(15);
  #define IAVF_RXD_LEGACY_RXE_M                   BIT(19);
  #define IAVF_RXD_LEGACY_IPE_M                   BIT(22);
  #define IAVF_RXD_LEGACY_L4E_M                   BIT(23);
  #define IAVF_RXD_LEGACY_EIPE_M                  BIT(24);
  #define IAVF_RXD_LEGACY_PPRS_M                  BIT(26);
  #define IAVF_RXD_LEGACY_FLTSTAT_M               GENMASK_ULL(13, 12);
  #define IAVF_RXD_LEGACY_PTYPE_M                 GENMASK_ULL(37, 30);
  #define IAVF_RXD_LEGACY_LENGTH_M                GENMASK_ULL(51, 38);
  #define IAVF_RXD_FLEX_DD_M                      BIT(0);
  #define IAVF_RXD_FLEX_EOP_M                     BIT(1);
  #define IAVF_RXD_FLEX_L3L4P_M                   BIT(3);
  #define IAVF_RXD_FLEX_XSUM_IPE_M                BIT(4);
  #define IAVF_RXD_FLEX_XSUM_L4E_M                BIT(5);
  #define IAVF_RXD_FLEX_XSUM_EIPE_M               BIT(6);
  #define IAVF_RXD_FLEX_XSUM_EUDPE_M              BIT(7);
  #define IAVF_RXD_FLEX_IPV6EXADD_M               BIT(9);
  #define IAVF_RXD_FLEX_RXE_M                     BIT(10);
  #define IAVF_RXD_FLEX_RSS_VALID_M               BIT(12);
  #define IAVF_RXD_FLEX_L2TAG1P_M                 BIT(13);
  #define IAVF_RXD_FLEX_L2TAG1_M                  GENMASK_ULL(31, 16);
  #define IAVF_RXD_FLEX_RSS_HASH_M                GENMASK_ULL(63, 32);
    aligned_le64 qw2;
  #define IAVF_RXD_LEGACY_L2TAG2P_M               BIT(0);
  #define IAVF_RXD_LEGACY_L2TAG2_M                GENMASK_ULL(63, 48);
  #define IAVF_RXD_FLEX_L2TAG2_2_M                GENMASK_ULL(63, 48);
  #define IAVF_RXD_FLEX_NAT_M                     BIT(4);
  #define IAVF_RXD_FLEX_L2TAG2P_M                 BIT(11);
    aligned_le64 qw3;
  #define IAVF_RXD_FLEX_QW3_TSTAMP_HIGH_M         GENMASK_ULL(63, 32);
};

like… look at all those masks. she contains multitudes. 🌈


πŸ’– Members πŸ’–

four quad words, two whole personalities each. let's get into it 🫢

  • qw0 β€” quad word 0 fields, bestie. Legacy: Descriptor Type; Mirror ID; L2TAG1P (S-TAG); Filter Status. Flex: Descriptor Type; Mirror ID; UMBCAST; Packet Type; Flexible Flags Section 0; Packet Length; Header Length; Split Header Flag; Flexible Flags section 1 / Extended Status. 😭 that's a lot of fields for one quad word and honestly she's serving.
  • qw1 β€” quad word 1 fields, periodt. Legacy: Status Field; Error Field; Packet Type; Packet Length (packet, header, Split Header Flag). Flex: Status / Error 0 Field; L2TAG1P (S-TAG); Flexible Metadata Container #0; Flexible Metadata Container #1. see how the flex side has containers? fancy. πŸ’…
  • qw2 β€” quad word 2 fields, no cap. Legacy: Extended Status; 1st L2TAG2P (C-TAG); 2nd L2TAG2P (C-TAG). Flex: Status / Error 1 Field; Flexible Flags section 2; Timestamp Low; 1st L2TAG2 (C-TAG); 2nd L2TAG2 (C-TAG). two C-TAGs?? she's double-tagging, iconic. πŸŽ€
  • qw3 β€” quad word 3 fields, and this is the one. Legacy: FD Filter ID / Flexible Bytes. Flex: Flexible Metadata Container #2; Flexible Metadata Container #3; Flexible Metadata Container #4 / Timestamp High 0; Flexible Metadata Container #5 / Timestamp High 1. the way she multiplexes metadata containers with timestamps… lowkey obsessed. ✨
ngl the legacy/flex split is literally the whole vibe of this struct β€” same quad words, completely different field maps depending on which mode you're in. don't mix 'em up, bestie, iykyk. πŸ™ˆ

πŸ”₯ SEE ALSO πŸ”₯

the source of truth, the origin story, the blueprint:

  • Kernel file ./drivers/net/ethernet/intel/iavf/iavf_type.h

okay that's the whole page, you ate that πŸ“ and if you want the receipts, this one lives over in ./drivers/net/ethernet/intel/iavf, dated October 2026. mwah, go read some descriptors πŸ’œπŸ§šβ€β™€οΈ

πŸ“¦ where this page comes from