From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B52D245A78; Tue, 1 Oct 2024 10:19:24 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4E50140E13; Tue, 1 Oct 2024 10:18:21 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 5E6A640DFB for ; Tue, 1 Oct 2024 10:18:19 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1727770698; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=t+p0hWDo+OpgHpHkCustezX7Xuzzm+wLgbqw6UNSe68=; b=T+dQXp21lUp5IsO2yF4t/k5iKOl3K4INjUPO5/XlSXkjTLfyVBWMF2hbRN+7GmSc6rcW1U m3G/tnatgpg90+b8uO7FdtjCgUtJDXZP6xykGO8DFHYSovLPpry+zJbphYzMV03+I6Jiil MRQjEvoxGlen+cYg+n8MsV7bgtiPNEI= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-310--NYk9wieNQKhH3e-hCdJGQ-1; Tue, 01 Oct 2024 04:18:17 -0400 X-MC-Unique: -NYk9wieNQKhH3e-hCdJGQ-1 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (unknown [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id AC150191928F; Tue, 1 Oct 2024 08:18:16 +0000 (UTC) Received: from ringo.redhat.com (unknown [10.39.208.33]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id EA0E21979060; Tue, 1 Oct 2024 08:18:14 +0000 (UTC) From: Robin Jarry To: dev@dpdk.org, Yipeng Wang , Sameh Gobriel , Bruce Richardson , Vladimir Medvedkin Subject: [PATCH dpdk v2 11/16] thash: use ipv6 addr struct Date: Tue, 1 Oct 2024 10:17:23 +0200 Message-ID: <20241001081728.301272-12-rjarry@redhat.com> In-Reply-To: <20241001081728.301272-1-rjarry@redhat.com> References: <20240821162516.610624-17-rjarry@redhat.com> <20241001081728.301272-1-rjarry@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Update rte_ipv6_tuple to use the recently added IPv6 address structure instead of uint8_t[16] arrays. Signed-off-by: Robin Jarry --- 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