> From: Gregory Etelson [mailto:getel...@nvidia.com] > Sent: Tuesday, 18 June 2024 07.18 > > DPDK IPv6 header definition combined the `version`, `traffic class` > and `flow label` header fields into a single 32 bits structure member > `vtc_flow`. > > The patch expands IPv6 header definition with dedicated structure > members for the `version`, `traffic class` and `flow label` fields. > The patch also preserves existing `vtc_flow` structure member for > backward compatibility.
Good addition. I had been wondering why we didn't have this already. :-) > > Signed-off-by: Gregory Etelson <getel...@nvidia.com> > --- > lib/net/rte_ip.h | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > > diff --git a/lib/net/rte_ip.h b/lib/net/rte_ip.h > index 0d103d4127..26e78a6624 100644 > --- a/lib/net/rte_ip.h > +++ b/lib/net/rte_ip.h > @@ -524,7 +524,21 @@ rte_ipv4_udptcp_cksum_mbuf_verify(const struct rte_mbuf > *m, > * IPv6 Header > */ > struct rte_ipv6_hdr { > - rte_be32_t vtc_flow; /**< IP version, traffic class & flow label. > */ > + __extension__ > + union { > + rte_be32_t vtc_flow; /**< IP version, traffic class & > flow > label. */ The mbuf structure [1] has __extension__ here, i.e. preceding the structure following the integer field, instead of preceding the union. [1]: https://git.dpdk.org/dpdk/tree/lib/mbuf/rte_mbuf_core.h#n520 > + struct { > +#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN > + uint32_t flow_label:24; /**< flow label */ Flow Label is 20 bits, not 24. > + uint32_t tc:4; /**< traffic class */ TC is 8 bits, not 4. > + uint32_t version:4; /**< version */ > +#elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN > + uint8_t version:4; /**< version */ > + uint8_t tc:4; /**< traffic class */ :8, not :4. > + uint32_t flow_label:24; /**< flow label */ :20, not :24. > +#endif > + }; > + }; > rte_be16_t payload_len; /**< IP payload size, including ext. headers > */ > uint8_t proto; /**< Protocol, next header. */ > uint8_t hop_limits; /**< Hop limits. */ > -- > 2.43.0