[v1] dts: remove the OS UDP test suite

Message ID 20240419135216.106445-1-juraj.linkes@pantheon.tech (mailing list archive)
State New
Delegated to: Juraj Linkeš
Headers
Series [v1] dts: remove the OS UDP test suite |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/github-robot: build success github build: passed
ci/intel-Functional success Functional PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-compile-amd64-testing success Testing PASS
ci/iol-sample-apps-testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-unit-amd64-testing success Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-compile-arm64-testing success Testing PASS
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS

Commit Message

Juraj Linkeš April 19, 2024, 1:52 p.m. UTC
The test suite served as a demonstration of the Scapy traffic generator
implementation. Now that we have a test suite that uses DPDK code (via
testpmd), there is no reason to keep the test suite, as there's no
expectation it'll be actually used in any setup.

Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
---
 dts/conf.yaml                                |  1 -
 dts/framework/config/conf_yaml_schema.json   |  1 -
 dts/framework/test_suite.py                  | 36 -------------
 dts/framework/testbed_model/linux_session.py | 27 +---------
 dts/framework/testbed_model/node.py          | 29 +----------
 dts/framework/testbed_model/os_session.py    | 36 +------------
 dts/framework/testbed_model/sut_node.py      |  9 ----
 dts/tests/TestSuite_os_udp.py                | 53 --------------------
 8 files changed, 4 insertions(+), 188 deletions(-)
 delete mode 100644 dts/tests/TestSuite_os_udp.py
  

Comments

Luca Vizzarro April 23, 2024, 10:39 a.m. UTC | #1
On 19/04/2024 14:52, Juraj Linkeš wrote:
> diff --git a/dts/framework/test_suite.py b/dts/framework/test_suite.py
> <snip>
> -    def configure_testbed_ipv4(self, restore: bool = False) -> None:
> -        """Configure IPv4 addresses on all testbed ports.
> -
> -        The configured ports are:
> -
> -        * SUT ingress port,
> -        * SUT egress port,
> -        * TG ingress port,
> -        * TG egress port.
> -
> -        Args:
> -            restore: If :data:`True`, will remove the configuration instead.
> -        """
> -        delete = True if restore else False
> -        enable = False if restore else True
> -        self._configure_ipv4_forwarding(enable)
> -        self.sut_node.configure_port_ip_address(
> -            self._sut_ip_address_egress, self._sut_port_egress, delete
> -        )
> -        self.sut_node.configure_port_state(self._sut_port_egress, enable)
> -        self.sut_node.configure_port_ip_address(
> -            self._sut_ip_address_ingress, self._sut_port_ingress, delete
> -        )
> -        self.sut_node.configure_port_state(self._sut_port_ingress, enable)
> -        self.tg_node.configure_port_ip_address(
> -            self._tg_ip_address_ingress, self._tg_port_ingress, delete
> -        )
> -        self.tg_node.configure_port_state(self._tg_port_ingress, enable)
> -        self.tg_node.configure_port_ip_address(
> -            self._tg_ip_address_egress, self._tg_port_egress, delete
> -        )
> -        self.tg_node.configure_port_state(self._tg_port_egress, enable)
> -
> -    def _configure_ipv4_forwarding(self, enable: bool) -> None:
> -        self.sut_node.configure_ipv4_forwarding(enable)
> -
> <snip>
> diff --git a/dts/framework/testbed_model/linux_session.py b/dts/framework/testbed_model/linux_session.py
> <snip>
> -    def configure_port_state(self, port: Port, enable: bool) -> None:
> -        """Overrides :meth:`~.os_session.OSSession.configure_port_state`."""
> -        state = "up" if enable else "down"
> -        self.send_command(f"ip link set dev {port.logical_name} {state}", privileged=True)
> -
> -    def configure_port_ip_address(
> -        self,
> -        address: Union[IPv4Interface, IPv6Interface],
> -        port: Port,
> -        delete: bool,
> -    ) -> None:
> -        """Overrides :meth:`~.os_session.OSSession.configure_port_ip_address`."""
> -        command = "del" if delete else "add"
> -        self.send_command(
> -            f"ip address {command} {address} dev {port.logical_name}",
> -            privileged=True,
> -            verify=True,
> -        )
> -
 > <snip>
> @@ -205,8 +185,3 @@ def configure_port_mtu(self, mtu: int, port: Port) -> None:
 > <snip>
> -
> -    def configure_ipv4_forwarding(self, enable: bool) -> None:
> -        """Overrides :meth:`~.os_session.OSSession.configure_ipv4_forwarding`."""
> -        state = 1 if enable else 0
> -        self.send_command(f"sysctl -w net.ipv4.ip_forward={state}", privileged=True)
> diff --git a/dts/framework/testbed_model/node.py b/dts/framework/testbed_model/node.py
> <snip>
> -    def configure_port_state(self, port: Port, enable: bool = True) -> None:
> -        """Enable/disable `port`.
> -
> -        Args:
> -            port: The port to enable/disable.
> -            enable: :data:`True` to enable, :data:`False` to disable.
> -        """
> -        self.main_session.configure_port_state(port, enable)
> -
> -    def configure_port_ip_address(
> -        self,
> -        address: Union[IPv4Interface, IPv6Interface],
> -        port: Port,
> -        delete: bool = False,
> -    ) -> None:
> -        """Add an IP address to `port` on this node.
> -
> -        Args:
> -            address: The IP address with mask in CIDR format. Can be either IPv4 or IPv6.
> -            port: The port to which to add the address.
> -            delete: If :data:`True`, will delete the address from the port instead of adding it.
> -        """
> -        self.main_session.configure_port_ip_address(address, port, delete)
> -
> <snip>
> diff --git a/dts/framework/testbed_model/os_session.py b/dts/framework/testbed_model/os_session.py
> <snip>
> -    @abstractmethod
> -    def configure_port_state(self, port: Port, enable: bool) -> None:
> -        """Enable/disable `port` in the operating system.
> -
> -        Args:
> -            port: The port to configure.
> -            enable: If :data:`True`, enable the port, otherwise shut it down.
> -        """
> -
> -    @abstractmethod
> -    def configure_port_ip_address(
> -        self,
> -        address: Union[IPv4Interface, IPv6Interface],
> -        port: Port,
> -        delete: bool,
> -    ) -> None:
> -        """Configure an IP address on `port` in the operating system.
> -
> -        Args:
> -            address: The address to configure.
> -            port: The port to configure.
> -            delete: If :data:`True`, remove the IP address, otherwise configure it.
> -        """
> -
> <snip>
> diff --git a/dts/framework/testbed_model/sut_node.py b/dts/framework/testbed_model/sut_node.py
> <snip>
> -    def configure_ipv4_forwarding(self, enable: bool) -> None:
> -        """Enable/disable IPv4 forwarding on the node.
> -
> -        Args:
> -            enable: If :data:`True`, enable the forwarding, otherwise disable it.
> -        """
> -        self.main_session.configure_ipv4_forwarding(enable)
> -

While I agree to remove unused code, especially code that will never be 
used again. Is it worthwhile removing already implemented features? 
Unless we don't foresee using them ever again...
  
Juraj Linkeš April 23, 2024, noon UTC | #2
On Tue, Apr 23, 2024 at 12:39 PM Luca Vizzarro <Luca.Vizzarro@arm.com> wrote:
>
> On 19/04/2024 14:52, Juraj Linkeš wrote:
> > diff --git a/dts/framework/test_suite.py b/dts/framework/test_suite.py
> > <snip>
> > -    def configure_testbed_ipv4(self, restore: bool = False) -> None:
> > -        """Configure IPv4 addresses on all testbed ports.
> > -
> > -        The configured ports are:
> > -
> > -        * SUT ingress port,
> > -        * SUT egress port,
> > -        * TG ingress port,
> > -        * TG egress port.
> > -
> > -        Args:
> > -            restore: If :data:`True`, will remove the configuration instead.
> > -        """
> > -        delete = True if restore else False
> > -        enable = False if restore else True
> > -        self._configure_ipv4_forwarding(enable)
> > -        self.sut_node.configure_port_ip_address(
> > -            self._sut_ip_address_egress, self._sut_port_egress, delete
> > -        )
> > -        self.sut_node.configure_port_state(self._sut_port_egress, enable)
> > -        self.sut_node.configure_port_ip_address(
> > -            self._sut_ip_address_ingress, self._sut_port_ingress, delete
> > -        )
> > -        self.sut_node.configure_port_state(self._sut_port_ingress, enable)
> > -        self.tg_node.configure_port_ip_address(
> > -            self._tg_ip_address_ingress, self._tg_port_ingress, delete
> > -        )
> > -        self.tg_node.configure_port_state(self._tg_port_ingress, enable)
> > -        self.tg_node.configure_port_ip_address(
> > -            self._tg_ip_address_egress, self._tg_port_egress, delete
> > -        )
> > -        self.tg_node.configure_port_state(self._tg_port_egress, enable)
> > -
> > -    def _configure_ipv4_forwarding(self, enable: bool) -> None:
> > -        self.sut_node.configure_ipv4_forwarding(enable)
> > -
> > <snip>
> > diff --git a/dts/framework/testbed_model/linux_session.py b/dts/framework/testbed_model/linux_session.py
> > <snip>
> > -    def configure_port_state(self, port: Port, enable: bool) -> None:
> > -        """Overrides :meth:`~.os_session.OSSession.configure_port_state`."""
> > -        state = "up" if enable else "down"
> > -        self.send_command(f"ip link set dev {port.logical_name} {state}", privileged=True)
> > -
> > -    def configure_port_ip_address(
> > -        self,
> > -        address: Union[IPv4Interface, IPv6Interface],
> > -        port: Port,
> > -        delete: bool,
> > -    ) -> None:
> > -        """Overrides :meth:`~.os_session.OSSession.configure_port_ip_address`."""
> > -        command = "del" if delete else "add"
> > -        self.send_command(
> > -            f"ip address {command} {address} dev {port.logical_name}",
> > -            privileged=True,
> > -            verify=True,
> > -        )
> > -
>  > <snip>
> > @@ -205,8 +185,3 @@ def configure_port_mtu(self, mtu: int, port: Port) -> None:
>  > <snip>
> > -
> > -    def configure_ipv4_forwarding(self, enable: bool) -> None:
> > -        """Overrides :meth:`~.os_session.OSSession.configure_ipv4_forwarding`."""
> > -        state = 1 if enable else 0
> > -        self.send_command(f"sysctl -w net.ipv4.ip_forward={state}", privileged=True)
> > diff --git a/dts/framework/testbed_model/node.py b/dts/framework/testbed_model/node.py
> > <snip>
> > -    def configure_port_state(self, port: Port, enable: bool = True) -> None:
> > -        """Enable/disable `port`.
> > -
> > -        Args:
> > -            port: The port to enable/disable.
> > -            enable: :data:`True` to enable, :data:`False` to disable.
> > -        """
> > -        self.main_session.configure_port_state(port, enable)
> > -
> > -    def configure_port_ip_address(
> > -        self,
> > -        address: Union[IPv4Interface, IPv6Interface],
> > -        port: Port,
> > -        delete: bool = False,
> > -    ) -> None:
> > -        """Add an IP address to `port` on this node.
> > -
> > -        Args:
> > -            address: The IP address with mask in CIDR format. Can be either IPv4 or IPv6.
> > -            port: The port to which to add the address.
> > -            delete: If :data:`True`, will delete the address from the port instead of adding it.
> > -        """
> > -        self.main_session.configure_port_ip_address(address, port, delete)
> > -
> > <snip>
> > diff --git a/dts/framework/testbed_model/os_session.py b/dts/framework/testbed_model/os_session.py
> > <snip>
> > -    @abstractmethod
> > -    def configure_port_state(self, port: Port, enable: bool) -> None:
> > -        """Enable/disable `port` in the operating system.
> > -
> > -        Args:
> > -            port: The port to configure.
> > -            enable: If :data:`True`, enable the port, otherwise shut it down.
> > -        """
> > -
> > -    @abstractmethod
> > -    def configure_port_ip_address(
> > -        self,
> > -        address: Union[IPv4Interface, IPv6Interface],
> > -        port: Port,
> > -        delete: bool,
> > -    ) -> None:
> > -        """Configure an IP address on `port` in the operating system.
> > -
> > -        Args:
> > -            address: The address to configure.
> > -            port: The port to configure.
> > -            delete: If :data:`True`, remove the IP address, otherwise configure it.
> > -        """
> > -
> > <snip>
> > diff --git a/dts/framework/testbed_model/sut_node.py b/dts/framework/testbed_model/sut_node.py
> > <snip>
> > -    def configure_ipv4_forwarding(self, enable: bool) -> None:
> > -        """Enable/disable IPv4 forwarding on the node.
> > -
> > -        Args:
> > -            enable: If :data:`True`, enable the forwarding, otherwise disable it.
> > -        """
> > -        self.main_session.configure_ipv4_forwarding(enable)
> > -
>
> While I agree to remove unused code, especially code that will never be
> used again. Is it worthwhile removing already implemented features?
> Unless we don't foresee using them ever again...

My thinking was that we don't need these for DPDK apps, but maybe we
need some of them for Scapy (or any other tg using the OS networking
stack). I'll verify this just to make sure we're not removing
something that Scapy needs.
  
Juraj Linkeš April 26, 2024, 8:55 a.m. UTC | #3
On Tue, Apr 23, 2024 at 2:00 PM Juraj Linkeš <juraj.linkes@pantheon.tech> wrote:
>
> On Tue, Apr 23, 2024 at 12:39 PM Luca Vizzarro <Luca.Vizzarro@arm.com> wrote:
> >
> > On 19/04/2024 14:52, Juraj Linkeš wrote:
> > > diff --git a/dts/framework/test_suite.py b/dts/framework/test_suite.py
> > > <snip>
> > > -    def configure_testbed_ipv4(self, restore: bool = False) -> None:
> > > -        """Configure IPv4 addresses on all testbed ports.
> > > -
> > > -        The configured ports are:
> > > -
> > > -        * SUT ingress port,
> > > -        * SUT egress port,
> > > -        * TG ingress port,
> > > -        * TG egress port.
> > > -
> > > -        Args:
> > > -            restore: If :data:`True`, will remove the configuration instead.
> > > -        """
> > > -        delete = True if restore else False
> > > -        enable = False if restore else True
> > > -        self._configure_ipv4_forwarding(enable)
> > > -        self.sut_node.configure_port_ip_address(
> > > -            self._sut_ip_address_egress, self._sut_port_egress, delete
> > > -        )
> > > -        self.sut_node.configure_port_state(self._sut_port_egress, enable)
> > > -        self.sut_node.configure_port_ip_address(
> > > -            self._sut_ip_address_ingress, self._sut_port_ingress, delete
> > > -        )
> > > -        self.sut_node.configure_port_state(self._sut_port_ingress, enable)
> > > -        self.tg_node.configure_port_ip_address(
> > > -            self._tg_ip_address_ingress, self._tg_port_ingress, delete
> > > -        )
> > > -        self.tg_node.configure_port_state(self._tg_port_ingress, enable)
> > > -        self.tg_node.configure_port_ip_address(
> > > -            self._tg_ip_address_egress, self._tg_port_egress, delete
> > > -        )
> > > -        self.tg_node.configure_port_state(self._tg_port_egress, enable)
> > > -
> > > -    def _configure_ipv4_forwarding(self, enable: bool) -> None:
> > > -        self.sut_node.configure_ipv4_forwarding(enable)
> > > -
> > > <snip>
> > > diff --git a/dts/framework/testbed_model/linux_session.py b/dts/framework/testbed_model/linux_session.py
> > > <snip>
> > > -    def configure_port_state(self, port: Port, enable: bool) -> None:
> > > -        """Overrides :meth:`~.os_session.OSSession.configure_port_state`."""
> > > -        state = "up" if enable else "down"
> > > -        self.send_command(f"ip link set dev {port.logical_name} {state}", privileged=True)
> > > -
> > > -    def configure_port_ip_address(
> > > -        self,
> > > -        address: Union[IPv4Interface, IPv6Interface],
> > > -        port: Port,
> > > -        delete: bool,
> > > -    ) -> None:
> > > -        """Overrides :meth:`~.os_session.OSSession.configure_port_ip_address`."""
> > > -        command = "del" if delete else "add"
> > > -        self.send_command(
> > > -            f"ip address {command} {address} dev {port.logical_name}",
> > > -            privileged=True,
> > > -            verify=True,
> > > -        )
> > > -
> >  > <snip>
> > > @@ -205,8 +185,3 @@ def configure_port_mtu(self, mtu: int, port: Port) -> None:
> >  > <snip>
> > > -
> > > -    def configure_ipv4_forwarding(self, enable: bool) -> None:
> > > -        """Overrides :meth:`~.os_session.OSSession.configure_ipv4_forwarding`."""
> > > -        state = 1 if enable else 0
> > > -        self.send_command(f"sysctl -w net.ipv4.ip_forward={state}", privileged=True)
> > > diff --git a/dts/framework/testbed_model/node.py b/dts/framework/testbed_model/node.py
> > > <snip>
> > > -    def configure_port_state(self, port: Port, enable: bool = True) -> None:
> > > -        """Enable/disable `port`.
> > > -
> > > -        Args:
> > > -            port: The port to enable/disable.
> > > -            enable: :data:`True` to enable, :data:`False` to disable.
> > > -        """
> > > -        self.main_session.configure_port_state(port, enable)
> > > -
> > > -    def configure_port_ip_address(
> > > -        self,
> > > -        address: Union[IPv4Interface, IPv6Interface],
> > > -        port: Port,
> > > -        delete: bool = False,
> > > -    ) -> None:
> > > -        """Add an IP address to `port` on this node.
> > > -
> > > -        Args:
> > > -            address: The IP address with mask in CIDR format. Can be either IPv4 or IPv6.
> > > -            port: The port to which to add the address.
> > > -            delete: If :data:`True`, will delete the address from the port instead of adding it.
> > > -        """
> > > -        self.main_session.configure_port_ip_address(address, port, delete)
> > > -
> > > <snip>
> > > diff --git a/dts/framework/testbed_model/os_session.py b/dts/framework/testbed_model/os_session.py
> > > <snip>
> > > -    @abstractmethod
> > > -    def configure_port_state(self, port: Port, enable: bool) -> None:
> > > -        """Enable/disable `port` in the operating system.
> > > -
> > > -        Args:
> > > -            port: The port to configure.
> > > -            enable: If :data:`True`, enable the port, otherwise shut it down.
> > > -        """
> > > -
> > > -    @abstractmethod
> > > -    def configure_port_ip_address(
> > > -        self,
> > > -        address: Union[IPv4Interface, IPv6Interface],
> > > -        port: Port,
> > > -        delete: bool,
> > > -    ) -> None:
> > > -        """Configure an IP address on `port` in the operating system.
> > > -
> > > -        Args:
> > > -            address: The address to configure.
> > > -            port: The port to configure.
> > > -            delete: If :data:`True`, remove the IP address, otherwise configure it.
> > > -        """
> > > -
> > > <snip>
> > > diff --git a/dts/framework/testbed_model/sut_node.py b/dts/framework/testbed_model/sut_node.py
> > > <snip>
> > > -    def configure_ipv4_forwarding(self, enable: bool) -> None:
> > > -        """Enable/disable IPv4 forwarding on the node.
> > > -
> > > -        Args:
> > > -            enable: If :data:`True`, enable the forwarding, otherwise disable it.
> > > -        """
> > > -        self.main_session.configure_ipv4_forwarding(enable)
> > > -
> >
> > While I agree to remove unused code, especially code that will never be
> > used again. Is it worthwhile removing already implemented features?
> > Unless we don't foresee using them ever again...
>
> My thinking was that we don't need these for DPDK apps, but maybe we
> need some of them for Scapy (or any other tg using the OS networking
> stack). I'll verify this just to make sure we're not removing
> something that Scapy needs.

From what I can tell, we don't need any of these for Scapy, but we
should test this in other environments as well (my virtual environment
doesn't play nice with port rebinding and running testpmd - I have to
start Scapy after starting testpmd to get it to work. This may be a
nightmare to debug.). Can you, Luca and Patrick, run the scatter test
suite with this patch to verify this?
  
Luca Vizzarro April 26, 2024, 10:59 a.m. UTC | #4
On 26/04/2024 09:55, Juraj Linkeš wrote:
> From what I can tell, we don't need any of these for Scapy, but we
> should test this in other environments as well (my virtual environment
> doesn't play nice with port rebinding and running testpmd - I have to
> start Scapy after starting testpmd to get it to work. This may be a
> nightmare to debug.). Can you, Luca and Patrick, run the scatter test
> suite with this patch to verify this?

Hi Juraj,

Unfortunately I am currently not able to test the scatter patch as we 
are still trying to sort out a non-Mellanox setup.

Hopefully Jeremy can help.

Best,
Luca
  

Patch

diff --git a/dts/conf.yaml b/dts/conf.yaml
index 8068345dd5..d61fb39303 100644
--- a/dts/conf.yaml
+++ b/dts/conf.yaml
@@ -16,7 +16,6 @@  executions:
     skip_smoke_tests: false # optional
     test_suites: # the following test suites will be run in their entirety
       - hello_world
-      - os_udp
     # The machine running the DPDK test executable
     system_under_test_node:
       node_name: "SUT 1"
diff --git a/dts/framework/config/conf_yaml_schema.json b/dts/framework/config/conf_yaml_schema.json
index 4731f4511d..105671a639 100644
--- a/dts/framework/config/conf_yaml_schema.json
+++ b/dts/framework/config/conf_yaml_schema.json
@@ -186,7 +186,6 @@ 
       "type": "string",
       "enum": [
         "hello_world",
-        "os_udp",
         "pmd_buffer_scatter"
       ]
     },
diff --git a/dts/framework/test_suite.py b/dts/framework/test_suite.py
index 9c3b516002..9758a283de 100644
--- a/dts/framework/test_suite.py
+++ b/dts/framework/test_suite.py
@@ -139,42 +139,6 @@  def tear_down_test_case(self) -> None:
         This is done after *each* test case.
         """
 
-    def configure_testbed_ipv4(self, restore: bool = False) -> None:
-        """Configure IPv4 addresses on all testbed ports.
-
-        The configured ports are:
-
-        * SUT ingress port,
-        * SUT egress port,
-        * TG ingress port,
-        * TG egress port.
-
-        Args:
-            restore: If :data:`True`, will remove the configuration instead.
-        """
-        delete = True if restore else False
-        enable = False if restore else True
-        self._configure_ipv4_forwarding(enable)
-        self.sut_node.configure_port_ip_address(
-            self._sut_ip_address_egress, self._sut_port_egress, delete
-        )
-        self.sut_node.configure_port_state(self._sut_port_egress, enable)
-        self.sut_node.configure_port_ip_address(
-            self._sut_ip_address_ingress, self._sut_port_ingress, delete
-        )
-        self.sut_node.configure_port_state(self._sut_port_ingress, enable)
-        self.tg_node.configure_port_ip_address(
-            self._tg_ip_address_ingress, self._tg_port_ingress, delete
-        )
-        self.tg_node.configure_port_state(self._tg_port_ingress, enable)
-        self.tg_node.configure_port_ip_address(
-            self._tg_ip_address_egress, self._tg_port_egress, delete
-        )
-        self.tg_node.configure_port_state(self._tg_port_egress, enable)
-
-    def _configure_ipv4_forwarding(self, enable: bool) -> None:
-        self.sut_node.configure_ipv4_forwarding(enable)
-
     def send_packet_and_capture(
         self,
         packet: Packet,
diff --git a/dts/framework/testbed_model/linux_session.py b/dts/framework/testbed_model/linux_session.py
index 5d24030c3d..e3fd0534ce 100644
--- a/dts/framework/testbed_model/linux_session.py
+++ b/dts/framework/testbed_model/linux_session.py
@@ -10,8 +10,7 @@ 
 """
 
 import json
-from ipaddress import IPv4Interface, IPv6Interface
-from typing import TypedDict, Union
+from typing import TypedDict
 
 from typing_extensions import NotRequired
 
@@ -179,25 +178,6 @@  def _update_port_attr(self, port: Port, attr_value: str | None, attr_name: str)
                 f"Attempted to get '{attr_name}' of port {port.pci}, but it doesn't exist."
             )
 
-    def configure_port_state(self, port: Port, enable: bool) -> None:
-        """Overrides :meth:`~.os_session.OSSession.configure_port_state`."""
-        state = "up" if enable else "down"
-        self.send_command(f"ip link set dev {port.logical_name} {state}", privileged=True)
-
-    def configure_port_ip_address(
-        self,
-        address: Union[IPv4Interface, IPv6Interface],
-        port: Port,
-        delete: bool,
-    ) -> None:
-        """Overrides :meth:`~.os_session.OSSession.configure_port_ip_address`."""
-        command = "del" if delete else "add"
-        self.send_command(
-            f"ip address {command} {address} dev {port.logical_name}",
-            privileged=True,
-            verify=True,
-        )
-
     def configure_port_mtu(self, mtu: int, port: Port) -> None:
         """Overrides :meth:`~.os_session.OSSession.configure_port_mtu`."""
         self.send_command(
@@ -205,8 +185,3 @@  def configure_port_mtu(self, mtu: int, port: Port) -> None:
             privileged=True,
             verify=True,
         )
-
-    def configure_ipv4_forwarding(self, enable: bool) -> None:
-        """Overrides :meth:`~.os_session.OSSession.configure_ipv4_forwarding`."""
-        state = 1 if enable else 0
-        self.send_command(f"sysctl -w net.ipv4.ip_forward={state}", privileged=True)
diff --git a/dts/framework/testbed_model/node.py b/dts/framework/testbed_model/node.py
index 74061f6262..df5742d761 100644
--- a/dts/framework/testbed_model/node.py
+++ b/dts/framework/testbed_model/node.py
@@ -13,8 +13,7 @@ 
 """
 
 from abc import ABC
-from ipaddress import IPv4Interface, IPv6Interface
-from typing import Any, Callable, Type, Union
+from typing import Any, Callable, Type
 
 from framework.config import (
     OS,
@@ -100,8 +99,6 @@  def __init__(self, node_config: NodeConfiguration):
     def _init_ports(self) -> None:
         self.ports = [Port(self.name, port_config) for port_config in self.config.ports]
         self.main_session.update_ports(self.ports)
-        for port in self.ports:
-            self.configure_port_state(port)
 
     def set_up_execution(self, execution_config: ExecutionConfiguration) -> None:
         """Execution setup steps.
@@ -269,30 +266,6 @@  def _setup_hugepages(self) -> None:
                 self.config.hugepages.amount, self.config.hugepages.force_first_numa
             )
 
-    def configure_port_state(self, port: Port, enable: bool = True) -> None:
-        """Enable/disable `port`.
-
-        Args:
-            port: The port to enable/disable.
-            enable: :data:`True` to enable, :data:`False` to disable.
-        """
-        self.main_session.configure_port_state(port, enable)
-
-    def configure_port_ip_address(
-        self,
-        address: Union[IPv4Interface, IPv6Interface],
-        port: Port,
-        delete: bool = False,
-    ) -> None:
-        """Add an IP address to `port` on this node.
-
-        Args:
-            address: The IP address with mask in CIDR format. Can be either IPv4 or IPv6.
-            port: The port to which to add the address.
-            delete: If :data:`True`, will delete the address from the port instead of adding it.
-        """
-        self.main_session.configure_port_ip_address(address, port, delete)
-
     def close(self) -> None:
         """Close all connections and free other resources."""
         if self.main_session:
diff --git a/dts/framework/testbed_model/os_session.py b/dts/framework/testbed_model/os_session.py
index d5bf7e0401..6d51e080ff 100644
--- a/dts/framework/testbed_model/os_session.py
+++ b/dts/framework/testbed_model/os_session.py
@@ -21,11 +21,11 @@ 
     the :attr:`~.node.Node.main_session` translates that to ``rm -rf`` if the node's OS is Linux
     and other commands for other OSs. It also translates the path to match the underlying OS.
 """
+
 from abc import ABC, abstractmethod
 from collections.abc import Iterable
-from ipaddress import IPv4Interface, IPv6Interface
 from pathlib import PurePath
-from typing import Type, TypeVar, Union
+from typing import Type, TypeVar
 
 from framework.config import Architecture, NodeConfiguration, NodeInfo
 from framework.logger import DTSLogger
@@ -388,30 +388,6 @@  def update_ports(self, ports: list[Port]) -> None:
             ports: The ports to update.
         """
 
-    @abstractmethod
-    def configure_port_state(self, port: Port, enable: bool) -> None:
-        """Enable/disable `port` in the operating system.
-
-        Args:
-            port: The port to configure.
-            enable: If :data:`True`, enable the port, otherwise shut it down.
-        """
-
-    @abstractmethod
-    def configure_port_ip_address(
-        self,
-        address: Union[IPv4Interface, IPv6Interface],
-        port: Port,
-        delete: bool,
-    ) -> None:
-        """Configure an IP address on `port` in the operating system.
-
-        Args:
-            address: The address to configure.
-            port: The port to configure.
-            delete: If :data:`True`, remove the IP address, otherwise configure it.
-        """
-
     @abstractmethod
     def configure_port_mtu(self, mtu: int, port: Port) -> None:
         """Configure `mtu` on `port`.
@@ -420,11 +396,3 @@  def configure_port_mtu(self, mtu: int, port: Port) -> None:
             mtu: Desired MTU value.
             port: Port to set `mtu` on.
         """
-
-    @abstractmethod
-    def configure_ipv4_forwarding(self, enable: bool) -> None:
-        """Enable IPv4 forwarding in the operating system.
-
-        Args:
-            enable: If :data:`True`, enable the forwarding, otherwise disable it.
-        """
diff --git a/dts/framework/testbed_model/sut_node.py b/dts/framework/testbed_model/sut_node.py
index 97aa26d419..ee3168d92b 100644
--- a/dts/framework/testbed_model/sut_node.py
+++ b/dts/framework/testbed_model/sut_node.py
@@ -10,7 +10,6 @@ 
 An SUT node is where this SUT runs.
 """
 
-
 import os
 import tarfile
 import time
@@ -429,14 +428,6 @@  def run_dpdk_app(
             f"{app_path} {eal_args}", timeout, privileged=True, verify=True
         )
 
-    def configure_ipv4_forwarding(self, enable: bool) -> None:
-        """Enable/disable IPv4 forwarding on the node.
-
-        Args:
-            enable: If :data:`True`, enable the forwarding, otherwise disable it.
-        """
-        self.main_session.configure_ipv4_forwarding(enable)
-
     def create_interactive_shell(
         self,
         shell_cls: Type[InteractiveShellType],
diff --git a/dts/tests/TestSuite_os_udp.py b/dts/tests/TestSuite_os_udp.py
deleted file mode 100644
index b4784dd95e..0000000000
--- a/dts/tests/TestSuite_os_udp.py
+++ /dev/null
@@ -1,53 +0,0 @@ 
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2023 PANTHEON.tech s.r.o.
-
-"""Basic IPv4 OS routing test suite.
-
-Configure SUT node to route traffic from if1 to if2.
-Send a packet to the SUT node, verify it comes back on the second port on the TG node.
-"""
-
-from scapy.layers.inet import IP, UDP  # type: ignore[import]
-from scapy.layers.l2 import Ether  # type: ignore[import]
-
-from framework.test_suite import TestSuite
-
-
-class TestOsUdp(TestSuite):
-    """IPv4 UDP OS routing test suite."""
-
-    def set_up_suite(self) -> None:
-        """Set up the test suite.
-
-        Setup:
-            Bind the SUT ports to the OS driver, configure the ports and configure the SUT
-            to route traffic from if1 to if2.
-        """
-        self.sut_node.bind_ports_to_driver(for_dpdk=False)
-        self.configure_testbed_ipv4()
-
-    def test_os_udp(self) -> None:
-        """Basic UDP IPv4 traffic test case.
-
-        Steps:
-            Send a UDP packet.
-        Verify:
-            The packet with proper addresses arrives at the other TG port.
-        """
-        packet = Ether() / IP() / UDP()
-
-        received_packets = self.send_packet_and_capture(packet)
-
-        expected_packet = self.get_expected_packet(packet)
-
-        self.verify_packets(expected_packet, received_packets)
-
-    def tear_down_suite(self) -> None:
-        """Tear down the test suite.
-
-        Teardown:
-            Remove the SUT port configuration configured in setup.
-        """
-        self.configure_testbed_ipv4(restore=True)
-        # Assume other suites will likely need dpdk driver
-        self.sut_node.bind_ports_to_driver(for_dpdk=True)