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 E2C6345879; Tue, 27 Aug 2024 19:23:36 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CF99E40DF5; Tue, 27 Aug 2024 19:23:36 +0200 (CEST) Received: from mail-io1-f98.google.com (mail-io1-f98.google.com [209.85.166.98]) by mails.dpdk.org (Postfix) with ESMTP id 8F6A8402AD for ; Tue, 27 Aug 2024 19:23:34 +0200 (CEST) Received: by mail-io1-f98.google.com with SMTP id ca18e2360f4ac-829e856a173so86287439f.1 for ; Tue, 27 Aug 2024 10:23:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; t=1724779414; x=1725384214; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bIa2ENlSkmFWg6M8VKUefujHHip9xx9OTnrPzq1XlyQ=; b=KyaqPkzIv4TfVqB//JuLgLhNhjbnRsZARSASrir9sxgdZ7uXNS1LbbQShO8nou5s4c MA+LpBwqMDOTGXyxjfs1p5M4H3nS3jLOe6t1hYkQiKrRImBNdc8GZvlNrM4QjXgkSybS pwsJW5IEWkmqzFjWum6f89A4IFvK3tBadCXCI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724779414; x=1725384214; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bIa2ENlSkmFWg6M8VKUefujHHip9xx9OTnrPzq1XlyQ=; b=RjHT3d5s4u+9wztdOSViMhraLf8tVXkK9ARlJT1o1js+V/iDoW6EXRqYeEcUfuuPdY Z/t4q4FjxxRLGiwcxXRHDlSdBxZ1nJAOLzxf3spAlv613uHo7oUIJCOSu2K/jP1emLRW kadeZ/kUrEBXzg9zdax7Px9KqS9m6XWXcMZJ0jC+nUxM6QjIIp9uAer6N1lXCqENECCX bPJPC8s1yAiN6sZuCZU+k0hecDWxcAP8VS0OKgAuaLoprUbK8cqAh38tbz1HLILiXVmO 9aFnNQZd2c4yPdfg2Z5yChG05iWQYuyQUszpDv4q5A0Brbokm5HTlGoFfkVzPvB5uzI9 AI7g== X-Gm-Message-State: AOJu0YxY+KqxTTRz9tRW9doNJfyclRhABUT7rMBCLdBh78sS+F8RXFAJ 0M7PFjZjVQ/KB3ywA4u4u6nfF687Rs7sICLyBZ+lyXUEmlXH2U91E1EKNh6etyEXZZVsh7S6Z0c 66C2C18UWhEPa3Tn8g0IrWrgVc8zw3JgTGNachEaCwcqGtR4p X-Google-Smtp-Source: AGHT+IHrnVRBVY07N3F/x8F+3f/pKvVG2Vs9treqv4BBKiqMfTwK+FVqjoBb0IO0cvHe5m7eAZR+GN/muyK/ X-Received: by 2002:a05:6602:2c94:b0:824:e42e:a1bd with SMTP id ca18e2360f4ac-827881eb403mr1681038839f.17.1724779413777; Tue, 27 Aug 2024 10:23:33 -0700 (PDT) Received: from postal.iol.unh.edu (postal.iol.unh.edu. [2606:4100:3880:1234::84]) by smtp-relay.gmail.com with ESMTPS id 8926c6da1cb9f-4ce70f7efa3sm491345173.40.2024.08.27.10.23.33 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 27 Aug 2024 10:23:33 -0700 (PDT) X-Relaying-Domain: iol.unh.edu Received: from iol.unh.edu (unknown [IPv6:2606:4100:3880:1257::1083]) by postal.iol.unh.edu (Postfix) with ESMTP id B48406050A6B; Tue, 27 Aug 2024 13:23:32 -0400 (EDT) From: jspewock@iol.unh.edu To: Honnappa.Nagarahalli@arm.com, probb@iol.unh.edu, thomas@monjalon.net, paul.szczepanek@arm.com, npratte@iol.unh.edu, juraj.linkes@pantheon.tech, alex.chapman@arm.com, yoan.picchi@foss.arm.com, wathsala.vithanage@arm.com, Luca.Vizzarro@arm.com Cc: dev@dpdk.org, Jeremy Spewock Subject: [PATCH v8 1/1] dts: add test case that utilizes offload to pmd_buffer_scatter Date: Tue, 27 Aug 2024 13:22:55 -0400 Message-ID: <20240827172255.10468-2-jspewock@iol.unh.edu> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240827172255.10468-1-jspewock@iol.unh.edu> References: <20240514201436.2496-1-jspewock@iol.unh.edu> <20240827172255.10468-1-jspewock@iol.unh.edu> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 From: Jeremy Spewock Some NICs tested in DPDK allow for the scattering of packets without an offload and others enforce that you enable the scattered_rx offload in testpmd. The current version of the suite for testing support of scattering packets only tests the case where the NIC supports testing without the offload, so an expansion of coverage is needed to cover the second case as well. depends-on: series-32799 ("dts: add test skipping based on capabilities") Signed-off-by: Jeremy Spewock --- dts/tests/TestSuite_pmd_buffer_scatter.py | 47 +++++++++++++++-------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/dts/tests/TestSuite_pmd_buffer_scatter.py b/dts/tests/TestSuite_pmd_buffer_scatter.py index 64c48b0793..6704c04325 100644 --- a/dts/tests/TestSuite_pmd_buffer_scatter.py +++ b/dts/tests/TestSuite_pmd_buffer_scatter.py @@ -19,7 +19,7 @@ from scapy.layers.inet import IP # type: ignore[import-untyped] from scapy.layers.l2 import Ether # type: ignore[import-untyped] -from scapy.packet import Raw # type: ignore[import-untyped] +from scapy.packet import Packet, Raw # type: ignore[import-untyped] from scapy.utils import hexstr # type: ignore[import-untyped] from framework.params.testpmd import SimpleForwardingModes @@ -55,25 +55,25 @@ def set_up_suite(self) -> None: """Set up the test suite. Setup: - Increase the MTU of both ports on the traffic generator to 9000 - to support larger packet sizes. + The traffic generator needs to send and receive packets that are, at most, as large as + the mbuf size of the ports + 5 in each test case, so 9000 should more than suffice. """ self.tg_node.main_session.configure_port_mtu(9000, self._tg_port_egress) self.tg_node.main_session.configure_port_mtu(9000, self._tg_port_ingress) - def scatter_pktgen_send_packet(self, pktsize: int) -> str: + def scatter_pktgen_send_packet(self, pktsize: int) -> list[Packet]: """Generate and send a packet to the SUT then capture what is forwarded back. Generate an IP packet of a specific length and send it to the SUT, - then capture the resulting received packet and extract its payload. - The desired length of the packet is met by packing its payload + then capture the resulting received packets and filter them down to the ones that have the + correct layers. The desired length of the packet is met by packing its payload with the letter "X" in hexadecimal. Args: pktsize: Size of the packet to generate and send. Returns: - The payload of the received packet as a string. + The filtered down list of received packets. """ packet = Ether() / IP() / Raw() packet.getlayer(2).load = "" @@ -83,20 +83,27 @@ def scatter_pktgen_send_packet(self, pktsize: int) -> str: for X_in_hex in payload: packet.load += struct.pack("=B", int("%s%s" % (X_in_hex[0], X_in_hex[1]), 16)) received_packets = self.send_packet_and_capture(packet) + # filter down the list to packets that have the appropriate structure + received_packets = list( + filter(lambda p: Ether in p and IP in p and Raw in p, received_packets) + ) self.verify(len(received_packets) > 0, "Did not receive any packets.") - load = hexstr(received_packets[0].getlayer(2), onlyhex=1) - return load + return received_packets - def pmd_scatter(self, mbsize: int) -> None: + def pmd_scatter(self, mbsize: int, enable_offload: bool = False) -> None: """Testpmd support of receiving and sending scattered multi-segment packets. Support for scattered packets is shown by sending 5 packets of differing length where the length of the packet is calculated by taking mbuf-size + an offset. The offsets used in the test are -1, 0, 1, 4, 5 respectively. + Args: + mbsize: Size to set memory buffers to when starting testpmd. + enable_offload: Whether or not to offload the scattering functionality in testpmd. + Test: - Start testpmd and run functional test with preset mbsize. + Start testpmd and run functional test with preset `mbsize`. """ with TestPmdShell( self.sut_node, @@ -105,16 +112,19 @@ def pmd_scatter(self, mbsize: int) -> None: mbuf_size=[mbsize], max_pkt_len=9000, tx_offloads=0x00008000, + enable_scatter=True if enable_offload else None, ) as testpmd: testpmd.start() for offset in [-1, 0, 1, 4, 5]: - recv_payload = self.scatter_pktgen_send_packet(mbsize + offset) - self._logger.debug( - f"Payload of scattered packet after forwarding: \n{recv_payload}" - ) + recv_packets = self.scatter_pktgen_send_packet(mbsize + offset) + self._logger.debug(f"Relevant captured packets: \n{recv_packets}") + self.verify( - ("58 " * 8).strip() in recv_payload, + any( + " ".join(["58"] * 8) in hexstr(pakt.getlayer(2), onlyhex=1) + for pakt in recv_packets + ), "Payload of scattered packet did not match expected payload with offset " f"{offset}.", ) @@ -125,6 +135,11 @@ def test_scatter_mbuf_2048(self) -> None: """Run the :meth:`pmd_scatter` test with `mbsize` set to 2048.""" self.pmd_scatter(mbsize=2048) + @func_test + def test_scatter_mbuf_2048_with_offload(self) -> None: + """Run the :meth:`pmd_scatter` test with `mbsize` set to 2048 and rx_scatter offload.""" + self.pmd_scatter(mbsize=2048, enable_offload=True) + def tear_down_suite(self) -> None: """Tear down the test suite. -- 2.46.0