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 2FAD3A09FA; Thu, 20 Oct 2022 10:14:34 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C82EC42C7C; Thu, 20 Oct 2022 10:14:33 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 1CE72427F5 for ; Thu, 20 Oct 2022 10:14:31 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 29K6QiJk010176; Thu, 20 Oct 2022 01:14:31 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=M0zwoMOTHvd3bmeMiDR5GyVImSMrN/ATi6fnBxSwKIg=; b=Vu9ViM+bCHWrGT+kssPFWDQV4ojB/ZXxKSWkLUzv8aJFxzkS1Sb+uUFh6L9ZAsncqwDJ T1BdLPbwsfTlUyDnBcUzZGNkWdFhaz16XvF5OGsf+ZGXRYs94QjShTAQHE5YhAW1ajhy tG/zQd6I/KcQyz4uUtmKgsmcTujfmHMpU9Rx9IPw7pvTXXFualQ8+ZRZvyUbks3lX4yt DpiHpJmw6jsNbbyebAe2+LlztXwxJhEREkIoRice/qKlLZlKm2kfSzHNaqgXT12AOgAi E1ICVvUciTXQgosp1gy9fSaNnV/O/cTYSNRimM9DblWrkvM1PlPoPx3Ds77Ti1KNrVw/ Gg== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3kb1258ba9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 20 Oct 2022 01:14:30 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 20 Oct 2022 01:14:29 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.18 via Frontend Transport; Thu, 20 Oct 2022 01:14:28 -0700 Received: from localhost.localdomain (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id D32003F7044; Thu, 20 Oct 2022 01:14:26 -0700 (PDT) From: Nithin Dabilpuram To: Akhil Goyal , Fan Zhang CC: , , Nithin Dabilpuram Subject: [PATCH v2] app/test: add support to run multi-seg inline IPsec test Date: Thu, 20 Oct 2022 13:44:20 +0530 Message-ID: <20221020081420.2808595-1-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221020064650.2764464-1-ndabilpuram@marvell.com> References: <20221020064650.2764464-1-ndabilpuram@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-GUID: A7-pC2CJkeMOp08cpgfRJ6SHgHBgGGLV X-Proofpoint-ORIG-GUID: A7-pC2CJkeMOp08cpgfRJ6SHgHBgGGLV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-10-20_02,2022-10-19_04,2022-06-22_01 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 Add support to run multi-seg inline ipsec test using new test command `inline_ipsec_sg_autotest` Signed-off-by: Nithin Dabilpuram --- v2: - Fixed commit message and Windows compilation issue. app/test/test_cryptodev_security_ipsec.c | 97 +++++++++++++++- app/test/test_cryptodev_security_ipsec.h | 6 +- app/test/test_security_inline_proto.c | 140 +++++++++++++++++++++-- 3 files changed, 225 insertions(+), 18 deletions(-) diff --git a/app/test/test_cryptodev_security_ipsec.c b/app/test/test_cryptodev_security_ipsec.c index cb77b39dbb..f7569aba1b 100644 --- a/app/test/test_cryptodev_security_ipsec.c +++ b/app/test/test_cryptodev_security_ipsec.c @@ -445,6 +445,65 @@ test_ipsec_td_prepare(const struct crypto_param *param1, } } + /* Adjust the data to requested length */ + if (flags->plaintext_len && flags->ipv6) { + struct rte_ipv6_hdr *ip6 = (struct rte_ipv6_hdr *)td->input_text.data; + struct rte_tcp_hdr *tcp; + int64_t payload_len; + uint8_t *data; + int64_t i; + + payload_len = RTE_MIN(flags->plaintext_len, IPSEC_TEXT_MAX_LEN); + payload_len -= sizeof(struct rte_ipv6_hdr); + payload_len -= sizeof(struct rte_tcp_hdr); + if (payload_len <= 16) + payload_len = 16; + + /* IPv6 */ + ip6->proto = IPPROTO_TCP; + ip6->payload_len = sizeof(*tcp) + payload_len; + ip6->payload_len = rte_cpu_to_be_16(ip6->payload_len); + + /* TCP */ + tcp = (struct rte_tcp_hdr *)(ip6 + 1); + data = (uint8_t *)(tcp + 1); + for (i = 0; i < payload_len; i++) + data[i] = i; + tcp->cksum = 0; + tcp->cksum = rte_ipv6_udptcp_cksum(ip6, tcp); + td->input_text.len = payload_len + sizeof(struct rte_ipv6_hdr) + + sizeof(struct rte_tcp_hdr); + } else if (flags->plaintext_len) { + struct rte_ipv4_hdr *ip = (struct rte_ipv4_hdr *)td->input_text.data; + struct rte_tcp_hdr *tcp; + int64_t payload_len; + uint8_t *data; + int64_t i; + + payload_len = RTE_MIN(flags->plaintext_len, IPSEC_TEXT_MAX_LEN); + payload_len -= sizeof(struct rte_ipv4_hdr); + payload_len -= sizeof(struct rte_tcp_hdr); + if (payload_len <= 8) + payload_len = 8; + + /* IPv4 */ + ip->next_proto_id = IPPROTO_TCP; + ip->total_length = sizeof(*ip) + sizeof(*tcp) + payload_len; + ip->total_length = rte_cpu_to_be_16(ip->total_length); + ip->hdr_checksum = 0; + ip->hdr_checksum = rte_ipv4_cksum(ip); + + /* TCP */ + tcp = (struct rte_tcp_hdr *)(ip + 1); + data = (uint8_t *)(tcp + 1); + for (i = 0; i < payload_len; i++) + data[i] = i; + tcp->cksum = 0; + tcp->cksum = rte_ipv4_udptcp_cksum(ip, tcp); + td->input_text.len = payload_len + sizeof(struct rte_ipv4_hdr) + + sizeof(struct rte_tcp_hdr); + } + if (flags->ah) { td->ipsec_xform.proto = RTE_SECURITY_IPSEC_SA_PROTO_AH; @@ -662,13 +721,23 @@ static int test_ipsec_l4_csum_verify(struct rte_mbuf *m) { uint16_t actual_cksum = 0, expected_cksum = 0; + uint32_t len = rte_pktmbuf_pkt_len(m); + uint8_t data_arr[IPSEC_TEXT_MAX_LEN]; struct rte_ipv4_hdr *ipv4; struct rte_ipv6_hdr *ipv6; + uint8_t *data = data_arr; struct rte_tcp_hdr *tcp; struct rte_udp_hdr *udp; + const uint8_t *ptr; void *ip, *l4; - ip = rte_pktmbuf_mtod(m, void *); + ptr = rte_pktmbuf_read(m, 0, len, data_arr); + if (!ptr) + return -EINVAL; + else if (ptr != data_arr) + data = rte_pktmbuf_mtod_offset(m, uint8_t *, 0); + + ip = (struct rte_ipv4_hdr *)data; if (is_ipv4(ip)) { ipv4 = ip; @@ -748,9 +817,11 @@ static int test_ipsec_td_verify(struct rte_mbuf *m, const struct ipsec_test_data *td, bool silent, const struct ipsec_test_flags *flags) { - uint8_t *output_text = rte_pktmbuf_mtod(m, uint8_t *); uint32_t skip, len = rte_pktmbuf_pkt_len(m); - uint8_t td_output_text[4096]; + uint8_t td_output_text[IPSEC_TEXT_MAX_LEN]; + uint8_t data_arr[IPSEC_TEXT_MAX_LEN]; + uint8_t *output_text = data_arr; + const uint8_t *ptr; int ret; /* For tests with status as error for test success, skip verification */ @@ -761,6 +832,12 @@ test_ipsec_td_verify(struct rte_mbuf *m, const struct ipsec_test_data *td, td->ar_packet)) return TEST_SUCCESS; + ptr = rte_pktmbuf_read(m, 0, len, data_arr); + if (!ptr) + return -EINVAL; + else if (ptr != data_arr) + output_text = rte_pktmbuf_mtod_offset(m, uint8_t *, 0); + if (td->ipsec_xform.direction == RTE_SECURITY_IPSEC_SA_DIR_EGRESS && flags->udp_encap) { const struct rte_ipv4_hdr *iph4; @@ -868,10 +945,20 @@ test_ipsec_res_d_prepare(struct rte_mbuf *m, const struct ipsec_test_data *td, { uint8_t *output_text = rte_pktmbuf_mtod(m, uint8_t *); uint32_t len = rte_pktmbuf_pkt_len(m); + struct rte_mbuf *next = m; + uint32_t off = 0; memcpy(res_d, td, sizeof(*res_d)); - memcpy(res_d->input_text.data, output_text, len); - res_d->input_text.len = len; + + while (next && off < len) { + output_text = rte_pktmbuf_mtod(next, uint8_t *); + if (off + next->data_len > sizeof(res_d->input_text.data)) + break; + memcpy(&res_d->input_text.data[off], output_text, next->data_len); + off += next->data_len; + next = next->next; + } + res_d->input_text.len = off; res_d->ipsec_xform.direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS; if (res_d->aead) { diff --git a/app/test/test_cryptodev_security_ipsec.h b/app/test/test_cryptodev_security_ipsec.h index 67b783e637..cc0bf14777 100644 --- a/app/test/test_cryptodev_security_ipsec.h +++ b/app/test/test_cryptodev_security_ipsec.h @@ -9,6 +9,7 @@ #include #define IPSEC_TEST_PACKETS_MAX 32 +#define IPSEC_TEXT_MAX_LEN 16384u struct ipsec_test_data { struct { @@ -19,12 +20,12 @@ struct ipsec_test_data { } auth_key; struct { - uint8_t data[1024]; + uint8_t data[IPSEC_TEXT_MAX_LEN]; unsigned int len; } input_text; struct { - uint8_t data[1024]; + uint8_t data[IPSEC_TEXT_MAX_LEN]; unsigned int len; } output_text; @@ -106,6 +107,7 @@ struct ipsec_test_flags { enum flabel_flags flabel; bool dec_ttl_or_hop_limit; bool ah; + uint32_t plaintext_len; }; struct crypto_param { diff --git a/app/test/test_security_inline_proto.c b/app/test/test_security_inline_proto.c index 19297d3628..009458f08a 100644 --- a/app/test/test_security_inline_proto.c +++ b/app/test/test_security_inline_proto.c @@ -28,6 +28,13 @@ test_event_inline_ipsec(void) return TEST_SKIPPED; } +static int +test_inline_ipsec_sg(void) +{ + printf("Inline ipsec SG not supported on Windows, skipping test\n"); + return TEST_SKIPPED; +} + #else #include @@ -106,6 +113,8 @@ static uint16_t port_id; static uint8_t eventdev_id; static uint8_t rx_adapter_id; static uint8_t tx_adapter_id; +static uint16_t plaintext_len; +static bool sg_mode; static bool event_mode_enabled; @@ -399,20 +408,26 @@ copy_buf_to_pkt_segs(const uint8_t *buf, unsigned int len, void *seg_buf; seg = pkt; - while (offset >= seg->data_len) { - offset -= seg->data_len; + while (offset >= rte_pktmbuf_tailroom(seg)) { + offset -= rte_pktmbuf_tailroom(seg); seg = seg->next; } - copy_len = seg->data_len - offset; + copy_len = seg->buf_len - seg->data_off - offset; seg_buf = rte_pktmbuf_mtod_offset(seg, char *, offset); while (len > copy_len) { rte_memcpy(seg_buf, buf + copied, (size_t) copy_len); len -= copy_len; copied += copy_len; + seg->data_len += copy_len; + seg = seg->next; + copy_len = seg->buf_len - seg->data_off; seg_buf = rte_pktmbuf_mtod(seg, void *); } rte_memcpy(seg_buf, buf + copied, (size_t) len); + seg->data_len = len; + + pkt->pkt_len += copied + len; } static bool @@ -431,7 +446,8 @@ is_outer_ipv4(struct ipsec_test_data *td) static inline struct rte_mbuf * init_packet(struct rte_mempool *mp, const uint8_t *data, unsigned int len, bool outer_ipv4) { - struct rte_mbuf *pkt; + struct rte_mbuf *pkt, *tail; + uint16_t space; pkt = rte_pktmbuf_alloc(mp); if (pkt == NULL) @@ -448,11 +464,31 @@ init_packet(struct rte_mempool *mp, const uint8_t *data, unsigned int len, bool } pkt->l2_len = RTE_ETHER_HDR_LEN; - if (pkt->buf_len > (len + RTE_ETHER_HDR_LEN)) + space = rte_pktmbuf_tailroom(pkt); + tail = pkt; + /* Error if SG mode is not enabled */ + if (!sg_mode && space < len) { + rte_pktmbuf_free(pkt); + return NULL; + } + /* Extra room for expansion */ + while (space < len) { + tail->next = rte_pktmbuf_alloc(mp); + if (!tail->next) + goto error; + tail = tail->next; + space += rte_pktmbuf_tailroom(tail); + pkt->nb_segs++; + } + + if (pkt->buf_len > len + RTE_ETHER_HDR_LEN) rte_memcpy(rte_pktmbuf_append(pkt, len), data, len); else copy_buf_to_pkt_segs(data, len, pkt, RTE_ETHER_HDR_LEN); return pkt; +error: + rte_pktmbuf_free(pkt); + return NULL; } static int @@ -466,7 +502,7 @@ init_mempools(unsigned int nb_mbuf) if (mbufpool == NULL) { snprintf(s, sizeof(s), "mbuf_pool"); mbufpool = rte_pktmbuf_pool_create(s, nb_mbuf, - MEMPOOL_CACHE_SIZE, 0, + MEMPOOL_CACHE_SIZE, RTE_CACHE_LINE_SIZE, RTE_MBUF_DEFAULT_BUF_SIZE, SOCKET_ID_ANY); if (mbufpool == NULL) { printf("Cannot init mbuf pool\n"); @@ -1468,6 +1504,8 @@ ut_teardown_inline_ipsec(void) static int inline_ipsec_testsuite_setup(void) { + struct rte_eth_conf local_port_conf; + struct rte_eth_dev_info dev_info; uint16_t nb_rxd; uint16_t nb_txd; uint16_t nb_ports; @@ -1510,9 +1548,25 @@ inline_ipsec_testsuite_setup(void) /* configuring port 0 for the test is enough */ port_id = 0; + if (rte_eth_dev_info_get(0, &dev_info)) { + printf("Failed to get devinfo"); + return -1; + } + + memcpy(&local_port_conf, &port_conf, sizeof(port_conf)); + /* Add Multi seg flags */ + if (sg_mode) { + uint16_t max_data_room = RTE_MBUF_DEFAULT_DATAROOM * + dev_info.rx_desc_lim.nb_seg_max; + + local_port_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_SCATTER; + local_port_conf.txmode.offloads |= RTE_ETH_TX_OFFLOAD_MULTI_SEGS; + local_port_conf.rxmode.mtu = RTE_MIN(dev_info.max_mtu, max_data_room - 256); + } + /* port configure */ ret = rte_eth_dev_configure(port_id, nb_rx_queue, - nb_tx_queue, &port_conf); + nb_tx_queue, &local_port_conf); if (ret < 0) { printf("Cannot configure device: err=%d, port=%d\n", ret, port_id); @@ -1546,6 +1600,15 @@ inline_ipsec_testsuite_setup(void) } test_ipsec_alg_list_populate(); + /* Change the plaintext size for tests without Known vectors */ + if (sg_mode) { + /* Leave space of 256B as ESP packet would be bigger and we + * expect packets to be received back on same interface. + * Without SG mode, default value is picked. + */ + plaintext_len = local_port_conf.rxmode.mtu - 256; + } + return 0; } @@ -1922,6 +1985,7 @@ test_ipsec_inline_proto_display_list(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.display_alg = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -1934,6 +1998,7 @@ test_ipsec_inline_proto_udp_encap(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.udp_encap = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -1947,6 +2012,7 @@ test_ipsec_inline_proto_udp_ports_verify(const void *data __rte_unused) flags.udp_encap = true; flags.udp_ports_verify = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -1959,6 +2025,7 @@ test_ipsec_inline_proto_err_icv_corrupt(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.icv_corrupt = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -1971,6 +2038,7 @@ test_ipsec_inline_proto_tunnel_dst_addr_verify(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.tunnel_hdr_verify = RTE_SECURITY_IPSEC_TUNNEL_VERIFY_DST_ADDR; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -1983,6 +2051,7 @@ test_ipsec_inline_proto_tunnel_src_dst_addr_verify(const void *data __rte_unused memset(&flags, 0, sizeof(flags)); flags.tunnel_hdr_verify = RTE_SECURITY_IPSEC_TUNNEL_VERIFY_SRC_DST_ADDR; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -1995,6 +2064,7 @@ test_ipsec_inline_proto_inner_ip_csum(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.ip_csum = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2007,6 +2077,7 @@ test_ipsec_inline_proto_inner_l4_csum(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.l4_csum = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2020,6 +2091,7 @@ test_ipsec_inline_proto_tunnel_v4_in_v4(const void *data __rte_unused) flags.ipv6 = false; flags.tunnel_ipv6 = false; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2033,6 +2105,7 @@ test_ipsec_inline_proto_tunnel_v6_in_v6(const void *data __rte_unused) flags.ipv6 = true; flags.tunnel_ipv6 = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2046,6 +2119,7 @@ test_ipsec_inline_proto_tunnel_v4_in_v6(const void *data __rte_unused) flags.ipv6 = false; flags.tunnel_ipv6 = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2059,6 +2133,7 @@ test_ipsec_inline_proto_tunnel_v6_in_v4(const void *data __rte_unused) flags.ipv6 = true; flags.tunnel_ipv6 = false; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2072,6 +2147,7 @@ test_ipsec_inline_proto_transport_v4(const void *data __rte_unused) flags.ipv6 = false; flags.transport = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2082,6 +2158,7 @@ test_ipsec_inline_proto_transport_l4_csum(const void *data __rte_unused) struct ipsec_test_flags flags = { .l4_csum = true, .transport = true, + .plaintext_len = plaintext_len, }; return test_ipsec_inline_proto_all(&flags); @@ -2095,6 +2172,7 @@ test_ipsec_inline_proto_stats(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.stats_success = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2107,6 +2185,7 @@ test_ipsec_inline_proto_pkt_fragment(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.fragment = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); @@ -2120,6 +2199,7 @@ test_ipsec_inline_proto_copy_df_inner_0(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.df = TEST_IPSEC_COPY_DF_INNER_0; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2132,6 +2212,7 @@ test_ipsec_inline_proto_copy_df_inner_1(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.df = TEST_IPSEC_COPY_DF_INNER_1; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2144,6 +2225,7 @@ test_ipsec_inline_proto_set_df_0_inner_1(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.df = TEST_IPSEC_SET_DF_0_INNER_1; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2156,6 +2238,7 @@ test_ipsec_inline_proto_set_df_1_inner_0(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.df = TEST_IPSEC_SET_DF_1_INNER_0; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2168,6 +2251,7 @@ test_ipsec_inline_proto_ipv4_copy_dscp_inner_0(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.dscp = TEST_IPSEC_COPY_DSCP_INNER_0; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2180,6 +2264,7 @@ test_ipsec_inline_proto_ipv4_copy_dscp_inner_1(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.dscp = TEST_IPSEC_COPY_DSCP_INNER_1; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2192,6 +2277,7 @@ test_ipsec_inline_proto_ipv4_set_dscp_0_inner_1(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.dscp = TEST_IPSEC_SET_DSCP_0_INNER_1; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2204,6 +2290,7 @@ test_ipsec_inline_proto_ipv4_set_dscp_1_inner_0(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.dscp = TEST_IPSEC_SET_DSCP_1_INNER_0; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2218,6 +2305,7 @@ test_ipsec_inline_proto_ipv6_copy_dscp_inner_0(const void *data __rte_unused) flags.ipv6 = true; flags.tunnel_ipv6 = true; flags.dscp = TEST_IPSEC_COPY_DSCP_INNER_0; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2232,6 +2320,7 @@ test_ipsec_inline_proto_ipv6_copy_dscp_inner_1(const void *data __rte_unused) flags.ipv6 = true; flags.tunnel_ipv6 = true; flags.dscp = TEST_IPSEC_COPY_DSCP_INNER_1; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2246,6 +2335,7 @@ test_ipsec_inline_proto_ipv6_set_dscp_0_inner_1(const void *data __rte_unused) flags.ipv6 = true; flags.tunnel_ipv6 = true; flags.dscp = TEST_IPSEC_SET_DSCP_0_INNER_1; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2260,6 +2350,7 @@ test_ipsec_inline_proto_ipv6_set_dscp_1_inner_0(const void *data __rte_unused) flags.ipv6 = true; flags.tunnel_ipv6 = true; flags.dscp = TEST_IPSEC_SET_DSCP_1_INNER_0; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2324,7 +2415,8 @@ static int test_ipsec_inline_proto_ipv4_ttl_decrement(const void *data __rte_unused) { struct ipsec_test_flags flags = { - .dec_ttl_or_hop_limit = true + .dec_ttl_or_hop_limit = true, + .plaintext_len = plaintext_len, }; return test_ipsec_inline_proto_all(&flags); @@ -2335,7 +2427,8 @@ test_ipsec_inline_proto_ipv6_hop_limit_decrement(const void *data __rte_unused) { struct ipsec_test_flags flags = { .ipv6 = true, - .dec_ttl_or_hop_limit = true + .dec_ttl_or_hop_limit = true, + .plaintext_len = plaintext_len, }; return test_ipsec_inline_proto_all(&flags); @@ -2349,6 +2442,7 @@ test_ipsec_inline_proto_iv_gen(const void *data __rte_unused) memset(&flags, 0, sizeof(flags)); flags.iv_gen = true; + flags.plaintext_len = plaintext_len; return test_ipsec_inline_proto_all(&flags); } @@ -2357,7 +2451,8 @@ static int test_ipsec_inline_proto_sa_pkt_soft_expiry(const void *data __rte_unused) { struct ipsec_test_flags flags = { - .sa_expiry_pkts_soft = true + .sa_expiry_pkts_soft = true, + .plaintext_len = plaintext_len, }; return test_ipsec_inline_proto_all(&flags); } @@ -2365,7 +2460,8 @@ static int test_ipsec_inline_proto_sa_byte_soft_expiry(const void *data __rte_unused) { struct ipsec_test_flags flags = { - .sa_expiry_bytes_soft = true + .sa_expiry_bytes_soft = true, + .plaintext_len = plaintext_len, }; return test_ipsec_inline_proto_all(&flags); } @@ -2398,6 +2494,7 @@ test_ipsec_inline_proto_known_vec_fragmented(const void *test_data) memset(&flags, 0, sizeof(flags)); flags.fragment = true; + flags.plaintext_len = plaintext_len; memcpy(&td_outb, test_data, sizeof(td_outb)); @@ -2420,6 +2517,7 @@ test_ipsec_inline_pkt_replay(const void *test_data, const uint64_t esn[], memset(&flags, 0, sizeof(flags)); flags.antireplay = true; + flags.plaintext_len = plaintext_len; for (i = 0; i < nb_pkts; i++) { memcpy(&td_outb[i], test_data, sizeof(td_outb[0])); @@ -2894,6 +2992,25 @@ test_inline_ipsec(void) return unit_test_suite_runner(&inline_ipsec_testsuite); } + +static int +test_inline_ipsec_sg(void) +{ + int rc; + + inline_ipsec_testsuite.setup = inline_ipsec_testsuite_setup; + inline_ipsec_testsuite.teardown = inline_ipsec_testsuite_teardown; + + sg_mode = true; + /* Run the tests */ + rc = unit_test_suite_runner(&inline_ipsec_testsuite); + sg_mode = false; + + port_conf.rxmode.offloads &= ~RTE_ETH_RX_OFFLOAD_SCATTER; + port_conf.txmode.offloads &= ~RTE_ETH_TX_OFFLOAD_MULTI_SEGS; + return rc; +} + static int test_event_inline_ipsec(void) { @@ -2905,4 +3022,5 @@ test_event_inline_ipsec(void) #endif /* !RTE_EXEC_ENV_WINDOWS */ REGISTER_TEST_COMMAND(inline_ipsec_autotest, test_inline_ipsec); +REGISTER_TEST_COMMAND(inline_ipsec_sg_autotest, test_inline_ipsec_sg); REGISTER_TEST_COMMAND(event_inline_ipsec_autotest, test_event_inline_ipsec); -- 2.25.1