[PATCH dpdk v2 11/16] thash: use ipv6 addr struct
Robin Jarry
rjarry at redhat.com
Tue Oct 1 10:17:23 CEST 2024
Update rte_ipv6_tuple to use the recently added IPv6 address structure
instead of uint8_t[16] arrays.
Signed-off-by: Robin Jarry <rjarry at redhat.com>
---
Notes:
v2: updated changelog for 24.11
app/test/test_thash.c | 46 ++++++++++----------------
doc/guides/rel_notes/deprecation.rst | 2 --
doc/guides/rel_notes/release_24_11.rst | 2 ++
lib/hash/rte_thash.h | 20 +++++------
4 files changed, 29 insertions(+), 41 deletions(-)
diff --git a/app/test/test_thash.c b/app/test/test_thash.c
index 952da6a52954..262f84433461 100644
--- a/app/test/test_thash.c
+++ b/app/test/test_thash.c
@@ -25,8 +25,8 @@ struct test_thash_v4 {
};
struct test_thash_v6 {
- uint8_t dst_ip[16];
- uint8_t src_ip[16];
+ struct rte_ipv6_addr dst_ip;
+ struct rte_ipv6_addr src_ip;
uint16_t dst_port;
uint16_t src_port;
uint32_t hash_l3;
@@ -49,25 +49,19 @@ struct test_thash_v4 v4_tbl[] = {
struct test_thash_v6 v6_tbl[] = {
/*3ffe:2501:200:3::1*/
-{{0x3f, 0xfe, 0x25, 0x01, 0x02, 0x00, 0x00, 0x03,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,},
+{{.a = "\x3f\xfe\x25\x01\x02\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01"},
/*3ffe:2501:200:1fff::7*/
-{0x3f, 0xfe, 0x25, 0x01, 0x02, 0x00, 0x1f, 0xff,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,},
+{.a = "\x3f\xfe\x25\x01\x02\x00\x1f\xff\x00\x00\x00\x00\x00\x00\x00\x07"},
1766, 2794, 0x2cc18cd5, 0x40207d3d},
/*ff02::1*/
-{{0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,},
+{{.a = "\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"},
/*3ffe:501:8::260:97ff:fe40:efab*/
-{0x3f, 0xfe, 0x05, 0x01, 0x00, 0x08, 0x00, 0x00,
-0x02, 0x60, 0x97, 0xff, 0xfe, 0x40, 0xef, 0xab,},
+{.a = "\x3f\xfe\x05\x01\x00\x08\x00\x00\x02\x60\x97\xff\xfe\x40\xef\xab"},
4739, 14230, 0x0f0c461c, 0xdde51bbf},
/*fe80::200:f8ff:fe21:67cf*/
-{{0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x00, 0xf8, 0xff, 0xfe, 0x21, 0x67, 0xcf,},
+{{.a = "\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x00\xf8\xff\xfe\x21\x67\xcf"},
/*3ffe:1900:4545:3:200:f8ff:fe21:67cf*/
-{0x3f, 0xfe, 0x19, 0x00, 0x45, 0x45, 0x00, 0x03,
-0x02, 0x00, 0xf8, 0xff, 0xfe, 0x21, 0x67, 0xcf,},
+{.a = "\x3f\xfe\x19\x00\x45\x45\x00\x03\x02\x00\xf8\xff\xfe\x21\x67\xcf"},
38024, 44251, 0x4b61e985, 0x02d1feef},
};
@@ -110,7 +104,7 @@ static const uint8_t big_rss_key[] = {
static int
test_toeplitz_hash_calc(void)
{
- uint32_t i, j;
+ uint32_t i;
union rte_thash_tuple tuple;
uint32_t rss_l3, rss_l3l4;
uint8_t rss_key_be[RTE_DIM(default_rss_key)];
@@ -145,10 +139,8 @@ test_toeplitz_hash_calc(void)
}
for (i = 0; i < RTE_DIM(v6_tbl); i++) {
/*Fill ipv6 hdr*/
- for (j = 0; j < RTE_DIM(ipv6_hdr.src_addr.a); j++)
- ipv6_hdr.src_addr.a[j] = v6_tbl[i].src_ip[j];
- for (j = 0; j < RTE_DIM(ipv6_hdr.dst_addr.a); j++)
- ipv6_hdr.dst_addr.a[j] = v6_tbl[i].dst_ip[j];
+ rte_ipv6_addr_cpy(&ipv6_hdr.src_addr, &v6_tbl[i].src_ip);
+ rte_ipv6_addr_cpy(&ipv6_hdr.dst_addr, &v6_tbl[i].dst_ip);
/*Load and convert ipv6 address into tuple*/
rte_thash_load_v6_addrs(&ipv6_hdr, &tuple);
tuple.v6.sport = v6_tbl[i].src_port;
@@ -176,7 +168,7 @@ test_toeplitz_hash_calc(void)
static int
test_toeplitz_hash_gfni(void)
{
- uint32_t i, j;
+ uint32_t i;
union rte_thash_tuple tuple;
uint32_t rss_l3, rss_l3l4;
uint64_t rss_key_matrixes[RTE_DIM(default_rss_key)];
@@ -204,10 +196,8 @@ test_toeplitz_hash_gfni(void)
}
for (i = 0; i < RTE_DIM(v6_tbl); i++) {
- for (j = 0; j < RTE_DIM(tuple.v6.src_addr); j++)
- tuple.v6.src_addr[j] = v6_tbl[i].src_ip[j];
- for (j = 0; j < RTE_DIM(tuple.v6.dst_addr); j++)
- tuple.v6.dst_addr[j] = v6_tbl[i].dst_ip[j];
+ rte_ipv6_addr_cpy(&tuple.v6.src_addr, &v6_tbl[i].src_ip);
+ rte_ipv6_addr_cpy(&tuple.v6.dst_addr, &v6_tbl[i].dst_ip);
tuple.v6.sport = rte_cpu_to_be_16(v6_tbl[i].dst_port);
tuple.v6.dport = rte_cpu_to_be_16(v6_tbl[i].src_port);
rss_l3 = rte_thash_gfni(rss_key_matrixes, (uint8_t *)&tuple,
@@ -299,7 +289,7 @@ enum {
static int
test_toeplitz_hash_gfni_bulk(void)
{
- uint32_t i, j;
+ uint32_t i;
union rte_thash_tuple tuple[2];
uint8_t *tuples[2];
uint32_t rss[2] = { 0 };
@@ -328,10 +318,8 @@ test_toeplitz_hash_gfni_bulk(void)
rte_memcpy(tuples[0], &tuple[0], RTE_THASH_V4_L4_LEN * 4);
/*Load IPv6 headers and copy it into the corresponding tuple*/
- for (j = 0; j < RTE_DIM(tuple[1].v6.src_addr); j++)
- tuple[1].v6.src_addr[j] = v6_tbl[i].src_ip[j];
- for (j = 0; j < RTE_DIM(tuple[1].v6.dst_addr); j++)
- tuple[1].v6.dst_addr[j] = v6_tbl[i].dst_ip[j];
+ rte_ipv6_addr_cpy(&tuple[1].v6.src_addr, &v6_tbl[i].src_ip);
+ rte_ipv6_addr_cpy(&tuple[1].v6.dst_addr, &v6_tbl[i].dst_ip);
tuple[1].v6.sport = rte_cpu_to_be_16(v6_tbl[i].dst_port);
tuple[1].v6.dport = rte_cpu_to_be_16(v6_tbl[i].src_port);
rte_memcpy(tuples[1], &tuple[1], RTE_THASH_V6_L4_LEN * 4);
diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst
index 838e22b44444..dc0c6e4182ff 100644
--- a/doc/guides/rel_notes/deprecation.rst
+++ b/doc/guides/rel_notes/deprecation.rst
@@ -72,8 +72,6 @@ Deprecation Notices
- ``struct rte_flow_tunnel``
gro
- ``struct tcp6_flow_key``
- hash
- - ``struct rte_ipv6_tuple``
* net, ethdev: The flow item ``RTE_FLOW_ITEM_TYPE_VXLAN_GPE``
is replaced with ``RTE_FLOW_ITEM_TYPE_VXLAN``.
diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst
index debaf99e4a71..78d222be180e 100644
--- a/doc/guides/rel_notes/release_24_11.rst
+++ b/doc/guides/rel_notes/release_24_11.rst
@@ -95,6 +95,8 @@ API Changes
use ``rte_ipv6_addr`` structures instead of ``uint8_t[16]`` fields.
* ipsec: ``rte_ipsec_sadv6_key`` was modified to use ``rte_ipv6_addr`` structures instead of
``uint8_t[16]`` fields.
+* hash: ``rte_ipv6_tuple`` was modified to use ``rte_ipv6_addr`` structures instead of
+ ``uint8_t[16]`` fields.
ABI Changes
-----------
diff --git a/lib/hash/rte_thash.h b/lib/hash/rte_thash.h
index 9aaaacfd5fa4..ddc4e345097d 100644
--- a/lib/hash/rte_thash.h
+++ b/lib/hash/rte_thash.h
@@ -89,8 +89,8 @@ struct rte_ipv4_tuple {
* ports/sctp_tag have to be CPU byte order
*/
struct rte_ipv6_tuple {
- uint8_t src_addr[16];
- uint8_t dst_addr[16];
+ struct rte_ipv6_addr src_addr;
+ struct rte_ipv6_addr dst_addr;
union {
struct {
uint16_t dport;
@@ -141,22 +141,22 @@ rte_thash_load_v6_addrs(const struct rte_ipv6_hdr *orig,
{
#ifdef RTE_ARCH_X86
__m128i ipv6 = _mm_loadu_si128((const __m128i *)&orig->src_addr);
- *(__m128i *)targ->v6.src_addr =
+ *(__m128i *)&targ->v6.src_addr =
_mm_shuffle_epi8(ipv6, rte_thash_ipv6_bswap_mask);
ipv6 = _mm_loadu_si128((const __m128i *)&orig->dst_addr);
- *(__m128i *)targ->v6.dst_addr =
+ *(__m128i *)&targ->v6.dst_addr =
_mm_shuffle_epi8(ipv6, rte_thash_ipv6_bswap_mask);
#elif defined(__ARM_NEON)
- uint8x16_t ipv6 = vld1q_u8((uint8_t const *)&orig->src_addr);
- vst1q_u8((uint8_t *)targ->v6.src_addr, vrev32q_u8(ipv6));
- ipv6 = vld1q_u8((uint8_t const *)&orig->dst_addr);
- vst1q_u8((uint8_t *)targ->v6.dst_addr, vrev32q_u8(ipv6));
+ uint8x16_t ipv6 = vld1q_u8(orig->src_addr.a);
+ vst1q_u8(targ->v6.src_addr.a, vrev32q_u8(ipv6));
+ ipv6 = vld1q_u8(orig->dst_addr.a);
+ vst1q_u8(targ->v6.dst_addr.a, vrev32q_u8(ipv6));
#else
int i;
for (i = 0; i < 4; i++) {
- *((uint32_t *)targ->v6.src_addr + i) =
+ *((uint32_t *)targ->v6.src_addr.a + i) =
rte_be_to_cpu_32(*((const uint32_t *)orig->src_addr.a + i));
- *((uint32_t *)targ->v6.dst_addr + i) =
+ *((uint32_t *)targ->v6.dst_addr.a + i) =
rte_be_to_cpu_32(*((const uint32_t *)orig->dst_addr.a + i));
}
#endif
--
2.46.1
More information about the dev
mailing list