lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <661c0837eb5a6_3e773229499@willemb.c.googlers.com.notmuch>
Date: Sun, 14 Apr 2024 12:45:43 -0400
From: Willem de Bruijn <willemdebruijn.kernel@...il.com>
To: Jakub Kicinski <kuba@...nel.org>, 
 davem@...emloft.net
Cc: netdev@...r.kernel.org, 
 edumazet@...gle.com, 
 pabeni@...hat.com, 
 shuah@...nel.org, 
 petrm@...dia.com, 
 linux-kselftest@...r.kernel.org, 
 willemb@...gle.com, 
 Jakub Kicinski <kuba@...nel.org>
Subject: Re: [PATCH net-next 4/5] selftests: drv-net: construct environment
 for running tests which require an endpoint

Jakub Kicinski wrote:
> Nothing surprising here, hopefully. Wrap the variables from
> the environment into a class or spawn a netdevsim based env
> and pass it to the tests.
> 
> Signed-off-by: Jakub Kicinski <kuba@...nel.org>
> ---
>  .../testing/selftests/drivers/net/README.rst  | 31 +++++++
>  .../selftests/drivers/net/lib/py/env.py       | 93 ++++++++++++++++++-
>  .../testing/selftests/net/lib/py/__init__.py  |  1 +
>  tools/testing/selftests/net/lib/py/netns.py   | 31 +++++++
>  4 files changed, 155 insertions(+), 1 deletion(-)
>  create mode 100644 tools/testing/selftests/net/lib/py/netns.py
> 
> diff --git a/tools/testing/selftests/drivers/net/README.rst b/tools/testing/selftests/drivers/net/README.rst
> index 5ef7c417d431..ffc15fe5d555 100644
> --- a/tools/testing/selftests/drivers/net/README.rst
> +++ b/tools/testing/selftests/drivers/net/README.rst
> @@ -23,8 +23,39 @@ Variables can be set in the environment or by creating a net.config
>    # Variable set in a file
>    NETIF=eth0
>  
> +Please note that the config parser is very simple, if there are
> +any non-alphanumeric characters in the value it needs to be in
> +double quotes.
> +
>  NETIF
>  ~~~~~
>  
>  Name of the netdevice against which the test should be executed.
>  When empty or not set software devices will be used.
> +
> +LOCAL_V4, LOCAL_V6, EP_V4, EP_V6
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +Local and remote (endpoint) IP addresses.

Overall, this is really cool stuff (obviously)!

REMOTE instead of EP?

Apparently I missed the earlier discussion. Would it also be possible
to have both sides be remote. Where the test runner might run on the
build host, but the kernel under test is run on two test machines.

To a certain extent, same for having two equivalent child network
namespaces isolated from the runner's environment.

> +
> +EP_TYPE
> +~~~~~~~
> +
> +Communication method used to run commands on the endpoint.
> +Test framework supports using ``netns`` and ``ssh`` channels.
> +``netns`` assumes the "remote" interface is part of the same
> +host, just moved to the specified netns.
> +``ssh`` communicates with remote endpoint over ``ssh`` and ``scp``.
> +
> +Communication methods are defined by classes in ``lib/py/ep_{name}.py``.
> +It should be possible to add a new method without modifying any of
> +the framework, by simply adding an appropriately named file to ``lib/py``.
> +
> +EP_ARGS
> +~~~~~~~
> +
> +Arguments used to construct the communication channel.
> +Communication channel dependent::
> +
> +  for netns - name of the "remote" namespace
> +  for ssh - name/address of the remote host
> diff --git a/tools/testing/selftests/drivers/net/lib/py/env.py b/tools/testing/selftests/drivers/net/lib/py/env.py
> index a081e168f3db..f63be0a72a53 100644
> --- a/tools/testing/selftests/drivers/net/lib/py/env.py
> +++ b/tools/testing/selftests/drivers/net/lib/py/env.py
> @@ -4,7 +4,8 @@ import os
>  import shlex
>  from pathlib import Path
>  from lib.py import ip
> -from lib.py import NetdevSimDev
> +from lib.py import NetNS, NetdevSimDev
> +from .endpoint import Endpoint
>  
>  
>  def _load_env_file(src_path):
> @@ -59,3 +60,93 @@ from lib.py import NetdevSimDev
>              self._ns = None
>  
>  
> +class NetDrvEpEnv:
> +    """
> +    Class for an environment with a local device and "remote endpoint"
> +    which can be used to send traffic in.
> +
> +    For local testing it creates two network namespaces and a pair
> +    of netdevsim devices.
> +    """
> +    def __init__(self, src_path):
> +
> +        self.env = _load_env_file(src_path)
> +
> +        # Things we try to destroy
> +        self.endpoint = None
> +        # These are for local testing state
> +        self._netns = None
> +        self._ns = None
> +        self._ns_peer = None
> +
> +        if "NETIF" in self.env:
> +            self.dev = ip("link show dev " + self.env['NETIF'], json=True)[0]
> +
> +            self.v4 = self.env.get("LOCAL_V4")
> +            self.v6 = self.env.get("LOCAL_V6")
> +            self.ep_v4 = self.env.get("EP_V4")
> +            self.ep_v6 = self.env.get("EP_V6")
> +            ep_type = self.env["EP_TYPE"]
> +            ep_args = self.env["EP_ARGS"]
> +        else:
> +            self.create_local()
> +
> +            self.dev = self._ns.nsims[0].dev
> +
> +            self.v4 = "192.0.2.1"
> +            self.v6 ="0100::1"
> +            self.ep_v4 = "192.0.2.2"
> +            self.ep_v6 = "0100::2"

Use FC00::/7 ULA addresses?

> +            ep_type = "netns"
> +            ep_args = self._netns.name
> +
> +        self.endpoint = Endpoint(ep_type, ep_args)
> +
> +        self.addr = self.v6 if self.v6 else self.v4
> +        self.ep_addr = self.ep_v6 if self.ep_v6 else self.ep_v4
> +
> +        self.ifname = self.dev['ifname']
> +        self.ifindex = self.dev['ifindex']
> +

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ