[PATCH v4 3/3] dts: add virtio forwarding test suite

Patrick Robb probb at iol.unh.edu
Fri Nov 7 21:48:26 CET 2025


On Fri, Oct 24, 2025 at 2:51 PM Dean Marx <dmarx at iol.unh.edu> wrote:

>
> +    @requires(topology_type=LinkTopology.TWO_LINKS)
> +    @func_test
> +    def pvp_loop(self) -> None:
> +        """Test vhost/virtio physical-virtual-physical topology.
> +
> +        Steps:
> +            * Launch testpmd session with a physical NIC and virtio-user
> vdev
> +                connected to a vhost-net socket.
> +            * Configure the tap interface that is created with IP address
> and
> +                set link state to UP.
> +            * Launch second testpmd session with af_packet vdev connected
> to
> +                the tap interface.
> +            * Start packet forwarding on both testpmd sessions.
> +            * Send 100 packets to the physical interface from external
> tester.
> +            * Capture packets on the same physical interface.
> +
> +        Verify:
> +            * Vhost session receives/forwards 100+ packets.
> +            * Physical interface receives all 100 sent packets.
> +        """
> +        self.sut_node = self._ctx.sut_node
> +        if not isinstance(self.sut_node.main_session, LinuxSession):
> +            verify(False, "Must be running on a Linux environment.")
> +        with TestPmd(
> +            prefix="virtio",
> +
> vdevs=[VirtualDevice("virtio_user0,path=/dev/vhost-net,queues=1,queue_size=1024")],
> +        ) as virtio:
> +            self.sut_node.main_session.set_interface_link_up(name="tap0")
>

Is it the case that if I already have tap0 created on my SUT machine, this
testsuite will create a tap1 and then the testsuite will fail to run
properly on the line above (because tap1 won't be brought up)? If there is
no way of getting around this limitation, we should add a new capability
for "tap interface names available" or something and skip if tap0 is found
in "ip a" or a similar solution.


> +            with TestPmd(
> +                prefix="vhost", no_pci=True,
> vdevs=[VirtualDevice("net_af_packet0,iface=tap0")]
> +            ) as vhost:
> +                virtio.set_forward_mode(SimpleForwardingModes.mac)
> +                vhost.set_forward_mode(SimpleForwardingModes.mac)
> +                vhost.start()
> +                virtio.start()
> +
> +                packet = Ether() / IP()
> +                packets = [packet] * 100
> +                captured_packets = send_packets_and_capture(packets)
> +
> +                vhost.stop()
> +                virtio.stop()
> +
> +                vhost_forwarding_stats, vhost_raw_output =
> vhost.show_port_stats_all()
> +
> +                rx_packets = vhost_forwarding_stats[0].rx_packets
> +                tx_packets = vhost_forwarding_stats[0].tx_packets
> +
> +                log(f"Vhost forwarding statistics:\n{vhost_raw_output}")
> +
> +                verify(
> +                    rx_packets >= 100 and tx_packets >= 100,
> +                    f"PVP loop forwarding verification failed: vhost
> interface RX={rx_packets},"
> +                    f" TX={tx_packets} (expected ≥100 each).",
> +                )
> +
> +                verify(
> +                    len(captured_packets) >= 100, "Sent packets not
> received on physical interface."
> +                )
> --
> 2.51.0
>
>

Otherwise, change the pvp requirement to ONE_LINK, set portlist to 0, 2, 1
(2 is the vdev) when 2 link topology, and 0, 1 when 1 link, and set
forwarding to chained mode so that the packet forwarding works as expected
regardless of whether we have 1 or 2 physical interfaces the testpmd
instance is using.

Thanks.

Reviewed-by: Patrick Robb <probb at iol.unh.edu>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mails.dpdk.org/archives/dev/attachments/20251107/66562675/attachment-0001.htm>


More information about the dev mailing list