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

Reply via email to