[{"id":3677066,"web_url":"http://patchwork.ozlabs.org/comment/3677066/","msgid":"<33635018-d23e-4c85-b222-df9303e76553@nvidia.com>","list_archive_url":null,"date":"2026-04-14T08:32:56","subject":"Re: [ovs-dev] [PATCH v2] tests: Rework DPDK offload tests to use a\n simpler interface argument.","submitter":{"id":79848,"url":"http://patchwork.ozlabs.org/api/people/79848/","name":"Eli Britstein","email":"elibr@nvidia.com"},"content":"On 08/04/2026 18:06, Eelco Chaudron wrote:\n> External email: Use caution opening links or attachments\n>\n>\n> This patch refactors the DPDK offload test infrastructure to simplify\n> the interface configuration.  Instead of using OVS_DPDK_VF_PCI_ADDRS\n> with a space-separated list of PCI addresses and VF indices (e.g.,\n> \"0000:17:00.0,0 0000:17:00.0,1\"), the tests now use OVS_PF_PCI\n> with a single PF address (e.g., \"0000:17:00.0\") and derive VF\n> information from sysfs.\n\nHi Eelco\n\nThanks for this. Just a few nits below.\n\n>\n> Signed-off-by: Eelco Chaudron <echaudro@redhat.com>\n> ---\n> Changes to v2:\n> - Use PCI address rather than port name, so other blades might\n>    be supported.\n> - Moved/renamed shell helpers.\n> - Updated documentation.\n> ---\n>   Documentation/topics/testing.rst     |  25 ++++---\n>   tests/system-common-macros.at        |  89 ++++++++++++++++++++++\n>   tests/system-dpdk-offloads-macros.at | 108 ++++-----------------------\n>   3 files changed, 120 insertions(+), 102 deletions(-)\n>\n> diff --git a/Documentation/topics/testing.rst b/Documentation/topics/testing.rst\n> index deb6088d7..9cb9e0b5b 100644\n> --- a/Documentation/topics/testing.rst\n> +++ b/Documentation/topics/testing.rst\n> @@ -306,19 +306,26 @@ Userspace datapath with DPDK offload\n>\n>   To invoke the userspace datapath tests with DPDK and its rte_flow offload,\n>   the same prerequisites apply as above. In addition, six Virtual Function (VF)\n> -interfaces must be preconfigured and capable of hardware offloading traffic\n> -between each other.\n> +interfaces must be preconfigured on a single Physical Function (PF) that\n> +supports rte_flow hardware offload.\n>\n> -These six VFs need to be passed as a list of PF PCI addresses with their\n> -corresponding VF indexes in the OVS_DPDK_VF_PCI_ADDRS variable.\n> -For example::\n> +This is an example on how to set this up for an NVIDIA blade on port\n> +``ens2f0np0``::\n>\n> -    OVS_DPDK_VF_PCI_ADDRS=\"0000:17:00.0,0 0000:17:00.0,1 0000:17:00.0,2 0000:17:00.0,3 0000:17:00.0,4 0000:17:00.0,5\"\n> +    OVS_PF_PORT=ens2f0np0\n> +    OVS_PF_PCI=$(basename $(readlink /sys/class/net/$OVS_PF_PORT/device))\n\nMentioning \"OVS_PF_PORT\", though just here for explaining how to \nconfigure VFs might be confusing for the user.\n\nI think we can leave it to the user to figure out the PCI address of the \nport, and drop those 2 lines.\n\n> +    echo 0 > /sys/bus/pci/devices/$OVS_PF_PCI/sriov_numvfs\n> +    devlink dev eswitch set pci/$OVS_PF_PCI mode switchdev\n> +    echo 6 > /sys/bus/pci/devices/$OVS_PF_PCI/sriov_numvfs\n>\n> -To invoke the dpdk offloads testsuite with the userspace datapath, run::\n> +This PF's PCI ID needs to be passed with the OVS_PF_PORT variable.\ns/OVS_PF_PORT/OVS_PF_PCI\n> +To invoke the DPDK offloads testsuite with the userspace datapath, run::\n>\n> -    make check-dpdk-offloads \\\n> -        OVS_DPDK_VF_PCI_ADDRS=\"0000:17:00.0,0 0000:17:00.0,1 0000:17:00.0,2 0000:17:00.0,3 0000:17:00.0,4 0000:17:00.0,5\"\n> +    make check-dpdk-offloads OVS_PF_PCI=0000:17:00.0\n> +\n> +.. note::\n> +   This has only been tested on NVIDIA blades due to the limited availability\n> +   of other blades that support rte_flow.\n>\n>   Userspace datapath: Testing and Validation of CPU-specific Optimizations\n>   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n> diff --git a/tests/system-common-macros.at b/tests/system-common-macros.at\n> index e4862231a..90a34b406 100644\n> --- a/tests/system-common-macros.at\n> +++ b/tests/system-common-macros.at\n> @@ -409,3 +409,92 @@ m4_define([OVS_CHECK_PSAMPLE],\n>   # OVS_CHECK_XT()\n>   m4_define([OVS_CHECK_XT],\n>       [AT_SKIP_IF([test $HAVE_IPTABLES = no && test $HAVE_NFT = no])])\n> +\n> +OVS_START_SHELL_HELPERS\n> +\n> +# ovs_get_vf_netdev(<PF_PORT_PCI>, <VF_INDEX>)\n> +#\n> +# This function tries to find the VF's netdev for the given PF's VF index.\n> +#\n> +ovs_get_vf_netdev() {\ns/netdev/port?\n> +    PF_PCI=$1\n> +    VF_IDX=$2\nlocal? also in other functions\n> +\n> +    vf_net_dir=\"/sys/bus/pci/devices/$PF_PCI/virtfn$VF_IDX/net\"\n> +    if test ! -d \"$vf_net_dir\"; then\n> +        return 1\n> +    fi\n> +\n> +    vf_name=$(ls \"$vf_net_dir\" 2>/dev/null | head -1)\n> +    if test -z \"$vf_name\"; then\n> +        return 2\n> +    fi\n> +\n> +    echo \"$vf_name\"\n> +    return 0\n> +}\n> +\n> +# ovs_get_representor_netdev(<PF_PORT_PCI>, <VF_INDEX>)\n> +#\n> +# This function tries to find the representor's netdev for the given PF's VF\n> +# index.\n> +#\n> +ovs_get_representor_netdev() {\n> +    PF_PCI=$1\n> +    VF_IDX=$2\n> +\n> +    representor=$(grep -l \"vf$VF_IDX$\" \\\n> +                  /sys/bus/pci/devices/$PF_PCI/net/*/phys_port_name \\\n> +                  2>/dev/null | head -1)\n> +    if test -z \"$representor\"; then\n> +        return 2\n> +    fi\n> +\n> +    basename $(dirname \"$representor\")\n> +    return 0\n> +}\n> +\n> +# ovs_verify_pf_cfg(<PF_PORT_PCI>)\n> +#\n> +# Verify that the given PF port exists and that the required VFs are properly\n> +# configured, i.e. have representor ports.\n> +#\n> +ovs_verify_pf_cfg() {\n> +    PF_PCI=$1\n> +    VF_NAMES=()\n> +    REPRESENTOR_NAMES=()\n> +    PCI_REGEX=[[0-9a-fA-F]]{4}:[[0-9a-fA-F]]{2}:[[0-9a-fA-F]]{2}\\.[[0-7]]\n> +\n> +    echo \"$PF_PCI\" | grep -E -q \"^$PCI_REGEX$\" || return 1\n> +\n> +    for i in {0..5}; do\n> +        # Get VF netdev using PCI path\n> +        vf_net_dir=\"/sys/bus/pci/devices/$PF_PCI/virtfn$i/net\"\n> +        if test ! -d \"$vf_net_dir\"; then\n> +            return 2\n> +        fi\n> +\n> +        vf_name=$(ls \"$vf_net_dir\" 2>/dev/null | head -1)\n> +        if test -z \"$vf_name\"; then\n> +            return 3\n> +        fi\n> +        VF_NAMES+=($vf_name)\n> +\n> +        # Find representor port for this VF\n> +        representor=$(grep -l \"vf$i$\" \\\n> +                      /sys/bus/pci/devices/$PF_PCI/net/*/phys_port_name \\\n> +                      2>/dev/null | head -1)\n> +        if test -z \"$representor\"; then\n> +            return 4\n> +        fi\n> +        REPRESENTOR_NAMES+=($(basename $(dirname \"$representor\")))\n> +    done\n> +\n> +    if test \"${#VF_NAMES[*]}\" -lt 6 -o \"${#REPRESENTOR_NAMES[*]}\" -lt 6; then\n> +        return 5\n> +    fi\n> +\n> +    return 0\n> +}\n> +\n> +OVS_END_SHELL_HELPERS\n> diff --git a/tests/system-dpdk-offloads-macros.at b/tests/system-dpdk-offloads-macros.at\n> index ff7a6e095..1ea089290 100644\n> --- a/tests/system-dpdk-offloads-macros.at\n> +++ b/tests/system-dpdk-offloads-macros.at\n> @@ -54,10 +54,8 @@ m4_define([CHECK_NO_DPDK_OFFLOAD],\n>   #\n>   m4_define([OVS_DPDK_OFFLOAD_PRE_CHECK], [\n>     OVS_DPDK_PRE_CHECK()\n> -  AT_SKIP_IF(\n> -    [test \"$(printf '%s' \"$OVS_DPDK_VF_PCI_ADDRS\" | wc -w)\" -ne 6])\n> -\n> -  AT_SKIP_IF([! ovs_dpdk_verify_vf_cfg \"$OVS_DPDK_VF_PCI_ADDRS\"])\n> +  AT_SKIP_IF([test -z \"$OVS_PF_PCI\"])\n> +  AT_SKIP_IF([! ovs_verify_pf_cfg \"$OVS_PF_PCI\"])\n>   ])\n>\n>   # OVS_TRAFFIC_VSWITCHD_START([vsctl-args], [vsctl-output], [dbinit-aux-args])\n> @@ -114,39 +112,38 @@ $1\";/mlx5_net: Failed to update link status: /d\"])\n>   m4_define([ADD_VF],\n>       [ USER_PORT=$1\n>         case \"$USER_PORT\" in\n> -        client) PORT_NO=0 ;;\n> -        server) PORT_NO=1 ;;\n> -        *) PORT_NO=${USER_PORT##*[!0-9]} ;;\n> +        client) VF_IDX=0 ;;\n> +        server) VF_IDX=1 ;;\n> +        *) VF_IDX=${USER_PORT##*[!0-9]} ;;\n>         esac\n>\n> -      AT_CHECK([[[ \"$PORT_NO\" -ge 0 ]] && [[ \"$PORT_NO\" -le 6 ]] || return 66])\n> -      PORT_CFG=$(echo $OVS_DPDK_VF_PCI_ADDRS | cut -d' ' -f$((PORT_NO+1)))\n> -      PF_PCI=$(ovs_dpdk_get_pci_id \"$PORT_CFG\")\n> -      VF_IDX=$(ovs_dpdk_get_vf_idx \"$PORT_CFG\")\n> -      REP=$(ovs_dpdk_get_representor_netdev $PF_PCI $VF_IDX)\n> -      AT_CHECK([test $? -eq 0])\n> +      AT_CHECK([[[ \"$VF_IDX\" -ge 0 ]] && [[ \"$VF_IDX\" -le 5 ]] || return 66])\n> +\n> +      VF=$(ovs_get_vf_netdev $OVS_PF_PCI $VF_IDX)\n> +      AT_CHECK([test -n \"$VF\"])\n>\n> -      AT_CHECK([ip link set $REP name $1])\n> +      AT_CHECK([ip link set $VF down])\n> +      AT_CHECK([ip link set $VF name $1])\n>         AT_CHECK([ip link set $1 netns $2])\n>         AT_CHECK([ovs-vsctl add-port $3 ovs-$1 -- \\\n>                   set interface ovs-$1 external-ids:iface-id=\"$1\" -- \\\n>                   set interface ovs-$1 type=dpdk -- \\\n>                   set interface ovs-$1 \\\n> -                  options:dpdk-devargs=$PF_PCI,representor=vf$VF_IDX])\n> +                  options:dpdk-devargs=$OVS_PF_PCI,representor=vf$VF_IDX])\n>         NS_CHECK_EXEC([$2], [ip addr add $4 dev $1 $7])\n>         NS_CHECK_EXEC([$2], [ip link set dev $1 up])\n>         if test -n \"$5\"; then\n>           NS_CHECK_EXEC([$2], [ip link set dev $1 address $5])\n>         else\n>           NS_CHECK_EXEC([$2],\n> -                      [ip link set dev $1 address 02:00:00:00:EC:0$PORT_NO])\n> +                      [ip link set dev $1 address 02:00:00:00:EC:0$VF_IDX])\n>         fi\n>         if test -n \"$6\"; then\n>           NS_CHECK_EXEC([$2], [ip route add default via $6])\n>         fi\n>         on_exit \"ip netns exec $2 ip link set $1 netns 1; \\\n> -               ip link property del dev $1 altname $REP; \\\n> -               ip link set $1 name $REP\"\n> +               ip link property del dev $1 altname $VF; \\\n> +               ip link set $1 name $VF\"\n>       ]\n>   )\n>   m4_define([ADD_VETH], [ADD_VF($@)])\n> @@ -159,78 +156,3 @@ m4_define([DUMP_DP_IP_CLEAN_SORTED], [dnl\n>     grep 'eth_type(0x0800)' \\\n>       | sed -e 's/eth(src=[[a-z0-9:]]*,dst=[[a-z0-9:]]*)/eth(macs)/;s/recirc_id(0),//' \\\n>       | strip_used | strip_ptype | sort])\n> -\n> -OVS_START_SHELL_HELPERS\n> -\n> -# ovs_dpdk_is_valid_pci_vf_addr()\n> -#\n> -# Check if the given PF PCI address and the VF number are valid.\n> -#\n> -ovs_dpdk_is_valid_pci_vf_addr() {\n> -    PCI_ID='[[0-9a-fA-F]]{4}:[[0-9a-fA-F]]{2}:[[0-9a-fA-F]]{2}\\.[[0-7]]'\n> -    echo \"$1\" | grep -E -q \"^$PCI_ID,[[0-9]]+$\" && return 0 || return 1\n> -}\n> -\n> -# ovs_dpdk_get_pci_id()\n> -#\n> -ovs_dpdk_get_pci_id() {\n> -    printf '%s\\n' \"${1%%,*}\"\n> -}\n> -\n> -# ovs_dpdk_get_vf_idx()\n> -#\n> -ovs_dpdk_get_vf_idx() {\n> -    printf '%s\\n' \"${1##*,}\"\n> -}\n> -\n> -# ovs_dpdk_get_representor_netdev(<PF_PCI>, <VF_INDEX>)\n> -#\n> -# This function tries to find the representor netdev for the given PF's VF.\n> -#\n> -ovs_dpdk_get_representor_netdev() {\n> -    PF_PCI=$1\n> -    VF_IDX=$2\n> -\n> -    VF_NET_DIR=\"/sys/bus/pci/devices/$PF_PCI/virtfn$VF_IDX/net\"\n> -\n> -    if [[ ! -d \"$VF_NET_DIR\" ]]; then\n> -        echo \"ERROR: VF $VF_IDX for PF $PF_PCI does not exist\" >&2\n> -        return 1\n> -    fi\n> -\n> -    for iface in \"$VF_NET_DIR\"/*; do\n> -        if [[ -e \"$iface\" ]]; then\n> -            basename \"$iface\"\n> -            return 0\n> -        fi\n> -    done\n> -\n> -    echo \"ERROR: No representor netdev found for VF $VF_IDX on PF $PF_PCI\" >&2\n> -    return 1\n> -}\n> -\n> -# ovs_dpdk_verify_vf_cfg()\n> -#\n> -# Verify that the given PF PCI addresses and corresponding VF IDs in\n> -# OVS_DPDK_VF_PCI_ADDRS are valid, exist, and have corresponding\n> -# representor ports.\n> -#\n> -ovs_dpdk_verify_vf_cfg() {\n> -    i=0\n> -\n> -    for addr in $1; do\n> -        ovs_dpdk_is_valid_pci_vf_addr \"$addr\" || return 1\n> -\n> -        PCI_ID=$(ovs_dpdk_get_pci_id \"$addr\")\n> -        VF_IDX=$(ovs_dpdk_get_vf_idx \"$addr\")\n> -\n> -        REP=$(ovs_dpdk_get_representor_netdev $PCI_ID $VF_IDX) || return 1\n> -\n> -        echo \"ovs-p$i: PF PCI $PCI_ID with VF $VF_IDX has representor $REP\"\n> -        i=$((i + 1))\n> -    done\n> -\n> -    return 0\n> -}\n> -\n> -OVS_END_SHELL_HELPERS\n> --\n> 2.47.3\n>","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","ovs-dev@lists.linuxfoundation.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=kCdExhNN;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org\n (client-ip=140.211.166.138; helo=smtp1.osuosl.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org)","smtp1.osuosl.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key,\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=kCdExhNN","smtp2.osuosl.org;\n dmarc=pass (p=reject dis=none) header.from=nvidia.com","smtp2.osuosl.org; dkim=pass (2048-bit key,\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=kCdExhNN","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nvidia.com;"],"Received":["from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fvyGL0ZD3z1yHH\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 18:33:14 +1000 (AEST)","from localhost (localhost [127.0.0.1])\n\tby smtp1.osuosl.org (Postfix) with ESMTP id 36A9584C6D;\n\tTue, 14 Apr 2026 08:33:11 +0000 (UTC)","from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id 6OAOy0CSC8MI; Tue, 14 Apr 2026 08:33:10 +0000 (UTC)","from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56])\n\tby smtp1.osuosl.org (Postfix) with ESMTPS id D7CAD84C64;\n\tTue, 14 Apr 2026 08:33:09 +0000 (UTC)","from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id 92C7DC054A;\n\tTue, 14 Apr 2026 08:33:09 +0000 (UTC)","from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133])\n by lists.linuxfoundation.org (Postfix) with ESMTP id 46DEBC0549\n for <dev@openvswitch.org>; Tue, 14 Apr 2026 08:33:08 +0000 (UTC)","from localhost (localhost [127.0.0.1])\n by smtp2.osuosl.org (Postfix) with ESMTP id 2CCF140794\n for <dev@openvswitch.org>; Tue, 14 Apr 2026 08:33:08 +0000 (UTC)","from smtp2.osuosl.org ([127.0.0.1])\n by localhost (smtp2.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id 39BgNyjm1rzo for <dev@openvswitch.org>;\n Tue, 14 Apr 2026 08:33:07 +0000 (UTC)","from BL0PR03CU003.outbound.protection.outlook.com\n (mail-eastusazlp170120007.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c101::7])\n by smtp2.osuosl.org (Postfix) with ESMTPS id D8B2C401EA\n for <dev@openvswitch.org>; Tue, 14 Apr 2026 08:33:06 +0000 (UTC)","from DS0PR12MB7727.namprd12.prod.outlook.com (2603:10b6:8:135::5) by\n PH0PR12MB7862.namprd12.prod.outlook.com (2603:10b6:510:26d::9) with\n Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9818.20; Tue, 14 Apr 2026 08:33:01 +0000","from DS0PR12MB7727.namprd12.prod.outlook.com\n ([fe80::7314:dd8a:a3fe:a835]) by DS0PR12MB7727.namprd12.prod.outlook.com\n ([fe80::7314:dd8a:a3fe:a835%4]) with mapi id 15.20.9818.017; Tue, 14 Apr 2026\n 08:33:01 +0000"],"X-Virus-Scanned":["amavis at osuosl.org","amavis at osuosl.org"],"X-Comment":"SPF check N/A for local connections - client-ip=140.211.9.56;\n helo=lists.linuxfoundation.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=<UNKNOWN> ","DKIM-Filter":["OpenDKIM Filter v2.11.0 smtp1.osuosl.org D7CAD84C64","OpenDKIM Filter v2.11.0 smtp2.osuosl.org D8B2C401EA"],"Received-SPF":"Pass (mailfrom) identity=mailfrom;\n client-ip=2a01:111:f403:c101::7;\n helo=bl0pr03cu003.outbound.protection.outlook.com;\n envelope-from=elibr@nvidia.com; receiver=<UNKNOWN>","DMARC-Filter":"OpenDMARC Filter v1.4.2 smtp2.osuosl.org D8B2C401EA","ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=jJin5ZQihKApZUlE91nKpYQXFGbdctuSU7PwEH6NmNI0/hdfPPOalscZY8p2FBTY8nAKfX/n6JUvXucog1vUE2oUfLiAgR7aDQ5qH0adaiqNi5kCOKxrnXwjWfptiNniBSr5e/UVaipcy0m9bWYc9Ne9nUy/nj4Cg6vAkEe/S+27PEPgLw/3XqqSWnN4bzVC/D84CzpqwtAFswZgkkRCEcxdX69NPXBIOChyvXlmReWqfwLISaPonSkBUCg2RF6jeG5UbI1boK+HrL2F17HB6zFX1JTATE34Bohen0eQQAb/ULdE/24fJmKFaidOQeK1FoJuYoOFWuM5Y5790uaatQ==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=YPyNucYADLwySDWQXU/4W76EuUNd+uWtfVmEy82NoIM=;\n b=QjvhcBk6gL48xApOShyxrV82VeHZkDR/2oh+PjtMz6zRgsokd9et5RgnTDRf+uyisfA5qG+LUXU9vc+oRHFu4FhYBhrYhFG7Yd3x7CHzxRxwTwgdLLVNDWnwT7SfBDHdAUhXkQrCKMZCj75O1uZVh73RjerVzMB9zeeOK+flm69b1nmu+cPvY9cfrw+qjrqnNL4aWNnXlihHODcXOUUTblb9grniLxNvhpT/HmTsBB/X/i2dHHg4TalULo9jbqear96UxlRIMilREJRqRgRwNkVNibMHN+QAKmJsCdp8RCKOonW1Tfq2Qm3u48eCfVKbZ4PZ7+3oUlEb6ofWyhNVBA==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com;\n dkim=pass header.d=nvidia.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=YPyNucYADLwySDWQXU/4W76EuUNd+uWtfVmEy82NoIM=;\n b=kCdExhNNfmlKC5vCoNQJVaeztbF6Su3EfuLfTBnqcmRf1MCZf5fYY4RRskZ7bvuv4M1kEygNjMeMUVhpAmH0Vj7CdDxwb9qTefu3vs2/vLgDN/92IuKanHPb8hys8c628i7K3xhV24UQipVCwdlW3w4wHN4S6A5ArshdqMxcabU5DWCKxqnORLEgZBSWMOZlx8UUt+36rg922UzpKxkh+1RyK1GwuQDL9S76hM7az8HVv1iuazmSwfYgPBZGdibshlhZS/pxb/BaTDGeVx7O3fLiTTkqO76qweLDEWYe5h6q8+SvskQ0kf/iXFJ3YDOGwgUhKR0yAzG4CKpWsezkrw==","Message-ID":"<33635018-d23e-4c85-b222-df9303e76553@nvidia.com>","Date":"Tue, 14 Apr 2026 11:32:56 +0300","User-Agent":"Mozilla Thunderbird","To":"Eelco Chaudron <echaudro@redhat.com>, dev@openvswitch.org","References":"\n <064056082074ce5b7aabb5a81a023889fe57ed4f.1775660802.git.echaudro@redhat.com>","Content-Language":"en-US","In-Reply-To":"\n <064056082074ce5b7aabb5a81a023889fe57ed4f.1775660802.git.echaudro@redhat.com>","X-ClientProxiedBy":"TL2P290CA0015.ISRP290.PROD.OUTLOOK.COM\n (2603:1096:950:2::18) To DS0PR12MB7727.namprd12.prod.outlook.com\n (2603:10b6:8:135::5)","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"DS0PR12MB7727:EE_|PH0PR12MB7862:EE_","X-MS-Office365-Filtering-Correlation-Id":"2f3712f2-20f7-4429-4d6b-08de9a007080","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;\n ARA:13230040|376014|366016|1800799024|56012099003|18002099003|22082099003;","X-Microsoft-Antispam-Message-Info":"\n KqU1eqYbhq213xY5GRUe2VR6MuuHviRMKEiVCMxA0NBwf4BbwB6QAsXNXGmARpuMMA32xa96HWyMu+4Xbx3I4AVajuUgZFqHsB4BKf81PiIwB8D7mEq9q5GqC3105+D3LbWIrfoqDluMONiQMc6H505DQhutqIBahv5xAh0MzGbaWJG5T2Pn5V146NRWWE28mTQ3vNNW1V9Whli8P5xzVndBew87pd/H4kPcSmf4VogrLSfabFVXclulLXeEvKBiYIVK/JcYQ7COJknMjOXxhQBpD990O6TAgUWCdUxilPLEvJtM9uX+j6OyjdtHhCiDULv3VGEbjQBq+LSQqMR5e3dKXgjfKt0URwqx6uqmjt2IWV8bIMDkCXNg5OOUTpiVB+FfUpEWcLazzofcjCmstvVwk0a88Vf99X3LJBQ1D58ns1BNFqva9ZdzL20j+9uLvm8f3Vg7gNPqT0LCESCPGsRMtzp9vxLMaFRE2nLxZdX040i8tP/ol3mRae12XDnn+6WhZRWRmHrw2XAn2L3ohJqcrgfAy57ZUc01su3JIa56iWG2zc57bZOdDRhysgf9hA5EN3BXwrKItT6yhdM2WT94Jdkvr+u5r8GOEHlCxF7bVeByaGjj1mkTSHRwi6PMMSL2KFpuTgnlZ8V0IZWmdS60oSHY2A028+1rBlC4bIRxPz4Iv1zgBhYdSYybeg74Bq/LrzN3f6LWIpZMSt5GRW1WEE26gEUaywPCBVj+Okg=","X-Forefront-Antispam-Report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:DS0PR12MB7727.namprd12.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230040)(376014)(366016)(1800799024)(56012099003)(18002099003)(22082099003);\n DIR:OUT; SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"=?utf-8?q?ZxCx0gkby4JDQHPUFv898UgUZ4mB?=\n\t=?utf-8?q?Aa45BdsiJBj8RAGG0gtt+dvMNahoCJvHWgWQ6RUkMMdcx1A5k3cZiQ4HDZ9qdbqos?=\n\t=?utf-8?q?YnNLTanWFryOH7NiORUAP22cS5c8kKVzyjVQlT3JDsVy85XToE+IAzEen2YwG+BQJ?=\n\t=?utf-8?q?rhw3hX6ULVhyVXaQ7X6oWRpripctAAgX0fCmwqe+oAM/UqryTMycYPOrkcwyTJLWq?=\n\t=?utf-8?q?td9/sKmRM50PJBdxx7pTvpehndfaN8k9BLjYojIpbbuU4Ku9gd0J5nW/G78Kb4QpC?=\n\t=?utf-8?q?zALflPCIvCdX/8A81Gq6s/ekdgTz6P3ULsor0OhYx6fDKDzGZttZoCGR0Wj7/pskD?=\n\t=?utf-8?q?tCpPuk4F2C9kfuQKAZhDlxic0XBY2naS6aYRP+JCB6ba9mLhNArmwIcjWtrfRPj2A?=\n\t=?utf-8?q?yI4zVEkxR1eMlP4xVniQMzU7AfpOvqR0VJG782TOQpFUqiQy9LsOPwmqRTv6i23nc?=\n\t=?utf-8?q?UqVEpOuyiXfZk4L/S+tWJQXl/SzRB6ai9o3Mx9Iqb1Dgj5s2MzP7l7pU9URFwfdi5?=\n\t=?utf-8?q?QGJbosnXocI+AMIEMstMAfhQz+1Fhf58fT3xUz0PRkD7Zgty4ExCWrCKe/Y0mRsn/?=\n\t=?utf-8?q?8qg5URkJu9dZSygU/JxTCSEz8skgbS4nNB1MWMweAVV7Z4lUYG6rvn6ZFNflEeqfm?=\n\t=?utf-8?q?gwuNXB+X+HkK3cfz3I3Wpu9OsxnjXRY6VMvdZIeCdA1IR7shEBqg1p2iHfjUXEuG3?=\n\t=?utf-8?q?fVdCi2RT/Z5UrMP7J5+9SB89cH6kY3g8+bZD6o65MyE3pMAG9QykECB2zako0sSoW?=\n\t=?utf-8?q?PaYS+MGy497oUce312SkGwnxVgvVd/XI/yI4CdEfCANPf+DolowvOp1C1dIpPz2Xy?=\n\t=?utf-8?q?5fY13ogg4fGehIW13aASi24ccL23YB2tka6ApKLeIjceuV+dcbS/a4YteP0k3lNBe?=\n\t=?utf-8?q?MLGX36zCuhJ0jswhw/cKlcfbvN+lPAdWbfQqI6dhs8PkH+9LARX09TsIE9L8/k/aJ?=\n\t=?utf-8?q?3I5Q88vjSFQME0cGmccNh+6vn8DzvlGtmfjQZxXw2CxkKzR7P4JhnwZQZHJgz1a9e?=\n\t=?utf-8?q?/47LRw0o4SFp1QYTRUI/3p1AJm6biNC8v1BQmycIUfuuMgqiJ1MBux7FnlkAvSfJ1?=\n\t=?utf-8?q?N8+06UPME+QiZ8WS73Nj6ZJqT82EZrbydnzdMvYptVqpjuXP5BQuobWCsS5CSKKqp?=\n\t=?utf-8?q?0se3mxF5pmPqigohV2zscav/nqnL63f2i57wbP2HaD2YH8kKDQ4o6BZwBidFKs3f/?=\n\t=?utf-8?q?deO3VKVXJNdQ777ZE11swbw7x+I8i3iXXaG/t17cnpoQbUfLrpcYcOlGqeI4VwFX+?=\n\t=?utf-8?q?mSpfBtHUBfaK0AwKG+3N21R7wDCoGLzxIqeUCFQJ/33Jvo7xV77Mz3zJ5m8U7skxU?=\n\t=?utf-8?q?zXeCGsYGsvGIjnKSW2PLc3dNBMiW5F30bZgNTuhgyNiZ+Et1grvMpLRsMgKAQymlO?=\n\t=?utf-8?q?kdImw9kYxwFM7CyVrPmHcwUgMXydgtvo48NLwYYoJQIyCc6ab+ieOwkEbC+TjOwX9?=\n\t=?utf-8?q?77A7IYyU3fc+WDdxXlIiBu8DHezefg9OWxfaFr+gHL8aqO8x6VJ/Dli6DNA1/2VvS?=\n\t=?utf-8?q?joKcnmkgrO61Xg6KXQ6zUjF8SMiIzOxcYU/GbWfqjHMN+2wHfEa/8RiA3Crk6qe2O?=\n\t=?utf-8?q?dJMCIYaLy2QylMDI/RTBvpWzqaMz03qS5m/Th3CVzvg8wnaTmg3/4toKE25VeQwKf?=\n\t=?utf-8?q?G1Nf2KM5BNjegjqgKjqb7H9j+H3FHGLw=3D=3D?=","X-OriginatorOrg":"Nvidia.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 2f3712f2-20f7-4429-4d6b-08de9a007080","X-MS-Exchange-CrossTenant-AuthSource":"DS0PR12MB7727.namprd12.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"14 Apr 2026 08:33:01.4878 (UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"43083d15-7273-40c1-b7db-39efd9ccc17a","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"\n GSjeQSq0W4ChrdM/2VLYdkBSHL84wgfjspNx31q7zA+JKVOfK/NmYQiaX7rVbV0sy+r/I/drk2YQNJngrEechA==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"PH0PR12MB7862","Subject":"Re: [ovs-dev] [PATCH v2] tests: Rework DPDK offload tests to use a\n simpler interface argument.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","From":"Eli Britstein via dev <ovs-dev@openvswitch.org>","Reply-To":"Eli Britstein <elibr@nvidia.com>","Content-Transfer-Encoding":"7bit","Content-Type":"text/plain; charset=\"us-ascii\"; Format=\"flowed\"","Errors-To":"ovs-dev-bounces@openvswitch.org","Sender":"\"dev\" <ovs-dev-bounces@openvswitch.org>"}},{"id":3677581,"web_url":"http://patchwork.ozlabs.org/comment/3677581/","msgid":"<95C02FA7-7B0B-49AD-A1C7-A90483E3263E@redhat.com>","list_archive_url":null,"date":"2026-04-15T10:17:21","subject":"Re: [ovs-dev] [PATCH v2] tests: Rework DPDK offload tests to use a\n simpler interface argument.","submitter":{"id":70613,"url":"http://patchwork.ozlabs.org/api/people/70613/","name":"Eelco Chaudron","email":"echaudro@redhat.com"},"content":"On 14 Apr 2026, at 10:32, Eli Britstein wrote:\n\n> On 08/04/2026 18:06, Eelco Chaudron wrote:\n>> External email: Use caution opening links or attachments\n>>\n>>\n>> This patch refactors the DPDK offload test infrastructure to simplify\n>> the interface configuration.  Instead of using OVS_DPDK_VF_PCI_ADDRS\n>> with a space-separated list of PCI addresses and VF indices (e.g.,\n>> \"0000:17:00.0,0 0000:17:00.0,1\"), the tests now use OVS_PF_PCI\n>> with a single PF address (e.g., \"0000:17:00.0\") and derive VF\n>> information from sysfs.\n>\n> Hi Eelco\n>\n> Thanks for this. Just a few nits below.\n\nThanks for reviewing, Eli! I'll send out a v3; see comments on\nyour comments below :)\n\n//Eelco\n\n>>\n>> Signed-off-by: Eelco Chaudron <echaudro@redhat.com>\n>> ---\n>> Changes to v2:\n>> - Use PCI address rather than port name, so other blades might\n>>    be supported.\n>> - Moved/renamed shell helpers.\n>> - Updated documentation.\n>> ---\n>>   Documentation/topics/testing.rst     |  25 ++++---\n>>   tests/system-common-macros.at        |  89 ++++++++++++++++++++++\n>>   tests/system-dpdk-offloads-macros.at | 108 ++++-----------------------\n>>   3 files changed, 120 insertions(+), 102 deletions(-)\n>>\n>> diff --git a/Documentation/topics/testing.rst b/Documentation/topics/testing.rst\n>> index deb6088d7..9cb9e0b5b 100644\n>> --- a/Documentation/topics/testing.rst\n>> +++ b/Documentation/topics/testing.rst\n>> @@ -306,19 +306,26 @@ Userspace datapath with DPDK offload\n>>\n>>   To invoke the userspace datapath tests with DPDK and its rte_flow offload,\n>>   the same prerequisites apply as above. In addition, six Virtual Function (VF)\n>> -interfaces must be preconfigured and capable of hardware offloading traffic\n>> -between each other.\n>> +interfaces must be preconfigured on a single Physical Function (PF) that\n>> +supports rte_flow hardware offload.\n>>\n>> -These six VFs need to be passed as a list of PF PCI addresses with their\n>> -corresponding VF indexes in the OVS_DPDK_VF_PCI_ADDRS variable.\n>> -For example::\n>> +This is an example on how to set this up for an NVIDIA blade on port\n>> +``ens2f0np0``::\n>>\n>> -    OVS_DPDK_VF_PCI_ADDRS=\"0000:17:00.0,0 0000:17:00.0,1 0000:17:00.0,2 0000:17:00.0,3 0000:17:00.0,4 0000:17:00.0,5\"\n>> +    OVS_PF_PORT=ens2f0np0\n>> +    OVS_PF_PCI=$(basename $(readlink /sys/class/net/$OVS_PF_PORT/device))\n>\n> Mentioning \"OVS_PF_PORT\", though just here for explaining how to configure VFs might be confusing for the user.\n>\n> I think we can leave it to the user to figure out the PCI address of the port, and drop those 2 lines.\n\nYou would be surprised how often I get the PCI question... But I\nwill move the interface name directly into the OVS_PF_PCI definition.\n\n>> +    echo 0 > /sys/bus/pci/devices/$OVS_PF_PCI/sriov_numvfs\n>> +    devlink dev eswitch set pci/$OVS_PF_PCI mode switchdev\n>> +    echo 6 > /sys/bus/pci/devices/$OVS_PF_PCI/sriov_numvfs\n>>\n>> -To invoke the dpdk offloads testsuite with the userspace datapath, run::\n>> +This PF's PCI ID needs to be passed with the OVS_PF_PORT variable.\n> s/OVS_PF_PORT/OVS_PF_PCI\n\nACK\n\n>> +To invoke the DPDK offloads testsuite with the userspace datapath, run::\n>>\n>> -    make check-dpdk-offloads \\\n>> -        OVS_DPDK_VF_PCI_ADDRS=\"0000:17:00.0,0 0000:17:00.0,1 0000:17:00.0,2 0000:17:00.0,3 0000:17:00.0,4 0000:17:00.0,5\"\n>> +    make check-dpdk-offloads OVS_PF_PCI=0000:17:00.0\n>> +\n>> +.. note::\n>> +   This has only been tested on NVIDIA blades due to the limited availability\n>> +   of other blades that support rte_flow.\n>>\n>>   Userspace datapath: Testing and Validation of CPU-specific Optimizations\n>>   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n>> diff --git a/tests/system-common-macros.at b/tests/system-common-macros.at\n>> index e4862231a..90a34b406 100644\n>> --- a/tests/system-common-macros.at\n>> +++ b/tests/system-common-macros.at\n>> @@ -409,3 +409,92 @@ m4_define([OVS_CHECK_PSAMPLE],\n>>   # OVS_CHECK_XT()\n>>   m4_define([OVS_CHECK_XT],\n>>       [AT_SKIP_IF([test $HAVE_IPTABLES = no && test $HAVE_NFT = no])])\n>> +\n>> +OVS_START_SHELL_HELPERS\n>> +\n>> +# ovs_get_vf_netdev(<PF_PORT_PCI>, <VF_INDEX>)\n>> +#\n>> +# This function tries to find the VF's netdev for the given PF's VF index.\n>> +#\n>> +ovs_get_vf_netdev() {\n> s/netdev/port?\n\nACK\n\n>> +    PF_PCI=$1\n>> +    VF_IDX=$2\n> local? also in other functions\n\nDone for shell functions.\n\n>> +\n>> +    vf_net_dir=\"/sys/bus/pci/devices/$PF_PCI/virtfn$VF_IDX/net\"\n>> +    if test ! -d \"$vf_net_dir\"; then\n>> +        return 1\n>> +    fi\n>> +\n>> +    vf_name=$(ls \"$vf_net_dir\" 2>/dev/null | head -1)\n>> +    if test -z \"$vf_name\"; then\n>> +        return 2\n>> +    fi\n>> +\n>> +    echo \"$vf_name\"\n>> +    return 0\n>> +}\n>> +\n>> +# ovs_get_representor_netdev(<PF_PORT_PCI>, <VF_INDEX>)\n>> +#\n>> +# This function tries to find the representor's netdev for the given PF's VF\n>> +# index.\n>> +#\n>> +ovs_get_representor_netdev() {\n>> +    PF_PCI=$1\n>> +    VF_IDX=$2\n>> +\n>> +    representor=$(grep -l \"vf$VF_IDX$\" \\\n>> +                  /sys/bus/pci/devices/$PF_PCI/net/*/phys_port_name \\\n>> +                  2>/dev/null | head -1)\n>> +    if test -z \"$representor\"; then\n>> +        return 2\n>> +    fi\n>> +\n>> +    basename $(dirname \"$representor\")\n>> +    return 0\n>> +}\n>> +\n>> +# ovs_verify_pf_cfg(<PF_PORT_PCI>)\n>> +#\n>> +# Verify that the given PF port exists and that the required VFs are properly\n>> +# configured, i.e. have representor ports.\n>> +#\n>> +ovs_verify_pf_cfg() {\n>> +    PF_PCI=$1\n>> +    VF_NAMES=()\n>> +    REPRESENTOR_NAMES=()\n>> +    PCI_REGEX=[[0-9a-fA-F]]{4}:[[0-9a-fA-F]]{2}:[[0-9a-fA-F]]{2}\\.[[0-7]]\n>> +\n>> +    echo \"$PF_PCI\" | grep -E -q \"^$PCI_REGEX$\" || return 1\n>> +\n>> +    for i in {0..5}; do\n>> +        # Get VF netdev using PCI path\n>> +        vf_net_dir=\"/sys/bus/pci/devices/$PF_PCI/virtfn$i/net\"\n>> +        if test ! -d \"$vf_net_dir\"; then\n>> +            return 2\n>> +        fi\n>> +\n>> +        vf_name=$(ls \"$vf_net_dir\" 2>/dev/null | head -1)\n>> +        if test -z \"$vf_name\"; then\n>> +            return 3\n>> +        fi\n>> +        VF_NAMES+=($vf_name)\n>> +\n>> +        # Find representor port for this VF\n>> +        representor=$(grep -l \"vf$i$\" \\\n>> +                      /sys/bus/pci/devices/$PF_PCI/net/*/phys_port_name \\\n>> +                      2>/dev/null | head -1)\n>> +        if test -z \"$representor\"; then\n>> +            return 4\n>> +        fi\n>> +        REPRESENTOR_NAMES+=($(basename $(dirname \"$representor\")))\n>> +    done\n>> +\n>> +    if test \"${#VF_NAMES[*]}\" -lt 6 -o \"${#REPRESENTOR_NAMES[*]}\" -lt 6; then\n>> +        return 5\n>> +    fi\n>> +\n>> +    return 0\n>> +}\n>> +\n>> +OVS_END_SHELL_HELPERS\n>> diff --git a/tests/system-dpdk-offloads-macros.at b/tests/system-dpdk-offloads-macros.at\n>> index ff7a6e095..1ea089290 100644\n>> --- a/tests/system-dpdk-offloads-macros.at\n>> +++ b/tests/system-dpdk-offloads-macros.at\n>> @@ -54,10 +54,8 @@ m4_define([CHECK_NO_DPDK_OFFLOAD],\n>>   #\n>>   m4_define([OVS_DPDK_OFFLOAD_PRE_CHECK], [\n>>     OVS_DPDK_PRE_CHECK()\n>> -  AT_SKIP_IF(\n>> -    [test \"$(printf '%s' \"$OVS_DPDK_VF_PCI_ADDRS\" | wc -w)\" -ne 6])\n>> -\n>> -  AT_SKIP_IF([! ovs_dpdk_verify_vf_cfg \"$OVS_DPDK_VF_PCI_ADDRS\"])\n>> +  AT_SKIP_IF([test -z \"$OVS_PF_PCI\"])\n>> +  AT_SKIP_IF([! ovs_verify_pf_cfg \"$OVS_PF_PCI\"])\n>>   ])\n>>\n>>   # OVS_TRAFFIC_VSWITCHD_START([vsctl-args], [vsctl-output], [dbinit-aux-args])\n>> @@ -114,39 +112,38 @@ $1\";/mlx5_net: Failed to update link status: /d\"])\n>>   m4_define([ADD_VF],\n>>       [ USER_PORT=$1\n>>         case \"$USER_PORT\" in\n>> -        client) PORT_NO=0 ;;\n>> -        server) PORT_NO=1 ;;\n>> -        *) PORT_NO=${USER_PORT##*[!0-9]} ;;\n>> +        client) VF_IDX=0 ;;\n>> +        server) VF_IDX=1 ;;\n>> +        *) VF_IDX=${USER_PORT##*[!0-9]} ;;\n>>         esac\n>>\n>> -      AT_CHECK([[[ \"$PORT_NO\" -ge 0 ]] && [[ \"$PORT_NO\" -le 6 ]] || return 66])\n>> -      PORT_CFG=$(echo $OVS_DPDK_VF_PCI_ADDRS | cut -d' ' -f$((PORT_NO+1)))\n>> -      PF_PCI=$(ovs_dpdk_get_pci_id \"$PORT_CFG\")\n>> -      VF_IDX=$(ovs_dpdk_get_vf_idx \"$PORT_CFG\")\n>> -      REP=$(ovs_dpdk_get_representor_netdev $PF_PCI $VF_IDX)\n>> -      AT_CHECK([test $? -eq 0])\n>> +      AT_CHECK([[[ \"$VF_IDX\" -ge 0 ]] && [[ \"$VF_IDX\" -le 5 ]] || return 66])\n>> +\n>> +      VF=$(ovs_get_vf_netdev $OVS_PF_PCI $VF_IDX)\n>> +      AT_CHECK([test -n \"$VF\"])\n>>\n>> -      AT_CHECK([ip link set $REP name $1])\n>> +      AT_CHECK([ip link set $VF down])\n>> +      AT_CHECK([ip link set $VF name $1])\n>>         AT_CHECK([ip link set $1 netns $2])\n>>         AT_CHECK([ovs-vsctl add-port $3 ovs-$1 -- \\\n>>                   set interface ovs-$1 external-ids:iface-id=\"$1\" -- \\\n>>                   set interface ovs-$1 type=dpdk -- \\\n>>                   set interface ovs-$1 \\\n>> -                  options:dpdk-devargs=$PF_PCI,representor=vf$VF_IDX])\n>> +                  options:dpdk-devargs=$OVS_PF_PCI,representor=vf$VF_IDX])\n>>         NS_CHECK_EXEC([$2], [ip addr add $4 dev $1 $7])\n>>         NS_CHECK_EXEC([$2], [ip link set dev $1 up])\n>>         if test -n \"$5\"; then\n>>           NS_CHECK_EXEC([$2], [ip link set dev $1 address $5])\n>>         else\n>>           NS_CHECK_EXEC([$2],\n>> -                      [ip link set dev $1 address 02:00:00:00:EC:0$PORT_NO])\n>> +                      [ip link set dev $1 address 02:00:00:00:EC:0$VF_IDX])\n>>         fi\n>>         if test -n \"$6\"; then\n>>           NS_CHECK_EXEC([$2], [ip route add default via $6])\n>>         fi\n>>         on_exit \"ip netns exec $2 ip link set $1 netns 1; \\\n>> -               ip link property del dev $1 altname $REP; \\\n>> -               ip link set $1 name $REP\"\n>> +               ip link property del dev $1 altname $VF; \\\n>> +               ip link set $1 name $VF\"\n>>       ]\n>>   )\n>>   m4_define([ADD_VETH], [ADD_VF($@)])\n>> @@ -159,78 +156,3 @@ m4_define([DUMP_DP_IP_CLEAN_SORTED], [dnl\n>>     grep 'eth_type(0x0800)' \\\n>>       | sed -e 's/eth(src=[[a-z0-9:]]*,dst=[[a-z0-9:]]*)/eth(macs)/;s/recirc_id(0),//' \\\n>>       | strip_used | strip_ptype | sort])\n>> -\n>> -OVS_START_SHELL_HELPERS\n>> -\n>> -# ovs_dpdk_is_valid_pci_vf_addr()\n>> -#\n>> -# Check if the given PF PCI address and the VF number are valid.\n>> -#\n>> -ovs_dpdk_is_valid_pci_vf_addr() {\n>> -    PCI_ID='[[0-9a-fA-F]]{4}:[[0-9a-fA-F]]{2}:[[0-9a-fA-F]]{2}\\.[[0-7]]'\n>> -    echo \"$1\" | grep -E -q \"^$PCI_ID,[[0-9]]+$\" && return 0 || return 1\n>> -}\n>> -\n>> -# ovs_dpdk_get_pci_id()\n>> -#\n>> -ovs_dpdk_get_pci_id() {\n>> -    printf '%s\\n' \"${1%%,*}\"\n>> -}\n>> -\n>> -# ovs_dpdk_get_vf_idx()\n>> -#\n>> -ovs_dpdk_get_vf_idx() {\n>> -    printf '%s\\n' \"${1##*,}\"\n>> -}\n>> -\n>> -# ovs_dpdk_get_representor_netdev(<PF_PCI>, <VF_INDEX>)\n>> -#\n>> -# This function tries to find the representor netdev for the given PF's VF.\n>> -#\n>> -ovs_dpdk_get_representor_netdev() {\n>> -    PF_PCI=$1\n>> -    VF_IDX=$2\n>> -\n>> -    VF_NET_DIR=\"/sys/bus/pci/devices/$PF_PCI/virtfn$VF_IDX/net\"\n>> -\n>> -    if [[ ! -d \"$VF_NET_DIR\" ]]; then\n>> -        echo \"ERROR: VF $VF_IDX for PF $PF_PCI does not exist\" >&2\n>> -        return 1\n>> -    fi\n>> -\n>> -    for iface in \"$VF_NET_DIR\"/*; do\n>> -        if [[ -e \"$iface\" ]]; then\n>> -            basename \"$iface\"\n>> -            return 0\n>> -        fi\n>> -    done\n>> -\n>> -    echo \"ERROR: No representor netdev found for VF $VF_IDX on PF $PF_PCI\" >&2\n>> -    return 1\n>> -}\n>> -\n>> -# ovs_dpdk_verify_vf_cfg()\n>> -#\n>> -# Verify that the given PF PCI addresses and corresponding VF IDs in\n>> -# OVS_DPDK_VF_PCI_ADDRS are valid, exist, and have corresponding\n>> -# representor ports.\n>> -#\n>> -ovs_dpdk_verify_vf_cfg() {\n>> -    i=0\n>> -\n>> -    for addr in $1; do\n>> -        ovs_dpdk_is_valid_pci_vf_addr \"$addr\" || return 1\n>> -\n>> -        PCI_ID=$(ovs_dpdk_get_pci_id \"$addr\")\n>> -        VF_IDX=$(ovs_dpdk_get_vf_idx \"$addr\")\n>> -\n>> -        REP=$(ovs_dpdk_get_representor_netdev $PCI_ID $VF_IDX) || return 1\n>> -\n>> -        echo \"ovs-p$i: PF PCI $PCI_ID with VF $VF_IDX has representor $REP\"\n>> -        i=$((i + 1))\n>> -    done\n>> -\n>> -    return 0\n>> -}\n>> -\n>> -OVS_END_SHELL_HELPERS\n>> --\n>> 2.47.3\n>>","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","ovs-dev@lists.linuxfoundation.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=KlnSkH/N;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org\n (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org)","smtp3.osuosl.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key)\n header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=KlnSkH/N","smtp4.osuosl.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","smtp4.osuosl.org;\n dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com\n header.a=rsa-sha256 header.s=mimecast20190719 header.b=KlnSkH/N"],"Received":["from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fwcXJ5vs5z1yDF\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 20:17:36 +1000 (AEST)","from localhost (localhost [127.0.0.1])\n\tby smtp3.osuosl.org (Postfix) with ESMTP id 468646F7C5;\n\tWed, 15 Apr 2026 10:17:35 +0000 (UTC)","from smtp3.osuosl.org ([127.0.0.1])\n by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id KihlUlJcyUpQ; Wed, 15 Apr 2026 10:17:34 +0000 (UTC)","from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56])\n\tby smtp3.osuosl.org (Postfix) with ESMTPS id 1EF5B6F644;\n\tWed, 15 Apr 2026 10:17:34 +0000 (UTC)","from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id EEBE0C0549;\n\tWed, 15 Apr 2026 10:17:33 +0000 (UTC)","from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137])\n by lists.linuxfoundation.org (Postfix) with ESMTP id 4C228C0549\n for <dev@openvswitch.org>; Wed, 15 Apr 2026 10:17:32 +0000 (UTC)","from localhost (localhost [127.0.0.1])\n by smtp4.osuosl.org (Postfix) with ESMTP id 38C3549E7A\n for <dev@openvswitch.org>; Wed, 15 Apr 2026 10:17:31 +0000 (UTC)","from smtp4.osuosl.org ([127.0.0.1])\n by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id vsvQqiLrpUCe for <dev@openvswitch.org>;\n Wed, 15 Apr 2026 10:17:30 +0000 (UTC)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by smtp4.osuosl.org (Postfix) with ESMTPS id 001D349DFC\n for <dev@openvswitch.org>; Wed, 15 Apr 2026 10:17:29 +0000 (UTC)","from mail-ej1-f69.google.com (mail-ej1-f69.google.com\n [209.85.218.69]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-594-AzhJARKqOAWFJN36YBQbIA-1; Wed, 15 Apr 2026 06:17:27 -0400","by mail-ej1-f69.google.com with SMTP id\n a640c23a62f3a-b9c0bdea9faso525750066b.2\n for <dev@openvswitch.org>; Wed, 15 Apr 2026 03:17:27 -0700 (PDT)","from [10.44.32.39] (5920ab7b.static.cust.trined.nl. [89.32.171.123])\n by smtp.gmail.com with ESMTPSA id\n a640c23a62f3a-ba17341bdf6sm41063866b.1.2026.04.15.03.17.24\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Wed, 15 Apr 2026 03:17:24 -0700 (PDT)"],"X-Virus-Scanned":["amavis at osuosl.org","amavis at osuosl.org"],"X-Comment":"SPF check N/A for local connections - client-ip=140.211.9.56;\n helo=lists.linuxfoundation.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=<UNKNOWN> ","DKIM-Filter":["OpenDKIM Filter v2.11.0 smtp3.osuosl.org 1EF5B6F644","OpenDKIM Filter v2.11.0 smtp4.osuosl.org 001D349DFC"],"Received-SPF":"Pass (mailfrom) identity=mailfrom; client-ip=170.10.133.124;\n helo=us-smtp-delivery-124.mimecast.com; envelope-from=echaudro@redhat.com;\n receiver=<UNKNOWN>","DMARC-Filter":"OpenDMARC Filter v1.4.2 smtp4.osuosl.org 001D349DFC","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776248248;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=YYKD0c5Ye4qMCu15RJNr5kyOZnf9skjP3KmatPKKOs4=;\n b=KlnSkH/NAjcqIMVIiO+pWszCmi0PTmwyNJQNfHMbGdlrKryGdjBognI9IqhN0oktHuAQFI\n FPEsFvt1Hq5diIkq38uPZpJwTSL7e4ltL1xS/antRFLIwIv6O8bop9tm9XsFW4fS5kEXY1\n S6eCDN0y9GDg2Jek7bF14ZeAc2YUMFM=","X-MC-Unique":"AzhJARKqOAWFJN36YBQbIA-1","X-Mimecast-MFC-AGG-ID":"AzhJARKqOAWFJN36YBQbIA_1776248246","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776248246; x=1776853046;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=4GzHP2YC2UqEbMwjeJ3/xs7psJjXnfZrH61dLrwS068=;\n b=JehX8AtbN9XmRDVIlIIGXvdlvdn15WVbzgeo7X4eyBMMgWgq3cou8IiwhgpA5LdWx7\n eFsyM4S1K2+jJKDJHsGlLI/D+AlA1fMEPY/I0stbtwRsChlHxLEDod+cudSchjOnxYYA\n UXKXi8Upt0hErL1otijzbEjwDdJeogJkkcrRPmTUCWOoVDlAMxXN3qqMnFSdeylrjDlV\n WgpYzCy2rQxpkgm14evtANPx2zqFDRGAJ36xd8WWCYy0ofJGyCGypTux+cFx2Evfe01U\n W5f0vL8PzF0jH8xEWY+48CfS/YoFZi7QkWaU6kwmbj+zI9Pc14pHBz+5FTYp/VBOZyNS\n 1qDQ==","X-Gm-Message-State":"AOJu0YyjvGxQbGGXdPcuWMpwbOBoC4mNxi8w1ICMvTLarw2+A2CV4U7o\n OlDcT4rAGaCCDRXwdBUz/fjsRz8rOjcwkgnNe2MyLT9/AKrhP4UbS2KU213jEh5pmX9I+7kvYHD\n fA2HOkgwCt/N3DXbeFAILoi9ztiB4BLHgqxJaG5vWeSJShcxgctZ3YA==","X-Gm-Gg":"AeBDieusxY4Q8ZLmogxlzoQ2kOrW6dbWHtoz+/iaD/ZVMYGsRWI7bpBLaUWm9JASukj\n U2vPBeQjpl91YqLrDgkTsG5oc3+CbrOI02KI8elmsYaGhGBfbt6HbWfZ+lF6UMm9Hh6eB4UsA9m\n IEGwRuK++U5WIqeleRKDgKrluA01W7pN2vynUGo9oB/yM7Gkcnaej6lf7Exydp6uAoYT0U2y7IR\n Kq6tlpFFvMX9DHwQKwj8VfgCpobiZaU8Dr/CK5ulnXAiw17Nk2hzdlfbzA0zMs8/o7fse9rfY+5\n dYgDf8sYN27Pwrn+ZQ8gJKQ1zdcp7tOEtWvQeyIt772xEkq+/KNAue+BzT8b5D8hVseUa72WaWO\n s+siqnTzB/AB6slkC/34KKPqaEyu8yxQP4wh8y73r/3NckP8i4Akkw7WSWMvd35fXNLbcBQ==","X-Received":["by 2002:a17:907:c80f:b0:b9d:43a7:6c13 with SMTP id\n a640c23a62f3a-b9d7267b5d5mr1211294066b.41.1776248245841;\n Wed, 15 Apr 2026 03:17:25 -0700 (PDT)","by 2002:a17:907:c80f:b0:b9d:43a7:6c13 with SMTP id\n a640c23a62f3a-b9d7267b5d5mr1211292066b.41.1776248245054;\n Wed, 15 Apr 2026 03:17:25 -0700 (PDT)"],"To":"Eli Britstein <elibr@nvidia.com>","Cc":"dev@openvswitch.org","Date":"Wed, 15 Apr 2026 12:17:21 +0200","X-Mailer":"MailMate (2.0r6292)","Message-ID":"<95C02FA7-7B0B-49AD-A1C7-A90483E3263E@redhat.com>","In-Reply-To":"<33635018-d23e-4c85-b222-df9303e76553@nvidia.com>","References":"\n <064056082074ce5b7aabb5a81a023889fe57ed4f.1775660802.git.echaudro@redhat.com>\n <33635018-d23e-4c85-b222-df9303e76553@nvidia.com>","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"4HVOusxbMOf_8BIpwW1kkxVzEBMkx3XKzP609oS82bc_1776248246","X-Mimecast-Originator":"redhat.com","Subject":"Re: [ovs-dev] [PATCH v2] tests: Rework DPDK offload tests to use a\n simpler interface argument.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","From":"Eelco Chaudron via dev <ovs-dev@openvswitch.org>","Reply-To":"Eelco Chaudron <echaudro@redhat.com>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"ovs-dev-bounces@openvswitch.org","Sender":"\"dev\" <ovs-dev-bounces@openvswitch.org>"}}]