On 08/07/2026 16:17, Eelco Chaudron wrote:
External email: Use caution opening links or attachments


This patch adds userspace DOCA offload unit tests. They can be run
with the 'make check-doca-offloads' command. More details on how to
set this up can be found in the testing.rst file.

Signed-off-by: Eelco Chaudron <[email protected]>
---

v2 changes:
   - Fixed some style issues.

NOTE: This patch requires the netdev-doca series patch sent out
       earlier by Eli Britstein. With the below version it's
       passing all the tests.
       https://patchwork.ozlabs.org/project/openvswitch/list/?series=511592
---
  Documentation/topics/testing.rst        |  23 +++++
  tests/.gitignore                        |   3 +
  tests/automake.mk                       |  24 +++++
  tests/system-doca-offloads-macros.at    | 117 ++++++++++++++++++++++++
  tests/system-doca-offloads-testsuite.at |  28 ++++++
  tests/system-doca-offloads.at           | 104 +++++++++++++++++++++
  tests/system-dpdk-macros.at             |  10 ++
  tests/system-dpdk-offloads-macros.at    |   9 --
  tests/system-traffic.at                 |  24 ++---
  9 files changed, 321 insertions(+), 21 deletions(-)
  create mode 100644 tests/system-doca-offloads-macros.at
  create mode 100644 tests/system-doca-offloads-testsuite.at
  create mode 100644 tests/system-doca-offloads.at

Hi Eelco,


Thanks for working on this!


There is a lot of duplication with system-dpdk-* files. It causes mistakes, like missing applying relevant fixes like:

ea43238cc23e ("tests: Fix VF name restore.")

Maybe it worth to think of common files and dpdk/doca specialized files just for the differences, or maybe one with "if dpdk, else if doca...".

Some differences are not mandatory.  For example, with doca we must add the ESW to ovs.  In dpdk we currently don't have to do it, but it won't matter if we do.

BTW, if/when dpdk deprecate the individual port offload and force using a proxy ovs will have to migrate as well.


See some more comments below.


diff --git a/Documentation/topics/testing.rst b/Documentation/topics/testing.rst
index 278b5c1d0..17bcf709b 100644
--- a/Documentation/topics/testing.rst
+++ b/Documentation/topics/testing.rst
@@ -262,6 +262,8 @@ The results of the testsuite are in 
``tests/system-userspace-testsuite.dir``.
  All the features documented under `Unit Tests`_ are available for the 
userspace
  datapath testsuite.

+.. _userspace-datapath-dpdk:
+
  Userspace datapath with DPDK
  ++++++++++++++++++++++++++++

@@ -326,6 +328,27 @@ To invoke the DPDK offloads testsuite with the userspace 
datapath, run::
     This has only been tested on NVIDIA blades due to the limited availability
     of other blades that support rte_flow.

+Userspace datapath with DOCA offload
+++++++++++++++++++++++++++++++++++++
+
+To invoke the userspace datapath tests with DOCA offload,
+the same prerequisites apply as for :ref:`userspace-datapath-dpdk`.
+In addition, six Virtual Function (VF) interfaces must be preconfigured on a
+single Physical Function (PF) that supports DOCA hardware offload.
+
+This is an example on how to set this up for an NVIDIA blade on port
+``ens2f0np0``::
+
+    OVS_PF_PCI=$(basename $(readlink /sys/class/net/ens2f0np0/device))
+    echo 0 > /sys/bus/pci/devices/$OVS_PF_PCI/sriov_numvfs
+    devlink dev eswitch set pci/$OVS_PF_PCI mode switchdev
+    echo 6 > /sys/bus/pci/devices/$OVS_PF_PCI/sriov_numvfs
+
+This PF's PCI ID needs to be passed with the OVS_PF_PCI variable.
+To invoke the DOCA offloads testsuite with the userspace datapath, run::
+
+    make check-doca-offloads OVS_PF_PCI=0000:17:00.0
+
  Kernel datapath
  +++++++++++++++

diff --git a/tests/.gitignore b/tests/.gitignore
index b76025d9a..597c83a7f 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -32,6 +32,9 @@
  /system-offloads-testsuite
  /system-offloads-testsuite.dir/
  /system-offloads-testsuite.log
+/system-doca-offloads-testsuite
+/system-doca-offloads-testsuite.dir/
+/system-doca-offloads-testsuite.log
  /system-dpdk-offloads-testsuite
  /system-dpdk-offloads-testsuite.dir/
  /system-dpdk-offloads-testsuite.log
diff --git a/tests/automake.mk b/tests/automake.mk
index 544d91512..f60ff97bb 100644
--- a/tests/automake.mk
+++ b/tests/automake.mk
@@ -7,6 +7,7 @@ EXTRA_DIST += \
         $(SYSTEM_TSO_TESTSUITE_AT) \
         $(SYSTEM_AFXDP_TESTSUITE_AT) \
         $(SYSTEM_OFFLOADS_TESTSUITE_AT) \
+       $(SYSTEM_DOCA_OFFLOADS_TESTSUITE_AT) \
         $(SYSTEM_DPDK_OFFLOADS_TESTSUITE_AT) \
         $(SYSTEM_DPDK_TESTSUITE_AT) \
         $(OVSDB_CLUSTER_TESTSUITE_AT) \
@@ -16,6 +17,7 @@ EXTRA_DIST += \
         $(SYSTEM_TSO_TESTSUITE) \
         $(SYSTEM_AFXDP_TESTSUITE) \
         $(SYSTEM_OFFLOADS_TESTSUITE) \
+       $(SYSTEM_DOCA_OFFLOADS_TESTSUITE) \
         $(SYSTEM_DPDK_OFFLOADS_TESTSUITE) \
         $(SYSTEM_DPDK_TESTSUITE) \
         $(OVSDB_CLUSTER_TESTSUITE) \
@@ -189,6 +191,13 @@ SYSTEM_OFFLOADS_TESTSUITE_AT = \
         tests/system-offloads-testsuite.at \
         tests/system-offloads-testsuite-macros.at

+SYSTEM_DOCA_OFFLOADS_TESTSUITE_AT = \
+       tests/system-common-macros.at \
+       tests/system-doca-offloads.at \
+       tests/system-doca-offloads-macros.at \
+       tests/system-doca-offloads-testsuite.at \
+       tests/system-dpdk-macros.at
+
  SYSTEM_DPDK_OFFLOADS_TESTSUITE_AT = \
         tests/system-common-macros.at \
         tests/system-dpdk-macros.at \
@@ -211,6 +220,7 @@ SYSTEM_USERSPACE_TESTSUITE = 
$(srcdir)/tests/system-userspace-testsuite
  SYSTEM_TSO_TESTSUITE = $(srcdir)/tests/system-tso-testsuite
  SYSTEM_AFXDP_TESTSUITE = $(srcdir)/tests/system-afxdp-testsuite
  SYSTEM_OFFLOADS_TESTSUITE = $(srcdir)/tests/system-offloads-testsuite
+SYSTEM_DOCA_OFFLOADS_TESTSUITE = $(srcdir)/tests/system-doca-offloads-testsuite
  SYSTEM_DPDK_OFFLOADS_TESTSUITE = 
$(srcdir)/tests/system-dpdk-offloads-testsuite
  SYSTEM_DPDK_TESTSUITE = $(srcdir)/tests/system-dpdk-testsuite
  OVSDB_CLUSTER_TESTSUITE = $(srcdir)/tests/ovsdb-cluster-testsuite
@@ -325,6 +335,12 @@ check-offloads-valgrind: all $(valgrind_wrappers) 
$(check_DATA)
         @echo 
'----------------------------------------------------------------------'
         @echo 'Valgrind output can be found in 
tests/system-offloads-testsuite.dir/*/valgrind.*'
         @echo 
'----------------------------------------------------------------------'
+check-doca-offloads-valgrind: all $(valgrind_wrappers) $(check_DATA)
+       $(SHELL) '$(SYSTEM_DOCA_OFFLOADS_TESTSUITE)' -C tests 
VALGRIND='$(VALGRIND)' AUTOTEST_PATH='tests/valgrind:$(AUTOTEST_PATH)' -d 
$(TESTSUITEFLAGS) -j1
+       @echo
+       @echo 
'----------------------------------------------------------------------'
+       @echo 'Valgrind output can be found in 
tests/system-doca-offloads-testsuite.dir/*/valgrind.*'
+       @echo 
'----------------------------------------------------------------------'
  check-dpdk-offloads-valgrind: all $(valgrind_wrappers) $(check_DATA)
         $(SHELL) '$(SYSTEM_DPDK_OFFLOADS_TESTSUITE)' -C tests 
VALGRIND='$(VALGRIND)' AUTOTEST_PATH='tests/valgrind:$(AUTOTEST_PATH)' -d 
$(TESTSUITEFLAGS) -j1
         @echo
@@ -373,6 +389,10 @@ check-offloads: all
         set $(SHELL) '$(SYSTEM_OFFLOADS_TESTSUITE)' -C tests  
AUTOTEST_PATH='$(AUTOTEST_PATH)'; \
         "$$@" $(TESTSUITEFLAGS) -j1 || (test X'$(RECHECK)' = Xyes && "$$@" 
--recheck)

+check-doca-offloads: all
+       set $(SHELL) '$(SYSTEM_DOCA_OFFLOADS_TESTSUITE)' -C tests  
AUTOTEST_PATH='$(AUTOTEST_PATH)'; \
+       "$$@" $(TESTSUITEFLAGS) -j1 || (test X'$(RECHECK)' = Xyes && "$$@" 
--recheck)
+
  check-dpdk-offloads: all
         set $(SHELL) '$(SYSTEM_DPDK_OFFLOADS_TESTSUITE)' -C tests  
AUTOTEST_PATH='$(AUTOTEST_PATH)'; \
         "$$@" $(TESTSUITEFLAGS) -j1 || (test X'$(RECHECK)' = Xyes && "$$@" 
--recheck)
@@ -415,6 +435,10 @@ $(SYSTEM_OFFLOADS_TESTSUITE): package.m4 
$(SYSTEM_TESTSUITE_AT) $(SYSTEM_OFFLOAD
         $(AM_V_GEN)$(AUTOTEST) -I '$(srcdir)' -o [email protected] [email protected]
         $(AM_V_at)mv [email protected] $@

+$(SYSTEM_DOCA_OFFLOADS_TESTSUITE): package.m4 $(SYSTEM_TESTSUITE_AT) 
$(SYSTEM_DOCA_OFFLOADS_TESTSUITE_AT) $(COMMON_MACROS_AT)
+       $(AM_V_GEN)$(AUTOTEST) -I '$(srcdir)' -o [email protected] [email protected]
+       $(AM_V_at)mv [email protected] $@
+
  $(SYSTEM_DPDK_OFFLOADS_TESTSUITE): package.m4 $(SYSTEM_TESTSUITE_AT) 
$(SYSTEM_DPDK_OFFLOADS_TESTSUITE_AT) $(COMMON_MACROS_AT)
         $(AM_V_GEN)$(AUTOTEST) -I '$(srcdir)' -o [email protected] [email protected]
         $(AM_V_at)mv [email protected] $@
diff --git a/tests/system-doca-offloads-macros.at 
b/tests/system-doca-offloads-macros.at
new file mode 100644
index 000000000..71652210c
--- /dev/null
+++ b/tests/system-doca-offloads-macros.at
@@ -0,0 +1,117 @@
+AT_COPYRIGHT([Copyright (c) 2026 Red Hat, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at:
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.])
+
+# We also skip any DPDK_OFFLOAD-skipped tests for the same reasons.  For
+# details, see the macro definition in the system-dpdk-offloads-macros.at file.
+m4_define([CHECK_NO_DPDK_OFFLOAD],
+[
+     AT_SKIP_IF([:])
+])
+
+# OVS_DOCA_OFFLOAD_PRE_CHECK()
+#
+# Check prerequisites for DOCA tests, i.e. make sure PF exists with the
+# corresponding VFs.
+#
+m4_define([OVS_DOCA_OFFLOAD_PRE_CHECK], [
+  OVS_DPDK_PRE_CHECK()
+  AT_SKIP_IF([test -z "$OVS_PF_PCI"])
+  AT_SKIP_IF([! ovs_verify_pf_cfg "$OVS_PF_PCI"])
+])
+
+# OVS_TRAFFIC_VSWITCHD_START([vsctl-args], [vsctl-output], [dbinit-aux-args])
+#
+# This is a copy from system-dpdk-macro.at with the following changes:
+#  1) Use OVS_DOCA_OFFLOAD_PRE_CHECK() instead of OVS_DPDK_PRE_CHECK().
+#  2) Enable DOCA and hardware offload.
+#
+m4_define([OVS_TRAFFIC_VSWITCHD_START],
+  [
+   OVS_DOCA_OFFLOAD_PRE_CHECK()
+   OVS_DOCA_PF_PORT=$(basename $(ls -d /sys/bus/pci/devices/$OVS_PF_PCI/net/* \
+                                 2>/dev/null | head -n 1))
+   OVS_WAIT_WHILE([ip link show ovs-netdev])
+   OVS_DPDK_START([--disable-system],
+                  [-- set Open_vSwitch . other_config:doca-init=true dnl
The first versions implied dpdk-init=true by doca-init=true.  You asked to make it explicit.
+                   -- set Open_vSwitch . other_config:hw-offload=true $3])
+   dnl Add bridges, ports, etc.
+   OVS_WAIT_WHILE([ip link show br0])
+   AT_CHECK([ovs-vsctl -- _ADD_BR([br0]) -- $1 m4_if([$2], [], [],
+            [| uuidfilt])], [0], [$2])
+   AT_CHECK([ovs-vsctl -- _ADD_BR([brPF])])
+   AT_CHECK([ovs-vsctl add-port brPF $OVS_DOCA_PF_PORT -- dnl
+             set interface $OVS_DOCA_PF_PORT type=doca])
+])
+
+# OVS_TRAFFIC_VSWITCHD_STOP([ALLOWLIST], [extra_cmds])
See 75293d1eac1f ("tests: Remove ALLOW_LIST argument.")
+#
+# This is a copy from system-dpdk-macro.at adding some doca offload specific
+# error message exclusion.
+#
+m4_define([OVS_TRAFFIC_VSWITCHD_STOP],
+  [OVS_DPDK_STOP_VSWITCHD([dnl
+$1";/mlx5_net: Failed to update link status: /d"])
+   AT_CHECK([:; $2])
+])
+
+# ADD_{VF|VETH}([port], [namespace], [ovs-br], [ip_addr] [mac_addr], [gateway],
+#               [ip_addr_flags])
+#
+# Simulate the ADD_VETH() macro defined in system-common-macros.at, allowing
+# us to run the existing system-traffic unit tests without any test-specific
+# changes.  This is consistent with how DPDK and AF_XDP run the system tests,
+# except that we are not using actual veth devices, but VF representor ports.
+#
+m4_define([ADD_VF],
+    [ USER_PORT=$1
+      case "$USER_PORT" in
+        client) PORT_NO=0 ;;
+        server) PORT_NO=1 ;;

The duplicated code for dpdk uses VF_IDX.  As written above, the preferred way is common infrastructure to avoid as much as possible the duplication.

If we must have some, let's keep them the same, without such differences.

+        *) PORT_NO=${USER_PORT##*[!0-9]} ;;
+      esac
+
+      AT_CHECK([[[ "$PORT_NO" -ge 0 ]] && [[ "$PORT_NO" -le 5 ]] || return 66])
+
+      VF=$(ovs_get_vf_port $OVS_PF_PCI $PORT_NO)
+      REP=$(ovs_get_representor_port $OVS_PF_PCI $PORT_NO)
+      AT_CHECK([test -n "$VF"])
+      AT_CHECK([test -n "$REP"])
+
+      AT_CHECK([ip link set $REP name ovs-$1])
+      AT_CHECK([ip link set $VF down])
+      AT_CHECK([ip link set $VF name $1])
+      AT_CHECK([ip link set $1 netns $2])
+      AT_CHECK([ovs-vsctl add-port $3 ovs-$1 -- \
+                set interface ovs-$1 external-ids:iface-id="$1" -- \
+                set interface ovs-$1 type=doca])
+
+      NS_CHECK_EXEC([$2], [ip addr add $4 dev $1 $7])
+      NS_CHECK_EXEC([$2], [ip link set dev $1 up])
+      if test -n "$5"; then
+        NS_CHECK_EXEC([$2], [ip link set dev $1 address $5])
+      else
+        NS_CHECK_EXEC([$2],
+                      [ip link set dev $1 address 02:00:00:00:EC:0$PORT_NO])
+      fi
+      if test -n "$6"; then
+        NS_CHECK_EXEC([$2], [ip route add default via $6])
+      fi
+      on_exit "ip netns exec $2 ip link set $1 netns 1; \
+               ip link property del dev $1 altname $VF; \
+               ip link property del dev ovs-$1 altname $REP; \
+               ip link set $1 name $VF; \
+               ip link set ovs-$1 name $REP"
See ea43238cc23e ("tests: Fix VF name restore.")
+    ]
+)
+m4_define([ADD_VETH], [ADD_VF($@)])
diff --git a/tests/system-doca-offloads-testsuite.at 
b/tests/system-doca-offloads-testsuite.at
new file mode 100644
index 000000000..f69d872bf
--- /dev/null
+++ b/tests/system-doca-offloads-testsuite.at
@@ -0,0 +1,28 @@
+AT_INIT
+
+AT_COPYRIGHT([Copyright (c) 2026 Red Hat, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at:
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.])
+
+m4_ifdef([AT_COLOR_TESTS], [AT_COLOR_TESTS])
+
+m4_include([tests/ovs-macros.at])
+m4_include([tests/ovsdb-macros.at])
+m4_include([tests/ofproto-macros.at])
+m4_include([tests/system-common-macros.at])
+m4_include([tests/system-userspace-macros.at])
+m4_include([tests/system-dpdk-macros.at])
+m4_include([tests/system-doca-offloads-macros.at])
+
+m4_include([tests/system-doca-offloads.at])
+m4_include([tests/system-traffic.at])
diff --git a/tests/system-doca-offloads.at b/tests/system-doca-offloads.at
new file mode 100644
index 000000000..0b579a58c
--- /dev/null
+++ b/tests/system-doca-offloads.at
@@ -0,0 +1,104 @@
+AT_COPYRIGHT([Copyright (c) 2026 Red Hat, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at:
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.])
+
+AT_BANNER([DOCA offload unit tests])
+
+AT_SETUP([doca offload - ping between two hardware offloaded ports])
+OVS_DOCA_OFFLOAD_PRE_CHECK()
+OVS_TRAFFIC_VSWITCHD_START()
+AT_CHECK([ovs-appctl vlog/set netdev_doca:dbg])
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+ADD_NAMESPACES(at_ns0, at_ns1)
+ADD_VF(p0, at_ns0, br0, "10.1.1.1/24")
+ADD_VF(p1, at_ns1, br0, "10.1.1.2/24")
+
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -W 2 10.1.1.2 \
+                         | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+# Once actual hardware offload is supported, type should be changed from 'ovs'
+# to 'doca,offloaded'.
+OVS_WAIT_UNTIL_EQUAL(
+  [ovs-appctl dpctl/dump-flows --names type=ovs \
+   | DUMP_DP_IP_CLEAN_SORTED], [dnl
+in_port(ovs-p0),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p1
+in_port(ovs-p1),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p0])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([doca offload - ping between six hardware offloaded ports])
+OVS_DOCA_OFFLOAD_PRE_CHECK()
+OVS_TRAFFIC_VSWITCHD_START()
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:max-idle=20000])
+ADD_NAMESPACES(at_ns0, at_ns1, at_ns2, at_ns3, at_ns4, at_ns5)
+ADD_VF(p0, at_ns0, br0, "10.1.1.1/24")
+ADD_VF(p1, at_ns1, br0, "10.1.1.2/24")
+ADD_VF(p2, at_ns2, br0, "10.1.1.3/24")
+ADD_VF(p3, at_ns3, br0, "10.1.1.4/24")
+ADD_VF(p4, at_ns4, br0, "10.1.1.5/24")
+ADD_VF(p5, at_ns5, br0, "10.1.1.6/24")
+
+for NS in $(seq 0 5); do
+    START=$((NS + 2))
+    for IP in $(seq "$START" 6); do
+        NS_CHECK_EXEC([at_ns$NS], [ping -q -c 3 -i 0.3 -W 2 10.1.1.$IP \
+                                   | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+    done
+done
+
+# Once actual hardware offload is supported, type should be changed from 'ovs'
+# to 'doca,offloaded'.
+OVS_WAIT_UNTIL_EQUAL(
+  [ovs-appctl dpctl/dump-flows --names type=ovs \
+   | DUMP_DP_IP_CLEAN_SORTED], [dnl
+in_port(ovs-p0),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p1
+in_port(ovs-p0),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p2
+in_port(ovs-p0),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p3
+in_port(ovs-p0),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p4
+in_port(ovs-p0),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p5
+in_port(ovs-p1),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p0
+in_port(ovs-p1),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p2
+in_port(ovs-p1),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p3
+in_port(ovs-p1),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p4
+in_port(ovs-p1),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p5
+in_port(ovs-p2),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p0
+in_port(ovs-p2),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p1
+in_port(ovs-p2),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p3
+in_port(ovs-p2),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p4
+in_port(ovs-p2),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p5
+in_port(ovs-p3),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p0
+in_port(ovs-p3),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p1
+in_port(ovs-p3),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p2
+in_port(ovs-p3),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p4
+in_port(ovs-p3),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p5
+in_port(ovs-p4),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p0
+in_port(ovs-p4),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p1
+in_port(ovs-p4),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p2
+in_port(ovs-p4),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p3
+in_port(ovs-p4),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p5
+in_port(ovs-p5),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p0
+in_port(ovs-p5),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p1
+in_port(ovs-p5),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p2
+in_port(ovs-p5),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p3
+in_port(ovs-p5),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:2, 
bytes:196, used:0.0s, actions:ovs-p4])
For dpdk there are more tests that we can run here as well (again, duplicated...), even without offload support.  Those check more of functionality than offloads anyway.
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
diff --git a/tests/system-dpdk-macros.at b/tests/system-dpdk-macros.at
index 3f0df2d9b..9575c90e9 100644
--- a/tests/system-dpdk-macros.at
+++ b/tests/system-dpdk-macros.at
@@ -200,3 +200,13 @@ m4_define([CONFIGURE_VETH_OFFLOADS],
      [AT_CHECK([ethtool -K $1 tx off], [0], [ignore], [ignore])
       AT_CHECK([ethtool -K $1 txvlan off], [0], [ignore], [ignore])]
  )
+
+
+# DUMP_DP_IP_CLEAN_SORTED()

I would suggest to have it sorted as part of the code for dpctl/dump-flows (we have such commit btw in our downstream version).

It makes it easier to review as well, not only for testsuite. Once we have it in place it can be used for the tests as well.

If you want to keep it localized for the tests only, it should be done in another commit.

+#
+# Clean up and sort the ovs-appctl dpctl/dump-flows output for comparing.
+#
+m4_define([DUMP_DP_IP_CLEAN_SORTED], [dnl
+  grep 'eth_type(0x0800)' \
+    | sed -e 
's/eth(src=[[a-z0-9:]]*,dst=[[a-z0-9:]]*)/eth(macs)/;s/recirc_id(0),//' \
+    | strip_used | strip_ptype | sort])
diff --git a/tests/system-dpdk-offloads-macros.at 
b/tests/system-dpdk-offloads-macros.at
index 3c6cce1a8..8004966df 100644
--- a/tests/system-dpdk-offloads-macros.at
+++ b/tests/system-dpdk-offloads-macros.at
@@ -135,12 +135,3 @@ m4_define([ADD_VF],
      ]
  )
  m4_define([ADD_VETH], [ADD_VF($@)])
-
-# DUMP_DP_IP_CLEAN_SORTED()
-#
-# Clean up and sort the ovs-dpctl dump-flow output for comparing.
-#
-m4_define([DUMP_DP_IP_CLEAN_SORTED], [dnl
-  grep 'eth_type(0x0800)' \
-    | sed -e 
's/eth(src=[[a-z0-9:]]*,dst=[[a-z0-9:]]*)/eth(macs)/;s/recirc_id(0),//' \
-    | strip_used | strip_ptype | sort])
diff --git a/tests/system-traffic.at b/tests/system-traffic.at
index f67e7d17a..19308b5c2 100644
--- a/tests/system-traffic.at
+++ b/tests/system-traffic.at
@@ -2207,9 +2207,9 @@ dnl SLOW_ACTION test1: check datapatch actions
  AT_CHECK([ovs-ofctl del-flows br0])
  AT_CHECK([ovs-ofctl add-flows br0 flows.txt])

-AT_CHECK([ovs-appctl ofproto/trace br0 
"in_port=1,dl_type=0x800,dl_src=e6:66:c1:11:11:11,dl_dst=e6:66:c1:22:22:22,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,tp_src=8,tp_dst=9"],
 [0], [stdout])
+AT_CHECK([ovs-appctl ofproto/trace --names br0 
"in_port=1,dl_type=0x800,dl_src=e6:66:c1:11:11:11,dl_dst=e6:66:c1:22:22:22,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,tp_src=8,tp_dst=9"],
 [0], [stdout])
  AT_CHECK([tail -3 stdout], [0],
-[Datapath actions: 
trunc(100),3,5,trunc(100),3,trunc(100),5,3,trunc(200),5,trunc(65535),3
+[Datapath actions: 
trunc(100),ovs-p1,ovs-p2,trunc(100),ovs-p1,trunc(100),ovs-p2,ovs-p1,trunc(200),ovs-p2,trunc(65535),ovs-p1
  This flow is handled by the userspace slow path because it:
    - Uses action(s) not supported by datapath.
  ])
@@ -2548,10 +2548,10 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
  dnl Generate some traffic.
  NS_CHECK_EXEC([at_ns0], [ping -q -c 10 -i 0.1 -w 2 10.1.1.2], [1], [ignore])

-OVS_WAIT_UNTIL_EQUAL([ovs-appctl dpctl/dump-flows | grep "eth_type(0x0800)" | 
dnl
-                      strip_ptype | strip_eth | strip_recirc | strip_stats | 
dnl
-                      strip_used | sort], [dnl
-recirc_id(<recirc>),in_port(2),eth_type(0x0800),ipv4(frag=no), packets:0, 
bytes:0, used:0.0s, actions:drop])
+OVS_WAIT_UNTIL_EQUAL([ovs-appctl dpctl/dump-flows --names | dnl
+                      grep "eth_type(0x0800)" | strip_ptype | strip_eth | dnl
+                      strip_recirc | strip_stats | strip_used | sort], [dnl
+recirc_id(<recirc>),in_port(ovs-p0),eth_type(0x0800),ipv4(frag=no), packets:0, 
bytes:0, used:0.0s, actions:drop])

  OVS_TRAFFIC_VSWITCHD_STOP(["/WARN/d"])
  AT_CLEANUP
@@ -2703,11 +2703,11 @@ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 
\
      $(ovs-ofctl compose-packet --bare 'ND_NS_PKT,nd_target=2001::1:0:392')],
    [0], [ignore])

-AT_CHECK([ovs-appctl dpctl/dump-flows | strip_stats | strip_used | dnl
+AT_CHECK([ovs-appctl dpctl/dump-flows --names | strip_stats | strip_used | dnl
            strip_key32 | strip_ptype | strip_eth | strip_recirc | dnl
            grep ",nd" | sort], [0], [dnl
-recirc_id(<recirc>),in_port(2),eth(src=36:b1:ee:7c:01:03,dst=36:b1:ee:7c:01:02),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=136),nd(target=2001::1:0:392),
 packets:0, bytes:0, used:never, actions:1,3
-recirc_id(<recirc>),in_port(2),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=136),nd(target=3000::1),
 packets:0, bytes:0, used:never, actions:drop
+recirc_id(<recirc>),in_port(ovs-p0),eth(src=36:b1:ee:7c:01:03,dst=36:b1:ee:7c:01:02),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=136),nd(target=2001::1:0:392),
 packets:0, bytes:0, used:never, actions:br0,ovs-p1
+recirc_id(<recirc>),in_port(ovs-p0),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=136),nd(target=3000::1),
 packets:0, bytes:0, used:never, actions:drop
  ])

  OVS_WAIT_UNTIL([ovs-appctl dpctl/dump-flows | grep ",nd" | wc -l | grep -E 
^0])
@@ -2722,11 +2722,11 @@ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 
\
      $(ovs-ofctl compose-packet --bare 'ND_NS_PKT,nd_target=3000::1')],
    [0], [ignore])

-AT_CHECK([ovs-appctl dpctl/dump-flows | strip_stats | strip_used | dnl
+AT_CHECK([ovs-appctl dpctl/dump-flows --names | strip_stats | strip_used | dnl
            strip_key32 | strip_ptype | strip_eth | strip_recirc | dnl
            grep ",nd" | sort], [0], [dnl
-recirc_id(<recirc>),in_port(2),eth(src=36:b1:ee:7c:01:03,dst=36:b1:ee:7c:01:02),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=136),nd(target=2001::1:0:392),
 packets:0, bytes:0, used:never, actions:1,3
-recirc_id(<recirc>),in_port(2),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=136),nd(target=3000::1),
 packets:0, bytes:0, used:never, actions:drop
+recirc_id(<recirc>),in_port(ovs-p0),eth(src=36:b1:ee:7c:01:03,dst=36:b1:ee:7c:01:02),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=136),nd(target=2001::1:0:392),
 packets:0, bytes:0, used:never, actions:br0,ovs-p1
+recirc_id(<recirc>),in_port(ovs-p0),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=136),nd(target=3000::1),
 packets:0, bytes:0, used:never, actions:drop
  ])

  OVS_TRAFFIC_VSWITCHD_STOP
--
2.54.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to