[PATCH net-next v1 7/9] net: devmem: ksft: add 5 tuple FS support

Mina Almasry posted 9 patches 7 months ago
There is a newer version of this series
[PATCH net-next v1 7/9] net: devmem: ksft: add 5 tuple FS support
Posted by Mina Almasry 7 months ago
ncdevmem supports drivers that are limited to either 3-tuple or 5-tuple
FS support, but the ksft is currently 3-tuple only. Support drivers that
have 5-tuple FS supported by adding a ksft arg.

Signed-off-by: Mina Almasry <almasrymina@google.com>

---
 .../testing/selftests/drivers/net/hw/devmem.py  | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/drivers/net/hw/devmem.py b/tools/testing/selftests/drivers/net/hw/devmem.py
index 39b5241463aa..40fe5b525d51 100755
--- a/tools/testing/selftests/drivers/net/hw/devmem.py
+++ b/tools/testing/selftests/drivers/net/hw/devmem.py
@@ -21,14 +21,27 @@ def require_devmem(cfg):
 def check_rx(cfg, ipver) -> None:
     require_devmem(cfg)
 
+    fs_5_tuple = False
+    if "FLOW_STEERING_5_TUPLE" in cfg.env:
+        fs_5_tuple = cfg.env["FLOW_STEERING_5_TUPLE"]
+
     addr = cfg.addr_v[ipver]
+    remote_addr = cfg.remote_addr_v[ipver]
+    port = rand_port()
+
     if ipver == "6":
         addr = "[" + addr + "]"
+        remote_addr = "[" + remote_addr + "]"
 
     socat = f"socat -u - TCP{ipver}:{addr}:{port}"
 
-    port = rand_port()
-    listen_cmd = f"{cfg.bin_local} -l -f {cfg.ifname} -s {cfg.addr_v['6']} -p {port}"
+    if fs_5_tuple:
+        socat += f",bind={remote_addr}:{port}"
+
+    listen_cmd = f"{cfg.bin_local} -l -f {cfg.ifname} -s {addr} -p {port}"
+
+    if fs_5_tuple:
+        listen_cmd += f" -c {remote_addr}"
 
     with bkg(listen_cmd, exit_wait=True) as ncdevmem:
         wait_port_listen(port)
-- 
2.49.0.1101.gccaa498523-goog
Re: [PATCH net-next v1 7/9] net: devmem: ksft: add 5 tuple FS support
Posted by Stanislav Fomichev 7 months ago
On 05/19, Mina Almasry wrote:
> ncdevmem supports drivers that are limited to either 3-tuple or 5-tuple
> FS support, but the ksft is currently 3-tuple only. Support drivers that
> have 5-tuple FS supported by adding a ksft arg.
> 
> Signed-off-by: Mina Almasry <almasrymina@google.com>
> 
> ---
>  .../testing/selftests/drivers/net/hw/devmem.py  | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/testing/selftests/drivers/net/hw/devmem.py b/tools/testing/selftests/drivers/net/hw/devmem.py
> index 39b5241463aa..40fe5b525d51 100755
> --- a/tools/testing/selftests/drivers/net/hw/devmem.py
> +++ b/tools/testing/selftests/drivers/net/hw/devmem.py
> @@ -21,14 +21,27 @@ def require_devmem(cfg):
>  def check_rx(cfg, ipver) -> None:
>      require_devmem(cfg)
>  
> +    fs_5_tuple = False
> +    if "FLOW_STEERING_5_TUPLE" in cfg.env:
> +        fs_5_tuple = cfg.env["FLOW_STEERING_5_TUPLE"]

I wonder if we can transparently handle it in ncdevmem: if -c is passed,
try installing 3-tuple rule, and if it fails, try 5-tuple one. This
should work without any user input / extra environment variable.

>      addr = cfg.addr_v[ipver]
> +    remote_addr = cfg.remote_addr_v[ipver]
> +    port = rand_port()
> +
>      if ipver == "6":
>          addr = "[" + addr + "]"
> +        remote_addr = "[" + remote_addr + "]"
>  
>      socat = f"socat -u - TCP{ipver}:{addr}:{port}"
>  
> -    port = rand_port()
> -    listen_cmd = f"{cfg.bin_local} -l -f {cfg.ifname} -s {cfg.addr_v['6']} -p {port}"
> +    if fs_5_tuple:
> +        socat += f",bind={remote_addr}:{port}"

This we can always do regardless of 3 or 5 tuple?
Re: [PATCH net-next v1 7/9] net: devmem: ksft: add 5 tuple FS support
Posted by Mina Almasry 7 months ago
On Mon, May 19, 2025 at 8:37 AM Stanislav Fomichev <stfomichev@gmail.com> wrote:
>
> On 05/19, Mina Almasry wrote:
> > ncdevmem supports drivers that are limited to either 3-tuple or 5-tuple
> > FS support, but the ksft is currently 3-tuple only. Support drivers that
> > have 5-tuple FS supported by adding a ksft arg.
> >
> > Signed-off-by: Mina Almasry <almasrymina@google.com>
> >
> > ---
> >  .../testing/selftests/drivers/net/hw/devmem.py  | 17 +++++++++++++++--
> >  1 file changed, 15 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/testing/selftests/drivers/net/hw/devmem.py b/tools/testing/selftests/drivers/net/hw/devmem.py
> > index 39b5241463aa..40fe5b525d51 100755
> > --- a/tools/testing/selftests/drivers/net/hw/devmem.py
> > +++ b/tools/testing/selftests/drivers/net/hw/devmem.py
> > @@ -21,14 +21,27 @@ def require_devmem(cfg):
> >  def check_rx(cfg, ipver) -> None:
> >      require_devmem(cfg)
> >
> > +    fs_5_tuple = False
> > +    if "FLOW_STEERING_5_TUPLE" in cfg.env:
> > +        fs_5_tuple = cfg.env["FLOW_STEERING_5_TUPLE"]
>
> I wonder if we can transparently handle it in ncdevmem: if -c is passed,
> try installing 3-tuple rule, and if it fails, try 5-tuple one. This
> should work without any user input / extra environment variable.
>

This seems like a good idea, yes, but I think install a 5-tuple one
first, and if that fails, try a 3-tuple one? 5-tuple rules are more
specific and should take precedence when the driver supports both. It
doesn't really matter but the 3-tuple one can match unintended flows.

-- 
Thanks,
Mina
Re: [PATCH net-next v1 7/9] net: devmem: ksft: add 5 tuple FS support
Posted by Stanislav Fomichev 7 months ago
On 05/19, Mina Almasry wrote:
> On Mon, May 19, 2025 at 8:37 AM Stanislav Fomichev <stfomichev@gmail.com> wrote:
> >
> > On 05/19, Mina Almasry wrote:
> > > ncdevmem supports drivers that are limited to either 3-tuple or 5-tuple
> > > FS support, but the ksft is currently 3-tuple only. Support drivers that
> > > have 5-tuple FS supported by adding a ksft arg.
> > >
> > > Signed-off-by: Mina Almasry <almasrymina@google.com>
> > >
> > > ---
> > >  .../testing/selftests/drivers/net/hw/devmem.py  | 17 +++++++++++++++--
> > >  1 file changed, 15 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/tools/testing/selftests/drivers/net/hw/devmem.py b/tools/testing/selftests/drivers/net/hw/devmem.py
> > > index 39b5241463aa..40fe5b525d51 100755
> > > --- a/tools/testing/selftests/drivers/net/hw/devmem.py
> > > +++ b/tools/testing/selftests/drivers/net/hw/devmem.py
> > > @@ -21,14 +21,27 @@ def require_devmem(cfg):
> > >  def check_rx(cfg, ipver) -> None:
> > >      require_devmem(cfg)
> > >
> > > +    fs_5_tuple = False
> > > +    if "FLOW_STEERING_5_TUPLE" in cfg.env:
> > > +        fs_5_tuple = cfg.env["FLOW_STEERING_5_TUPLE"]
> >
> > I wonder if we can transparently handle it in ncdevmem: if -c is passed,
> > try installing 3-tuple rule, and if it fails, try 5-tuple one. This
> > should work without any user input / extra environment variable.
> >
> 
> This seems like a good idea, yes, but I think install a 5-tuple one
> first, and if that fails, try a 3-tuple one? 5-tuple rules are more
> specific and should take precedence when the driver supports both. It
> doesn't really matter but the 3-tuple one can match unintended flows.

SG!