On 22/10/2026 18:29, Koushik Bhargav Nimoji wrote:


On Thu, Oct 22, 2026 at 9:51 AM Luca Vizzarro <[email protected] <mailto:[email protected]>> wrote:

    On 20/10/2026 17:06, Koushik Bhargav Nimoji wrote:
     > On Fri, Oct 16, 2026 at 12:28 PM Luca Vizzarro
    <[email protected] <mailto:[email protected]>
     > <mailto:[email protected] <mailto:[email protected]>>> wrote:
     >
     >      > +        if (
     >      > +            ctx.topology.type is not LinkTopology.NO_LINK
     >      > +            and testsuite_type is not TestSuiteType.CRYPTO
     >      > +        ):
     >      > +            if testsuite_type == TestSuiteType.FUNC:
     >      > +                required_tg, other_tg = ctx.func_tg,
    ctx.perf_tg
     >      > +            else:
     >      > +                required_tg, other_tg = ctx.perf_tg,
    ctx.func_tg
     >      > +
     >      > +            if other_tg and other_tg.is_setup:
     >      > +                other_tg.teardown()
     >      > +
     >      > +                if testsuite_type == TestSuiteType.FUNC and
     >     ctx.tg_node:
     >      > +                    for port in ctx.topology.tg_ports:
     >      > +
     >     ctx.tg_node.main_session.bind_ports_to_driver([port],
     >     port.config.os_driver)
     >
     >     I am a bit confused why this happens here. The driver to be
    bound to
     >     should be governed by the TG that uses such ports. Could be
    os_driver,
     >     could be dpdk_driver, regardless of Scapy and TRex.
     >
     > This section exists because of how scapy and TRex handle port driver
     > bindings. TRex automatically binds ports to the required driver when
     > setup, but scapy requires it to be done manually. That's why if
    the next
     > test suite to be tested is a functional test suite, the TG ports are
     > rebound to the os_driver manually here.

    So I think the original intention here was that TRex would
    exceptionally
    change the driver as the normal behaviour was that the TG was not going
    to be subject to driver binding. Therefore what would make sense is for
    the TG to control driver binding accordingly. So if Scapy is setup that
    it would be up to Scapy to "bind to kernel drivers" if needed. What do
    you think?


I think you're definitely right here, it should be up to the TG to take care of port bindings instead of doing it manually. Scapy currently does take care of that, but there's an issue with DTS's internal state being out of date after rebinding to the kernel driver. As a workaround for this, I have added a teardown method to trex.py that rebinds ports to the kernel driver before scapy is set up. I will send out a version shortly that reflects these changes, thanks for bringing this up.

So I think the problem with the state is because you are not using Topology which is the ports manager/owner. Even if `main_session` is public, it's an internal API which use should be limited to some. If you look at the setup of Scapy:

    def setup(self, topology: Topology) -> None:
        super().setup(topology)
        topology.configure_ports("tg", "kernel")

What I expect to see in the Trex class is:

    def setup(self, topology: Topology) -> None:
        super().setup(topology)
        topology.configure_ports("tg", "dpdk")

If this doesn't work as intended, then there is a bug that needs resolving.

Luca

Reply via email to