Update rte_ipv6_tuple to use the recently added IPv6 address structure
instead of uint8_t[16] arrays.

Signed-off-by: Robin Jarry <rja...@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

Reply via email to