Align to the rte_mbuf's design about Tx header length data size for the header length parse result. struct { uint64_t l2_len:7; /* 88: 0 8 */ uint64_t l3_len:9; /* 88: 7 8 */ uint64_t l4_len:8; /* 88:16 8 */ uint64_t tso_segsz:16; /* 88:24 8 */ uint64_t outer_l3_len:9; /* 88:40 8 */ uint64_t outer_l2_len:7; /* 88:49 8 */ };
Now the IPv6 can support bigger extension header. The below is the structure hole analysis result: Before: struct rte_net_hdr_lens { uint8_t l2_len; /* 0 1 */ uint8_t l3_len; /* 1 1 */ uint8_t l4_len; /* 2 1 */ uint8_t tunnel_len; /* 3 1 */ uint8_t inner_l2_len; /* 4 1 */ uint8_t inner_l3_len; /* 5 1 */ uint8_t inner_l4_len; /* 6 1 */ /* size: 7, cachelines: 1, members: 7 */ /* last cacheline: 7 bytes */ }; Now: struct rte_net_hdr_lens { uint64_t l2_len:7; /* 0: 0 8 */ uint64_t l3_len:9; /* 0: 7 8 */ uint64_t l4_len:8; /* 0:16 8 */ uint64_t tunnel_len:8; /* 0:24 8 */ uint64_t inner_l2_len:7; /* 0:32 8 */ uint64_t inner_l3_len:9; /* 0:39 8 */ uint64_t inner_l4_len:8; /* 0:48 8 */ /* size: 8, cachelines: 1, members: 7 */ /* bit_padding: 8 bits */ /* last cacheline: 8 bytes */ }; Signed-off-by: Haiyue Wang <haiyue.w...@intel.com> --- v2: use bit field to avoid creating a structure hole. --- lib/librte_net/rte_net.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/librte_net/rte_net.h b/lib/librte_net/rte_net.h index 94b06d9ee..a14e3d814 100644 --- a/lib/librte_net/rte_net.h +++ b/lib/librte_net/rte_net.h @@ -18,14 +18,15 @@ extern "C" { * Structure containing header lengths associated to a packet, filled * by rte_net_get_ptype(). */ +__extension__ struct rte_net_hdr_lens { - uint8_t l2_len; - uint8_t l3_len; - uint8_t l4_len; - uint8_t tunnel_len; - uint8_t inner_l2_len; - uint8_t inner_l3_len; - uint8_t inner_l4_len; + uint64_t l2_len:7; + uint64_t l3_len:9; + uint64_t l4_len:8; + uint64_t tunnel_len:8; + uint64_t inner_l2_len:7; + uint64_t inner_l3_len:9; + uint64_t inner_l4_len:8; }; /** -- 2.28.0