STRUCT VIRTCHNL2_RX_FLEX_DESC_ADV_NIC_3(9)
π NAME π
struct virtchnl2_rx_flex_desc_adv_nic_3 β bestie, this is the RX descriptor writeback format. It lives in the Kernel API Manual, section 9. That's the vibe check for today π«Ά
β¨ SYNOPSIS β¨
okay so here's the literal shape of it, don't touch anything, copy it exactly:
struct virtchnl2_rx_flex_desc_adv_nic_3 {
u8 rxdid_ucast;
u8 status_err0_qw0;
__le16 ptype_err_fflags0;
__le16 pktlen_gen_bufq_id;
__le16 hdrlen_flags;
u8 status_err0_qw1;
u8 status_err1;
u8 fflags1;
u8 ts_low;
__le16 buf_id;
union {
__le16 raw_cs;
__le16 l2tag1;
__le16 rscseglen;
} misc;
__le16 hash1;
union {
u8 fflags2;
u8 mirrorid;
u8 hash2;
} ff2_mirrid_hash2;
u8 hash3;
__le16 l2tag2;
__le16 fmd4;
__le16 l2tag1;
__le16 fmd6;
__le32 ts_high;
};
π Members π
like, every single field, no skipping, ngl this is the whole cast π
rxdid_ucastβ the bit layout isucast=[7:6],rsvd=[5:4],profile_id=[3:0]. she's packed, she's compact, she's iconic β¨status_err0_qw0β Status/Error section 0, but specifically in quad word 0.ptype_err_fflags0β the packing isff0=[15:12],udp_len_err=[11],ip_hdr_err=[10],ptype=[9:0]. three whole things in one little__le16, ate πpktlen_gen_bufq_idβbufq_id=[15]only in splitq,gen=[14]only in splitq, andplen=[13:0]. note the splitq-only bits, don't forget them fr frhdrlen_flagsβmiss_prepend=[15],trunc_mirr=[14],int_udp_0=[13],ext_udp0=[12],sph=[11]only in splitq,rsc=[10]only in splitq,header=[9:0]. that's a lot of flags crammed in there, main character energy honestly πstatus_err0_qw1β Status/Error section 0, but this time in quad word 1. yes there are two, they're siblings π«Άstatus_err1β Status/Error section 1.fflags1β Flexible flags section 1.ts_lowβ the lower word of the timestamp value.buf_idβ Buffer identifier. Only in splitq mode. (say it with me: only in splitq)miscβ it's a union π¦misc.raw_csβ Raw checksum.misc.l2tag1β Stripped L2 tag from the received packet.misc.rscseglenβ (the original page gives this one no description, so we're not inventing one π)
hash1β the lower bits of the Rx hash value.ff2_mirrid_hash2β another union β¨ff2_mirrid_hash2.fflags2β Flexible flags section 2.ff2_mirrid_hash2.mirroridβ Mirror id.
hash3β the upper bits of the Rx hash value.l2tag2β Extracted L2 tag 2 from the packet.fmd4β Flexible metadata container 4.l2tag1β Stripped L2 tag from the received packet. (yes, this is a separate member frommisc.l2tag1β two differentl2tag1s, lowkey chaotic, but that's the struct π)fmd6β Flexible metadata container 6.ts_highβ Timestamp higher word of the timestamp value.
πΈ Description πΈ
Profile ID 0x2, SplitQ, flex writeback format. periodt.
and here's the flex-field map, she's giving β¨ organized β¨:
- Flex-field 0: BufferID
- Flex-field 1: Raw checksum/L2TAG1/RSC Seg Len (determined by HW)
- Flex-field 2: Hash[15:0]
- Flex-flags 2: Hash[23:16]
- Flex-field 3: L2TAG2
- Flex-field 5: L2TAG1
- Flex-field 7: Timestamp (upper 32 bits)
heads up bestie: flex-field 1 is determined by HW, so don't go assuming which one of Raw checksum / L2TAG1 / RSC Seg Len you're getting π that's the hardware's call, not ours.
π¦ SEE ALSO π¦
go read these next, iykyk π
- Kernel file
./include/linux/net/intel/virtchnl2_lan_desc.h struct virtchnl2_splitq_rx_buf_desc(9)struct virtchnl2_singleq_rx_buf_desc(9)struct virtchnl2_singleq_base_rx_desc(9)struct virtchnl2_rx_flex_desc_nic(9)
and that's the whole page, bestie π it ships from ./include/linux/net/intel, dated October 2026, and it's section 9 of the Kernel API Manual. go forth and parse those descriptors, you're gonna slay ππ¦β¨
π¦ 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