[dpdk-dev] [PATCH v2] net: adjust the header length parse size
Haiyue Wang
haiyue.wang at intel.com
Sat Sep 5 05:06:46 CEST 2020
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.wang at 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
More information about the dev
mailing list