From patchwork Wed Mar 25 10:10:01 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Eli Britstein X-Patchwork-Id: 2215762 X-Patchwork-Delegate: aconole@redhat.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=DAFsZaXY; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4fgjNR5Yc3z1xy3 for ; Wed, 25 Mar 2026 21:11:03 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id AA4E641097; Wed, 25 Mar 2026 10:11:01 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id SK4mNSj38cCG; Wed, 25 Mar 2026 10:10:59 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org C05D4407E1 Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=DAFsZaXY Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTPS id C05D4407E1; Wed, 25 Mar 2026 10:10:59 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 99972C04E8; Wed, 25 Mar 2026 10:10:59 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id DDF03C04E7 for ; Wed, 25 Mar 2026 10:10:58 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id BEA78407E1 for ; Wed, 25 Mar 2026 10:10:58 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id hR9mZO9Md4Bj for ; Wed, 25 Mar 2026 10:10:58 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:c107::3; helo=ph0pr06cu001.outbound.protection.outlook.com; envelope-from=elibr@nvidia.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp4.osuosl.org D165840478 Authentication-Results: smtp4.osuosl.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org D165840478 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azlp170110003.outbound.protection.outlook.com [IPv6:2a01:111:f403:c107::3]) by smtp4.osuosl.org (Postfix) with ESMTPS id D165840478 for ; Wed, 25 Mar 2026 10:10:57 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iL0RUn5bicykYVwR7cdCIq14aB+sOgNLTMsbMONdgP5wgHPfYpJPori4JclvRro6njeeTu+o94+Bl2mBq9PrZqM/6xAwQSdOn0UkSxTi/ALV+GygchWWI5DpAr/0ST9ri3V9N6x7/SPvrXoNfrqCCvvqclPTPzE/ytJwZKpe34jlIbD72nu8sYumZO0GTLMTxzRRRBBKH+8jgT2Vnuy4PjrJcF+KNu8T3WCfLMc1ggVows9uhW29hriSnCHtr4340NEPmLUm0msSudeNCzsATb9rASruRcfddHvsHMW9AP/gTE6AmMbRh6BBr6TJkj6tuamX/gwlduzoEumkTDlRQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=BhR7hgk8VTfXqwEgaGx1AKQl+GnFGoLQbtGBG41vfmk=; b=TxtuFI4gp57XQCyvZDjC11W14wXagQMcr3LDZBwskcDlyLp1gO/VQityGODfwHuJOWU0Xadgd3VzrwGtzXbo+vWHxXGefAJKCwxsORK6u6Ln2zQ8lYanOL36itXTu3pHa4q0YRgeMnd4Sid8YekySCFy4TOcm8+lDIZuNNXHoRMHcIJzMQNklipsw7IfsEDw0Pwwdfgg1iUyHCxozsjSFGrV7OEuVA1l9O6Ny9ZSggDY6TutJRdFv4zXqgannvs7obbzCTdLHjk1mp1u+AU+FUFNNIybxp00IryDIPAjBTThaheIFk0zHw1EFgkYQnbzjgf1I1IULY9u+H+hXXH/wQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BhR7hgk8VTfXqwEgaGx1AKQl+GnFGoLQbtGBG41vfmk=; b=DAFsZaXYau6piRajs2VgVG1SLUcs0HERTtJKIqfHX/KYD0N01I2Vro8x0HaqusWQ0he1bp7f014X0dbSCmyHaeEHbxBI58Na2OPxIe81fgXHUSRetnFfZea1WlsKYjq6IASNVZC/s3PIYYCysoF0BOE9hNJorjYoCCe3z9C/aaV/TANAdj1B0/HqRIYhntlagJqkI8SawzQ0EqtxyydElxw9E01uZZz1NY3x6/au5gI4aFuGyb2Sv/HwBdnkVelbe4H6OOg93M3lop1ZdmBTN9Ksgoj8QatYsSL856piXEiZ2Fpy/7nzJVr8OhmvEOZsCDsME3LesRFME03z4KO+4g== Received: from BL0PR0102CA0017.prod.exchangelabs.com (2603:10b6:207:18::30) by PH7PR12MB6761.namprd12.prod.outlook.com (2603:10b6:510:1ab::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Wed, 25 Mar 2026 10:10:50 +0000 Received: from BL6PEPF0001AB72.namprd02.prod.outlook.com (2603:10b6:207:18:cafe::f9) by BL0PR0102CA0017.outlook.office365.com (2603:10b6:207:18::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9723.31 via Frontend Transport; Wed, 25 Mar 2026 10:10:50 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL6PEPF0001AB72.mail.protection.outlook.com (10.167.242.165) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.21 via Frontend Transport; Wed, 25 Mar 2026 10:10:47 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Wed, 25 Mar 2026 03:10:31 -0700 Received: from nvidia.com (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Wed, 25 Mar 2026 03:10:29 -0700 To: Date: Wed, 25 Mar 2026 12:10:01 +0200 Message-ID: <20260325101001.1642724-1-elibr@nvidia.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Originating-IP: [10.126.231.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB72:EE_|PH7PR12MB6761:EE_ X-MS-Office365-Filtering-Correlation-Id: f79dd710-8fe6-43d2-9218-08de8a56c92a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|82310400026|376014|36860700016|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: WO5UwFGSD6rovODYUhorYuz/F5Jk4eUWynqy0WOZc+kr7jDhZKvuS/ja9wyrFl+g4ggG48fkug/2TzH6uzy18A61Hau5X/vAyu2ECHHFFyWnkUGM7LqVE2h4H7P6uRL/XZs1qWf36HNvnlBQH/z3AsWhDLkjH+7i1ofRi8porma0GSxEkc7QG1E1m+vrCKgt+Gi8zsjlpzmBAg9DFR4vTQ7DK8U3BRX4/ZaZoYcjH93S0AVthjOW7ZRH8mxm57bGQXEpf8GEGmlP0AFPbZ6qjqQZD4wpA3IlCRsgCUW3eakyu3q+2CjeqxzGBgu+HWQi0IMzADVdj7hQYC70PioCURaK2jiCYJYklN7W4TTcLknHRmsWegFtSm0LoOcukHVAmRl4HGFZXfgJOZCtsgrBkKnRG26nvKUn1orDf/YEgIm9zGrsz0kDpvZFxIi265ky4bG9Egfj/QbmiXdZay3PuJfFxHf09bWsCiJBdwODFaiHUsd3zE36fgvOM106w7bPdVyJ1LJ6eiMVSmk0nD8tHuV2SBDou7HHhrdhsSZ7F/gHi6iZsGzuq5X3wXYxaAWOzJTMzvNABIavHGWDyWiGdIsxLhMNK5lujjWXWtzA9o0nJPjCxdjzIv3tlVAqcE3HzU71VV/1MP6gzzQqSEWO8Jf++Dm98iblu1cK+uhI0OaAOumhVv8z1RZJxxLVO31ecWWoYqrhdFhbjMHTDQuT1HenzXu6IRip9hXL++ZROFmBeHG3zs+Yk4VtaoHmRsYNyH8mtPpB+HjIF9FL/vaAeQ== X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(82310400026)(376014)(36860700016)(56012099003)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: UqgNqwADoRaKIEI0xyKg15S72xb5LT+pNxhaGTqjo+gJOFgjGV6UdH4sOWcmKvJWciwge+SONq2xzJfs62Ianbe4fTOr79LPVapERMeIAUnHGKlJJaDHeIQCacK6dMXuYwRdS/A9/aqyQuYN+auV2FIzanulL37NZs1Q3uj0uEsLDXPVDrVRsqi/C/AWeJfIGSRmbfyz1Hj87wc2XWur0uj9mg/LSZsU21ZJMN+zSYe0pxNODtK+d8mmrkFvGn8Q+dqHBtxfmbfxIkoIEC23H98wqfiISxGkzBtcWg0GyL6LCNrT4MgBsKbYi7e0XCdvBmpxVU/R3R3EdIoml7o9sUtlSCOU5ZExMrxnfTwasKzYS69S/NpUYPyuv/4gZuT1HmnINidSEud2t5MCyeMzC8sKwabokS23FkGNiGlV9rZtXUZM3L4ZEvyUh6CP6ikW X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2026 10:10:47.8113 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f79dd710-8fe6-43d2-9218-08de8a56c92a X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB72.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6761 Subject: [ovs-dev] [PATCH v1 1/1] dpif-netdev: Fix mega flow ufid collisions for different wild cards. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Eli Britstein via dev From: Eli Britstein Reply-To: Eli Britstein Cc: Emeel Hakim , Maor Dickman , Ilya Maximets Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Emeel Hakim dp_netdev_get_mega_ufid() computes a mega flow ufid by hashing the masked flow (flow & wildcard mask). The mega ufid is used as a key to the offload objects. If they are not unique, instead of 2 different offload rules, they will override each other. For example, consider two flows that share the same 5-tuple but differ only in TOS handling: - Flow A: tos=0x20, wildcard mask tos=0x00 -> masked tos=0x00 - Flow B: tos=0x00, wildcard mask tos=0xff -> masked tos=0x00 Both produce identical masked flows, so they get the same mega ufid, even though they belong to different megaflows (different wildcard masks). This can be triggered by an OpenFlow rule change while traffic is active: 1. Install a high-priority rule matching nw_tos=0 and a lower-priority catch-all ip, tcp rule. 2. Start TOS=0 traffic — flows match the nw_tos=0 rule and get an exact TOS mask (0xff). 3. Remove the nw_tos=0 rule — new flows now match the catch-all rule with TOS wild-carded (mask=0x00). 4. Start TOS=0x20 traffic — the masked TOS is 0x00 in both cases, producing the same mega ufid despite different wildcard masks. Fix this by taking into account not only the masked values but also the masks. Fixes: 241bad15d99a ("dpif-netdev: associate flow with a mark id") Signed-off-by: Emeel Hakim --- lib/dpif-netdev.c | 14 ++++++++++---- tests/dpif-netdev.at | 25 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 9df05c4c2..49f4fa2ac 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -3288,14 +3288,20 @@ out: static void dp_netdev_get_mega_ufid(const struct match *match, ovs_u128 *mega_ufid) { - struct flow masked_flow; + struct { + struct flow masked_flow; + struct flow wc; + } key; size_t i; + memset(&key, 0, sizeof key); for (i = 0; i < sizeof(struct flow); i++) { - ((uint8_t *)&masked_flow)[i] = ((uint8_t *)&match->flow)[i] & - ((uint8_t *)&match->wc)[i]; + ((uint8_t *)&key.masked_flow)[i] = ((uint8_t *)&match->flow)[i] & + ((uint8_t *)&match->wc)[i]; + ((uint8_t *)&key.wc)[i] = ((uint8_t *)&match->wc)[i]; } - odp_flow_key_hash(&masked_flow, sizeof masked_flow, mega_ufid); + + odp_flow_key_hash(&key, sizeof key, mega_ufid); } uint64_t diff --git a/tests/dpif-netdev.at b/tests/dpif-netdev.at index 231197970..b0eb9ea63 100644 --- a/tests/dpif-netdev.at +++ b/tests/dpif-netdev.at @@ -668,6 +668,31 @@ AT_CHECK([ovs-appctl revalidator/resume]) OVS_VSWITCHD_STOP AT_CLEANUP +AT_SETUP([dpif-netdev - mega flow ufid uniqueness for different wildcards]) +OVS_VSWITCHD_START( + [add-port br0 p1 \ + -- set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock \ + -- set bridge br0 datapath-type=dummy]) +AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg]) +AT_CHECK([ovs-appctl vlog/disable-rate-limit dpif_netdev]) + +AT_CHECK([ovs-appctl revalidator/pause]) +# Two flows with different wildcard masks but identical masked flow. +# Flow A: tos=0x20 with mask 0 (wildcarded) -> masked tos = 0 +# Flow B: tos=0x00 with exact match -> masked tos = 0 +AT_CHECK([ovs-appctl dpctl/add-flow "in_port(1),eth(),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=6,tos=0x20/0,ttl=64,frag=no),tcp(src=80,dst=8080)" "3"]) +AT_CHECK([ovs-appctl dpctl/add-flow "in_port(1),eth(),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=8080)" "3"]) + +AT_CHECK([ovs-appctl revalidator/resume]) + +# Verify both flows have different mega_ufids by checking flow_add log. +AT_CHECK([grep 'flow_add.*tcp(src=80,dst=8080)' ovs-vswitchd.log | sed -n 's/.*mega_ufid:\([[0-9a-f-]]*\).*/\1/p' | sort -u | wc -l | tr -d ' '], [0], [dnl +2 +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + AT_SETUP([dpif-netdev - check tx packet checksum offloading]) OVS_VSWITCHD_START( [add-port br0 p1 \