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 0806943866; Mon, 8 Jan 2024 17:53:46 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B8D20402DF; Mon, 8 Jan 2024 17:53:45 +0100 (CET) Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) by mails.dpdk.org (Postfix) with ESMTP id 578B040273 for ; Mon, 8 Jan 2024 17:53:44 +0100 (CET) Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-5cda24a77e0so531853a12.2 for ; Mon, 08 Jan 2024 08:53:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; t=1704732823; x=1705337623; darn=dpdk.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=qLzIuYyI2zfUfstQMbMjiF3XIxbeb8AMiNL7kFJJZag=; b=PP6dKWyDzmiQFT9r7ejB0q4AWrAR8TOyqY3daglFhZksMkpcv947gh9HdDa2aFOHwO HHZ+9Ggge5Q7byDlwpcL86Lid1oMtOLeZhxh/+qNjDnqUYqcuX5ybI5MAhGLQ4Ns3dNs ePo/qk+Xgt2407/QDQe+67mD5QvSIztr7O5xo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704732823; x=1705337623; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=qLzIuYyI2zfUfstQMbMjiF3XIxbeb8AMiNL7kFJJZag=; b=oWpLH01amq44V99MDPyidZMkos5K0jHI+aF7YaE5VjEQC2EnA62pH6Sg8Z6TtYfQ/B Vbn//YHxarCRRa2wEb0nYlWW1dN57m6qc2A8PVSKFMjEG9HgIeNostEIg7uyYXE112vR pVjcfSraNC5Ru2wO3+19QGjYV22Ngg7EPn9dc3+r3PoFBlyz90x+VroHVnx9QWKHHYK9 EuY77QqP9CyYxMXjMQ8b1yD9Pk3lGWItu6TwYzY94ZyQ/aK3zLU3bS1ZRB+a4Cgvq1WL IvX2zi9O6DG8D8Kmv9T5CXJR2EpNqkDI77WFdq6eilj3rXnP/lLaJluN1L7Vuhy5j7A2 wgoA== X-Gm-Message-State: AOJu0YzQmjQlVFw8m7ZEILMFa5OuzSmUSTOsCiJfsss0NWDJLu13SotX KPnFiCGAXiDzQNJOhJgotS8ihpw3RQiIZ0+tc/t6Mt4LkeqzDA== X-Google-Smtp-Source: AGHT+IHZY7Hx3rIrGOns6fs3KpWfFZqw63NJU3rvxJjGlFQFu8wy+oHajSFb+xrHczxFOInBkM0u1LJHXAqmtDPoeKg= X-Received: by 2002:a05:6a20:6e82:b0:199:9acc:7d7b with SMTP id gr2-20020a056a206e8200b001999acc7d7bmr907325pzb.112.1704732823337; Mon, 08 Jan 2024 08:53:43 -0800 (PST) MIME-Version: 1.0 References: <20240103221217.18954-1-jspewock@iol.unh.edu> <20240103223206.23129-1-jspewock@iol.unh.edu> <20240103223206.23129-8-jspewock@iol.unh.edu> In-Reply-To: From: Jeremy Spewock Date: Mon, 8 Jan 2024 11:53:32 -0500 Message-ID: Subject: Re: [PATCH v6 7/7] dts: add pmd_buffer_scatter test suite To: =?UTF-8?Q?Juraj_Linke=C5=A1?= Cc: Honnappa.Nagarahalli@arm.com, thomas@monjalon.net, wathsala.vithanage@arm.com, probb@iol.unh.edu, paul.szczepanek@arm.com, yoan.picchi@foss.arm.com, lylavoie@iol.unh.edu, ferruh.yigit@amd.com, andrew.rybchenko@oktetlabs.ru, dev@dpdk.org Content-Type: multipart/alternative; boundary="0000000000005f4ed1060e720a01" 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 --0000000000005f4ed1060e720a01 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jan 8, 2024 at 10:47=E2=80=AFAM Juraj Linke=C5=A1 wrote: > On Wed, Jan 3, 2024 at 11:33=E2=80=AFPM wrote: > > > > From: Jeremy Spewock > > > > This test suite provides testing of the support of scattered packets by > > Poll Mode Drivers using testpmd, verifying the ability to receive and > > transmit scattered multi-segment packets made up of multiple > > non-contiguous memory buffers. This is tested through 5 different cases > > in which the length of the packets sent are less than the mbuf size, > > equal to the mbuf size, and 1, 4, and 5 bytes greater than the mbuf siz= e > > in order to show both the CRC and the packet data are capable of > > existing in the first, second, or both buffers. > > > > Naturally, if the PMD is capable of forwarding scattered packets which > > it receives as input, this shows it is capable of both receiving and > > transmitting scattered packets. > > > > Signed-off-by: Jeremy Spewock > > --- > > dts/tests/TestSuite_pmd_buffer_scatter.py | 126 ++++++++++++++++++++++ > > 1 file changed, 126 insertions(+) > > create mode 100644 dts/tests/TestSuite_pmd_buffer_scatter.py > > > > diff --git a/dts/tests/TestSuite_pmd_buffer_scatter.py > b/dts/tests/TestSuite_pmd_buffer_scatter.py > > new file mode 100644 > > index 0000000000..8838c3404f > > --- /dev/null > > +++ b/dts/tests/TestSuite_pmd_buffer_scatter.py > > @@ -0,0 +1,126 @@ > > +# SPDX-License-Identifier: BSD-3-Clause > > +# Copyright(c) 2023-2024 University of New Hampshire > > + > > +"""Multi-segment packet scattering testing suite. > > Test suite - I guess this is a copy-paste? > Good catch, it probably was. > > + > > +This testing suite tests the support of transmitting and receiving > scattered packets. This is shown > > +by the Poll Mode Driver being able to forward scattered multi-segment > packets composed of multiple > > +non-contiguous memory buffers. To ensure the receipt of scattered > packets, the DMA rings of the > > +port's RX queues must be configured with mbuf data buffers whose size > is less than the maximum > > +length. > > + > > +If it is the case that the Poll Mode Driver can forward scattered > packets which it receives, then > > +this suffices to show the Poll Mode Driver is capable of both receivin= g > and transmitting scattered > > +packets. > > +""" > > We have a newline between the docstring and the import everywhere. > You're right, I must have missed it here, I'll add that. > > +import struct > > + > > +from scapy.layers.inet import IP # type: ignore[import] > > +from scapy.layers.l2 import Ether # type: ignore[import] > > +from scapy.packet import Raw # type: ignore[import] > > +from scapy.utils import hexstr # type: ignore[import] > > + > > +from framework.remote_session.testpmd_shell import > TestPmdForwardingModes, TestPmdShell > > +from framework.test_suite import TestSuite > > + > > + > > +class PmdBufferScatter(TestSuite): > > + """DPDK PMD packet scattering test suite. > > + > > + Configure the Rx queues to have mbuf data buffers whose sizes are > smaller than the maximum > > + packet size. Specifically, set mbuf data buffers to have a size of > 2048 to fit a full 1512-byte > > + (CRC included) ethernet frame in a mono-segment packet. The testin= g > of scattered packets is > > + done by sending a packet whose length is greater than the size of > the configured size of mbuf > > + data buffers. There are a total of 5 packets sent within test case= s > which have lengths less > > + than, equal to, and greater than the mbuf size. There are multiple > packets sent with lengths > > + greater than the mbuf size in order to test cases such as: > > + > > + 1. A single byte of the CRC being in a second buffer while the > remaining 3 bytes are stored in > > + the first buffer alongside packet data. > > + 2. The entire CRC being stored in a second buffer while all of the > packet data is stored in the > > + first. > > + 3. Most of the packet data being stored in the first buffer and a > single byte of packet data > > + stored in a second buffer alongside the CRC. > > + """ > > + > > + def set_up_suite(self) -> None: > > + """Set up the test suite. > > + > > + Setup: > > + Verify they we have at least 2 port links in the current > execution and increase the MTU > > Typo - they. > Oops, thank you! > > > + of both ports on the tg_node to 9000 to support larger > packet sizes. > > The description should be code agnostic, so let's use traffic > generator node instead of tg_node. > Good point, I'll update this. > > > + """ > > + self.verify( > > + len(self._port_links) > 1, > > + "Must have at least two port links to run scatter", > > I'd like this to be at least "Must have at least two port links to run > the scatter test suite" so that it's immediately obvious where this > comes from. I'm also debating which of these is better: "Must have at > least" or "There must be at least", but I'm not sure. > I think reading it over that "There must be at least" sounds better, I'll update this as well. > > > + ) > > + > > + 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: > > + """Generate and send packet to the SUT. > > send a packet > > But this also captures a packet, so let's mention that. > Good point, I'll add this. > > > + > > + Functional test for scatter packets. > > This is just part of the test. The actual test is the pmd_scatter > method with test cases being the callers of pmd_scatter. > We should improve this. We mentioned a packet, so let's describe it. > This definitely could be expanded, this likely just came from pulling from old DTS or before the docstrings were expanded. Good catch! > > > + > > + Args: > > + pktsize: Size of the packet to generate and send. > > + """ > > + packet =3D Ether() / IP() / Raw() > > + packet.getlayer(2).load =3D "" > > + payload_len =3D pktsize - len(packet) - 4 > > + payload =3D ["58"] * payload_len > > + # pack the payload > > + for X_in_hex in payload: > > + packet.load +=3D struct.pack("=3DB", int("%s%s" % (X_in_he= x[0], > X_in_hex[1]), 16)) > > + received_packets =3D self.send_packet_and_capture(packet) > > + self.verify(len(received_packets) > 0, "Did not receive any > packets.") > > + load =3D hexstr(received_packets[0].getlayer(2), onlyhex=3D1) > > + > > + return load > > + > > + def pmd_scatter(self, mbsize: int) -> 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 case are -1, 0, 1, 4, 5 respectively. > > + > > In the test. > Good point, I'll change this. > > > + Test: > > + Start testpmd and run functional test with preset mbsize. > > + """ > > + testpmd =3D self.sut_node.create_interactive_shell( > > + TestPmdShell, > > + app_parameters=3D( > > + "--mbcache=3D200 " > > + f"--mbuf-size=3D{mbsize} " > > + "--max-pkt-len=3D9000 " > > + "--port-topology=3Dpaired " > > + "--tx-offloads=3D0x00008000" > > + ), > > + privileged=3DTrue, > > + ) > > + testpmd.set_forward_mode(TestPmdForwardingModes.mac) > > + testpmd.start() > > + > > + for offset in [-1, 0, 1, 4, 5]: > > + recv_payload =3D self.scatter_pktgen_send_packet(mbsize + > offset) > > + self._logger.debug(f"Payload of scattered packet after > forwarding: \n{recv_payload}") > > + self.verify( > > + ("58 " * 8).strip() in recv_payload, > > + f"Payload of scattered packet did not match expected > payload with offset {offset}.", > > + ) > > + testpmd.stop() > > + > > + def test_scatter_mbuf_2048(self) -> None: > > + """Run :func:`~PmdBufferScatter.pmd_scatter` function with > `mbsize` set to 2048.""" > > This would probably read better as "Run the pmd_scatter test" > I agree, I'll update this. > > > + self.pmd_scatter(mbsize=3D2048) > > + > > + def tear_down_suite(self) -> None: > > + """Tear down the test suite. > > + > > + Teardown: > > + Set the MTU of the tg_node back to a more standard size of > 1500 > > + """ > > + self.tg_node.main_session.configure_port_mtu(1500, > self._tg_port_egress) > > + self.tg_node.main_session.configure_port_mtu(1500, > self._tg_port_ingress) > > -- > > 2.43.0 > > > Thank you again for the thorough feedback! --0000000000005f4ed1060e720a01 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


<= div dir=3D"ltr" class=3D"gmail_attr">On Mon, Jan 8, 2024 at 10:47=E2=80=AFA= M Juraj Linke=C5=A1 <juraj.linkes@pantheon.tech> wrote:
On Wed, Jan 3, 2024 at 11:33= =E2=80=AFPM <j= spewock@iol.unh.edu> wrote:
>
> From: Jeremy Spewock <jspewock@iol.unh.edu>
>
> This test suite provides testing of the support of scattered packets b= y
> Poll Mode Drivers using testpmd, verifying the ability to receive and<= br> > transmit scattered multi-segment packets made up of multiple
> non-contiguous memory buffers. This is tested through 5 different case= s
> in which the length of the packets sent are less than the mbuf size, > equal to the mbuf size, and 1, 4, and 5 bytes greater than the mbuf si= ze
> in order to show both the CRC and the packet data are capable of
> existing in the first, second, or both buffers.
>
> Naturally, if the PMD is capable of forwarding scattered packets which=
> it receives as input, this shows it is capable of both receiving and > transmitting scattered packets.
>
> Signed-off-by: Jeremy Spewock <jspewock@iol.unh.edu>
> ---
>=C2=A0 dts/tests/TestSuite_pmd_buffer_scatter.py | 126 ++++++++++++++++= ++++++
>=C2=A0 1 file changed, 126 insertions(+)
>=C2=A0 create mode 100644 dts/tests/TestSuite_pmd_buffer_scatter.py
>
> diff --git a/dts/tests/TestSuite_pmd_buffer_scatter.py b/dts/tests/Tes= tSuite_pmd_buffer_scatter.py
> new file mode 100644
> index 0000000000..8838c3404f
> --- /dev/null
> +++ b/dts/tests/TestSuite_pmd_buffer_scatter.py
> @@ -0,0 +1,126 @@
> +# SPDX-License-Identifier: BSD-3-Clause
> +# Copyright(c) 2023-2024 University of New Hampshire
> +
> +"""Multi-segment packet scattering testing suite.

Test suite - I guess this is a copy-paste?

<= div>
Goo= d catch, it probably was.


> +
> +This testing suite tests the support of transmitting and receiving sc= attered packets. This is shown
> +by the Poll Mode Driver being able to forward scattered multi-segment= packets composed of multiple
> +non-contiguous memory buffers. To ensure the receipt of scattered pac= kets, the DMA rings of the
> +port's RX queues must be configured with mbuf data buffers whose = size is less than the maximum
> +length.
> +
> +If it is the case that the Poll Mode Driver can forward scattered pac= kets which it receives, then
> +this suffices to show the Poll Mode Driver is capable of both receivi= ng and transmitting scattered
> +packets.
> +"""

We have a newline between the docstring and the import everywhere.

You're right, I must have missed it here, I'll= add that.


> +import struct
> +
> +from scapy.layers.inet import IP=C2=A0 # type: ignore[import]
> +from scapy.layers.l2 import Ether=C2=A0 # type: ignore[import]
> +from scapy.packet import Raw=C2=A0 # type: ignore[import]
> +from scapy.utils import hexstr=C2=A0 # type: ignore[import]
> +
> +from framework.remote_session.testpmd_shell import TestPmdForwardingM= odes, TestPmdShell
> +from framework.test_suite import TestSuite
> +
> +
> +class PmdBufferScatter(TestSuite):
> +=C2=A0 =C2=A0 """DPDK PMD packet scattering test suite= .
> +
> +=C2=A0 =C2=A0 Configure the Rx queues to have mbuf data buffers whose= sizes are smaller than the maximum
> +=C2=A0 =C2=A0 packet size. Specifically, set mbuf data buffers to hav= e a size of 2048 to fit a full 1512-byte
> +=C2=A0 =C2=A0 (CRC included) ethernet frame in a mono-segment packet.= The testing of scattered packets is
> +=C2=A0 =C2=A0 done by sending a packet whose length is greater than t= he size of the configured size of mbuf
> +=C2=A0 =C2=A0 data buffers. There are a total of 5 packets sent withi= n test cases which have lengths less
> +=C2=A0 =C2=A0 than, equal to, and greater than the mbuf size. There a= re multiple packets sent with lengths
> +=C2=A0 =C2=A0 greater than the mbuf size in order to test cases such = as:
> +
> +=C2=A0 =C2=A0 1. A single byte of the CRC being in a second buffer wh= ile the remaining 3 bytes are stored in
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 the first buffer alongside packet data. > +=C2=A0 =C2=A0 2. The entire CRC being stored in a second buffer while= all of the packet data is stored in the
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 first.
> +=C2=A0 =C2=A0 3. Most of the packet data being stored in the first bu= ffer and a single byte of packet data
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 stored in a second buffer alongside the C= RC.
> +=C2=A0 =C2=A0 """
> +
> +=C2=A0 =C2=A0 def set_up_suite(self) -> None:
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Set up the test suite.<= br> > +
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 Setup:
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Verify they we have at leas= t 2 port links in the current execution and increase the MTU

Typo - they.

Oops, thank you!
<= div>=C2=A0

> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 of both ports on the tg_nod= e to 9000 to support larger packet sizes.

The description should be code agnostic, so let's use traffic
generator node instead of tg_node.

Good point,= I'll update this.
=C2=A0

> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.verify(
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 len(self._port_links) > = 1,
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "Must have at least tw= o port links to run scatter",

I'd like this to be at least "Must have at least two port links to= run
the scatter test suite" so that it's immediately obvious where thi= s
comes from. I'm also debating which of these is better: "Must have= at
least" or "There must be at least", but I'm not sure.

I think reading it over that "There must be= at least" sounds better, I'll update this as well.
=C2=A0

> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 )
> +
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.tg_node.main_session.configure_port_= mtu(9000, self._tg_port_egress)
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.tg_node.main_session.configure_port_= mtu(9000, self._tg_port_ingress)
> +
> +=C2=A0 =C2=A0 def scatter_pktgen_send_packet(self, pktsize: int) ->= ; str:
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Generate and send packe= t to the SUT.

send a packet

But this also captures a packet, so let's mention that.

Good point, I'll add this.
=C2=A0

> +
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 Functional test for scatter packets.

This is just part of the test. The actual test is the pmd_scatter
method with test cases being the callers of pmd_scatter.
We should improve this. We mentioned a packet, so let's describe it.

This definitely could be expanded, this likely j= ust came from pulling from old DTS or before the docstrings were expanded. = Good catch!
=C2=A0

> +
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 Args:
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 pktsize: Size of the packet= to generate and send.
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 packet =3D Ether() / IP() / Raw()
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 packet.getlayer(2).load =3D ""<= br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 payload_len =3D pktsize - len(packet) - 4=
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 payload =3D ["58"] * payload_le= n
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 # pack the payload
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 for X_in_hex in payload:
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 packet.load +=3D struct.pac= k("=3DB", int("%s%s" % (X_in_hex[0], X_in_hex[1]), 16))=
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 received_packets =3D self.send_packet_and= _capture(packet)
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.verify(len(received_packets) > 0,= "Did not receive any packets.")
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 load =3D hexstr(received_packets[0].getla= yer(2), onlyhex=3D1)
> +
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 return load
> +
> +=C2=A0 =C2=A0 def pmd_scatter(self, mbsize: int) -> None:
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Testpmd support of rece= iving and sending scattered multi-segment packets.
> +
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 Support for scattered packets is shown by= sending 5 packets of differing length
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 where the length of the packet is calcula= ted by taking mbuf-size + an offset. The
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 offsets used in the test case are -1, 0, = 1, 4, 5 respectively.
> +

In the test.

Good point, I'll change this.=
=C2=A0

> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 Test:
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Start testpmd and run funct= ional test with preset mbsize.
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 testpmd =3D self.sut_node.create_interact= ive_shell(
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 TestPmdShell,
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 app_parameters=3D(
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "--mbcac= he=3D200 "
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 f"--mbuf= -size=3D{mbsize} "
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "--max-p= kt-len=3D9000 "
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "--port-= topology=3Dpaired "
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "--tx-of= floads=3D0x00008000"
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ),
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 privileged=3DTrue,
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 )
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 testpmd.set_forward_mode(TestPmdForwardin= gModes.mac)
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 testpmd.start()
> +
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 for offset in [-1, 0, 1, 4, 5]:
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 recv_payload =3D self.scatt= er_pktgen_send_packet(mbsize + offset)
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 self._logger.debug(f"P= ayload of scattered packet after forwarding: \n{recv_payload}")
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 self.verify(
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ("58 &qu= ot; * 8).strip() in recv_payload,
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 f"Payloa= d of scattered packet did not match expected payload with offset {offset}.&= quot;,
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 )
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 testpmd.stop()
> +
> +=C2=A0 =C2=A0 def test_scatter_mbuf_2048(self) -> None:
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Run :func:`~PmdBufferSc= atter.pmd_scatter` function with `mbsize` set to 2048."""
This would probably read better as "Run the pmd_scatter test"
=

I agree, I'll update this.
=C2=A0

> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.pmd_scatter(mbsize=3D2048)
> +
> +=C2=A0 =C2=A0 def tear_down_suite(self) -> None:
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Tear down the test suit= e.
> +
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 Teardown:
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Set the MTU of the tg_node = back to a more standard size of 1500
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.tg_node.main_session.configure_port_= mtu(1500, self._tg_port_egress)
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.tg_node.main_session.configure_port_= mtu(1500, self._tg_port_ingress)
> --
> 2.43.0
>

Thank you again for the thorough feedback!
=
--0000000000005f4ed1060e720a01--