> From: Gregory Etelson [mailto:getel...@nvidia.com] > Sent: Tuesday, 18 June 2024 09.58 > > 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 `traffic class` is also separated into DS and ECN fields. > > The patch also preserves existing `vtc_flow` structure member for > backward compatibility. > > Signed-off-by: Gregory Etelson <getel...@nvidia.com> > --- > v2: > Replace uint32_t with rte_be32_t. > Split traffic_class into DS and ECN bits. > --- > lib/net/rte_ip.h | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/lib/net/rte_ip.h b/lib/net/rte_ip.h > index 0d103d4127..fe1d596054 100644 > --- a/lib/net/rte_ip.h > +++ b/lib/net/rte_ip.h > @@ -524,7 +524,23 @@ 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. > */ > + union { > + rte_be32_t vtc_flow; /**< IP version, traffic class & > flow > label. */ > + __extension__ > + struct { > +#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN > + rte_be32_t flow_label:20; /**< flow label */
I don't know if sub-unions of bitfields are possible and/or require special magic for packing the bits. If possible, expanding the 8 bit "tc" field like this would be nice: + union { + rte_be32_t tc:8; + __extension__ + struct { > + rte_be32_t ecn:2; /**< ECN */ > + rte_be32_t ds:6; /**< differentiated services */ + }; + }; > + rte_be32_t version:4; /**< version */ > +#elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN > + rte_be32_t version:4; /**< version */ > + rte_be32_t ds:6; /**< differentiated services */ > + rte_be32_t ecn:2; /**< ECN */ > + rte_be32_t flow_label:20; /**< flow label */ > +#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 Without the suggested addition, Reviewed-by: Morten Brørup <m...@smartsharesystems.com> With the suggested addition, Acked-by: Morten Brørup <m...@smartsharesystems.com>