From: Jakub Kicinski <kuba@kernel.org>
To: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Cc: davem@davemloft.net, netdev@vger.kernel.org, edumazet@google.com,
pabeni@redhat.com, shuah@kernel.org, petrm@nvidia.com,
linux-kselftest@vger.kernel.org
Subject: Re: [PATCH net-next v3 8/8] selftests: drv-net: add a TCP ping test case (and useful helpers)
Date: Thu, 18 Apr 2024 12:48:12 -0700 [thread overview]
Message-ID: <20240418124812.48788da6@kernel.org> (raw)
In-Reply-To: <662131d77b55d_ec9b92945@willemb.c.googlers.com.notmuch>
On Thu, 18 Apr 2024 10:44:39 -0400 Willem de Bruijn wrote:
> > +def test_tcp(cfg) -> None:
> > + port = random.randrange(1024 + (1 << 15))
> > + with bkg(f"nc -l {cfg.addr} {port}") as nc:
> > + wait_port_listen(port)
> > +
> > + cmd(f"echo ping | nc {cfg.addr} {port}",
> > + shell=True, host=cfg.remote)
> > + ksft_eq(nc.stdout.strip(), "ping")
> > +
> > + port = random.randrange(1024 + (1 << 15))
> > + with bkg(f"nc -l {cfg.remote_addr} {port}", host=cfg.remote) as nc:
> > + wait_port_listen(port, host=cfg.remote)
> > +
> > + cmd(f"echo ping | nc {cfg.remote_addr} {port}", shell=True)
> > + ksft_eq(nc.stdout.strip(), "ping")
> > +
>
> There are different netcat implementations floating around.
>
> I notice that I have to pass -N on the client to terminate the
> connection after EOF. Else both peers keep the connection open,
> waiting for input. And explicitly pass -6 if passing an IPv6
> address. I think this is the one that ships with Debian..
Right, 100% laziness on my part. Mostly because socat requires
bracketed IPv6. But once I tried it I also run into the premature
termination problem, so ended up with this diff on top:
diff --git a/tools/testing/selftests/drivers/net/lib/py/env.py b/tools/testing/selftests/drivers/net/lib/py/env.py
index 579c5b34e6fd..2f62270d59fa 100644
--- a/tools/testing/selftests/drivers/net/lib/py/env.py
+++ b/tools/testing/selftests/drivers/net/lib/py/env.py
@@ -110,6 +110,10 @@ from .remote import Remote
self.addr = self.v6 if self.v6 else self.v4
self.remote_addr = self.remote_v6 if self.remote_v6 else self.remote_v4
+ # Bracketed addresses, some commands need IPv6 to be inside []
+ self.baddr = f"[{self.v6}]" if self.v6 else self.v4
+ self.remote_baddr = f"[{self.remote_v6}]" if self.remote_v6 else self.remote_v4
+
self.ifname = self.dev['ifname']
self.ifindex = self.dev['ifindex']
diff --git a/tools/testing/selftests/drivers/net/ping.py b/tools/testing/selftests/drivers/net/ping.py
index 8532e3be72ba..985b06ce2e81 100755
--- a/tools/testing/selftests/drivers/net/ping.py
+++ b/tools/testing/selftests/drivers/net/ping.py
@@ -27,18 +27,20 @@ from lib.py import bkg, cmd, wait_port_listen
def test_tcp(cfg) -> None:
port = random.randrange(1024 + (1 << 15))
- with bkg(f"nc -l {cfg.addr} {port}") as nc:
+
+ with bkg(f"socat -t 2 -u TCP-LISTEN:{port} STDOUT", exit_wait=True) as nc:
wait_port_listen(port)
- cmd(f"echo ping | nc {cfg.addr} {port}",
+ cmd(f"echo ping | socat -t 2 -u STDIN TCP:{cfg.baddr}:{port}",
shell=True, host=cfg.remote)
ksft_eq(nc.stdout.strip(), "ping")
port = random.randrange(1024 + (1 << 15))
- with bkg(f"nc -l {cfg.remote_addr} {port}", host=cfg.remote) as nc:
+ with bkg(f"socat -t 2 -u TCP-LISTEN:{port} STDOUT", host=cfg.remote,
+ exit_wait=True) as nc:
wait_port_listen(port, host=cfg.remote)
- cmd(f"echo ping | nc {cfg.remote_addr} {port}", shell=True)
+ cmd(f"echo ping | socat -t 2 -u STDIN TCP:{cfg.remote_baddr}:{port}", shell=True)
ksft_eq(nc.stdout.strip(), "ping")
diff --git a/tools/testing/selftests/net/lib/py/utils.py b/tools/testing/selftests/net/lib/py/utils.py
index 6bacdc99d21b..85a6a9bb35fd 100644
--- a/tools/testing/selftests/net/lib/py/utils.py
+++ b/tools/testing/selftests/net/lib/py/utils.py
@@ -42,15 +42,17 @@ import time
class bkg(cmd):
- def __init__(self, comm, shell=True, fail=True, ns=None, host=None):
+ def __init__(self, comm, shell=True, fail=True, ns=None, host=None,
+ exit_wait=False):
super().__init__(comm, background=True,
shell=shell, fail=fail, ns=ns, host=host)
+ self.terminate = not exit_wait
def __enter__(self):
return self
def __exit__(self, ex_type, ex_value, ex_tb):
- return self.process()
+ return self.process(terminate=self.terminate)
def ip(args, json=None, ns=None, host=None):
next prev parent reply other threads:[~2024-04-18 19:48 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-17 23:11 [PATCH net-next v3 0/8] selftests: drv-net: support testing with a remote system Jakub Kicinski
2024-04-17 23:11 ` [PATCH net-next v3 1/8] selftests: net: fix counting totals when some checks fail Jakub Kicinski
2024-04-17 23:11 ` [PATCH net-next v3 2/8] selftests: net: set the exit code correctly in Python tests Jakub Kicinski
2024-04-17 23:11 ` [PATCH net-next v3 3/8] selftests: drv-net: define endpoint structures Jakub Kicinski
2024-04-17 23:11 ` [PATCH net-next v3 4/8] selftests: drv-net: factor out parsing of the env Jakub Kicinski
2024-04-17 23:11 ` [PATCH net-next v3 5/8] selftests: drv-net: construct environment for running tests which require an endpoint Jakub Kicinski
2024-04-17 23:11 ` [PATCH net-next v3 6/8] selftests: drv-net: add a trivial ping test Jakub Kicinski
2024-04-17 23:11 ` [PATCH net-next v3 7/8] selftests: net: support matching cases by name prefix Jakub Kicinski
2024-04-18 14:26 ` Willem de Bruijn
2024-04-18 19:06 ` Jakub Kicinski
2024-04-18 19:35 ` Willem de Bruijn
2024-04-17 23:11 ` [PATCH net-next v3 8/8] selftests: drv-net: add a TCP ping test case (and useful helpers) Jakub Kicinski
2024-04-18 14:44 ` Willem de Bruijn
2024-04-18 19:48 ` Jakub Kicinski [this message]
2024-04-18 23:20 ` [PATCH net-next v3 0/8] selftests: drv-net: support testing with a remote system patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240418124812.48788da6@kernel.org \
--to=kuba@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=linux-kselftest@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=petrm@nvidia.com \
--cc=shuah@kernel.org \
--cc=willemdebruijn.kernel@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.