From patchwork Mon Sep 5 14:46:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eli Britstein X-Patchwork-Id: 1674324 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::138; helo=smtp1.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) 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=MKTodU6q; dkim-atps=neutral Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MLrvF2Wlxz1yhk for ; Tue, 6 Sep 2022 00:46:49 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 9107E81433; Mon, 5 Sep 2022 14:46:47 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 9107E81433 Authentication-Results: smtp1.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=MKTodU6q X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id EuQf5-vB9BdP; Mon, 5 Sep 2022 14:46:46 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTPS id 781F981430; Mon, 5 Sep 2022 14:46:45 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 781F981430 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 60D66C0033; Mon, 5 Sep 2022 14:46:45 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id B04B2C002D for ; Mon, 5 Sep 2022 14:46:43 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 2947F40917 for ; Mon, 5 Sep 2022 14:46:43 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 2947F40917 Authentication-Results: smtp4.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=MKTodU6q X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Y4xaC7p0n7Uj for ; Mon, 5 Sep 2022 14:46:41 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 959B240926 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2061.outbound.protection.outlook.com [40.107.244.61]) by smtp4.osuosl.org (Postfix) with ESMTPS id 959B240926 for ; Mon, 5 Sep 2022 14:46:41 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oXRG2IVH9frsGc1Pz2QVdUQIkc/au85XBAQ5Kpclw2Ueh3xWQoi4HUDG6mvVMQvtS4OUGJoOL08Fn6pKV3qwp90SKVarsEVVnmvt2Hmh0Zn42n0oM1FrOHg5IXxLWHb+d0bcGVHEK96SfYqYxpRt6GH3PoENuJz4h6JRYoewOR6Z+Xt3NmctGvaj7t2CXLCX6WafkFuRJX4qLYicDVh6sE3ZkPr+kxzJfWcwSFD7UJTHZUo7jpHWZD5i8zkRInLs4s/MnXGrLeK4kxIogoMPLrRT3XQsK2BjEzGJed5artjdyJMhZcyFYzob88B/ZEwyj+NZY1ugcJ1lqCMNu/Hs8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=vcplhizzj80alApUKNIOQNa1NwMwqZUm/+YJCITPFr0=; b=nh4Lv6ZSbyKKWh3eXeempiEC10RWCzvcb9exEOOsrcx41CM85v5G7OHDXWw7CN+nLvkyNnaL56MHOQWN0RfM8WGm77wid/FIE/lUdS54GH9d3gMkuNC0eC4nXLNsfS2yMgUx4edUY7qllKl5zquk5FWr0Z7Qs04wJhFGogflM7jpbmduFFn4DepEUzyLdoziLS48N6u/+siWI2J4uFM068rJmiMXgFdGhNtepZ9Ua1wRGpzgLfAUK2TR01o7lPu32iZjB5/ROB0N8hIH7PlzJVMR0yvHOfR+Q+H1QW4sY3X0nttcdITHGOGU+jYjktn9+3mY80dAtYHXhFqOBBOIsQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.238) smtp.rcpttodomain=163.com 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 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=vcplhizzj80alApUKNIOQNa1NwMwqZUm/+YJCITPFr0=; b=MKTodU6qL8OYWAa3MWiMDOHl4gzjbzvwQsbEZ7evMPA6HvDYUrlaFKypPfw+LYxs6nXBSDlrUzyDycA4FQXoz9Oa6WmP9w6M/RhrffJJr1GEVrkknevrwDWGuIs3uXYeP7k4HZKrJtlZqp1Psfz2IXlmHn6DSwVBx9XiVuA7DUeD9oH/Lip6nIdEwof+aToN8vHTJyEtmGT5h9B/jEuc8MJ5uuHS/LVgVKIx7wlhgW+UW0M/VilSNoM68RkFUZm2+iK5ZvRbo5TEx9XmxZ9f2uB7UP6VtuoHm3b1tKxxEYDvhMKGTTbe7OpzkHhn4YLUQAAKDyXtfTn4YjqJ8+SyJA== Received: from MWH0EPF00056D0B.namprd21.prod.outlook.com (2603:10b6:30f:fff2:0:1:0:b) by BY5PR12MB4323.namprd12.prod.outlook.com (2603:10b6:a03:211::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.10; Mon, 5 Sep 2022 14:46:38 +0000 Received: from CO1NAM11FT005.eop-nam11.prod.protection.outlook.com (2a01:111:f400:7eab::207) by MWH0EPF00056D0B.outlook.office365.com (2603:1036:d20::b) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5632.2 via Frontend Transport; Mon, 5 Sep 2022 14:46:38 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.238) 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 12.22.5.238 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.238; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (12.22.5.238) by CO1NAM11FT005.mail.protection.outlook.com (10.13.174.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5588.10 via Frontend Transport; Mon, 5 Sep 2022 14:46:38 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by DRHQMAIL105.nvidia.com (10.27.9.14) with Microsoft SMTP Server (TLS) id 15.0.1497.38; Mon, 5 Sep 2022 14:46:38 +0000 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.986.29; Mon, 5 Sep 2022 07:46:35 -0700 To: , Ilya Maximets Date: Mon, 5 Sep 2022 17:46:03 +0300 Message-ID: <20220905144603.3585105-2-elibr@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220905144603.3585105-1-elibr@nvidia.com> References: <20220905144603.3585105-1-elibr@nvidia.com> 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-Office365-Filtering-Correlation-Id: d2659c2e-6ac5-4fd3-db20-08da8f4d704f X-MS-TrafficTypeDiagnostic: BY5PR12MB4323:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: P+PamG6+HoZTCTBEOkN8l0y7DT9OYpLmLLzizie1AvBZSLE9dOe8BtGAflwyzfTY6e8mOszhaQgj3BltEI/wlivhY/YC0Mr9iWKnMioXCMlBvml97OyMromq0qr9IPHXHTDLstI27SSJTXNToMcyA0c5vbtQ7+kBijE9puLrR7stZCai1gHTaCM+mCVELj7RNthh7TeppqCvNHyW6qs6MGsPUZyLO9Yiu3mGsrx5/kG02gx4dq6Sqj+GAZL1zs0OFZQHCbB3vpJVVBgOkwVCHjtHsU4HAaopsKDMlGX8aNN8MbnhFfbPeU/PTuAj/mW5UjT4GBOja1LklpKz4R5ENB4oJSf4rk1D3HsqYqjFrI9MztY6hUHFPFcqNeNDVyut2NOTb5KGxus+C6Zh1vl89fQa0RFqdQxE/3huvIGhdGdMwWrgNMzhJYurcRHTDIkmHym8aZnizFqx3xc46bh1ozEg0DZPtDBwCjDHrD8ft5L9zVDRQZA5IMHeOCGBIsoiRw2wdkYm4mcPsevPywHdBSckt1comert0ib39dK5gV4+8Iws8rUrZDgFGONLnq5wM/lZW2FgHcVtPsY1Tr+ks/vdbzqgPWgG3DmzOz7K+DNdEYhAJqAriL3hB04+wRQk/8Wp9kKQQsr52eFgskF/e68DwH2aqcR8mBY1XBEx3hlD+ndNk8sIQj8X//2IFannwOFHpyWbRd3p9FcT16avOkOcqB4yB16ajxN075B1HxQ05OvQXWWjfTn5FI8JZIl8R/QKX2DqDj9V7kNfRZICIJuH3TfyFYWy+7skSyLODeM2cFpbUF7Uvyz2AJQEfpOB X-Forefront-Antispam-Report: CIP:12.22.5.238; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:InfoNoRecords; CAT:NONE; SFS:(13230016)(4636009)(136003)(39860400002)(376002)(346002)(396003)(46966006)(40470700004)(36840700001)(83380400001)(2616005)(1076003)(426003)(47076005)(5660300002)(2906002)(26005)(8936002)(40480700001)(186003)(41300700001)(6286002)(36756003)(86362001)(336012)(7696005)(107886003)(6666004)(16526019)(356005)(478600001)(81166007)(82310400005)(55016003)(8676002)(70206006)(70586007)(316002)(54906003)(110136005)(82740400003)(36860700001)(40460700003)(4326008)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Sep 2022 14:46:38.4788 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d2659c2e-6ac5-4fd3-db20-08da8f4d704f X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[12.22.5.238]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT005.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4323 Cc: wuxi_seu@163.com, Eli Britstein Subject: [ovs-dev] [PATCH 2/2] dpif-netdev: Fix flushing of a vport X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 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 Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" When using a userspace vport ("vxlan0"), dpif-netdev adds an additional netdev ("vxlan_sys_4789"). The dpif netdev ("vxlan0") is added to the netdev-offload ports map, thus flows are associated on this netdev. However, flushing is done on the dpif-netdev level ("vxlan_sys_4789"), and relevant offload flows are not destroyed. To fix it, add the datapath netdev to the netdev-offload ports map. In case there is no different internal netdev, use the dpif netdev, as before. Fixes: adbd4301a249 ("netdev-offload-dpdk: Use per-netdev offload metadata.") Signed-off-by: Eli Britstein Reviewed-by: David Marchand --- lib/dpif-netdev.c | 15 ++++++++++----- lib/dpif-netlink.c | 5 ++++- lib/dpif-provider.h | 5 +++-- lib/dpif.c | 8 +++++--- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index a45b46014..b251de881 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -536,7 +536,8 @@ static int get_port_by_name(struct dp_netdev *dp, const char *devname, static void dp_netdev_free(struct dp_netdev *) OVS_REQUIRES(dp_netdev_mutex); static int do_add_port(struct dp_netdev *dp, const char *devname, - const char *type, odp_port_t port_no) + const char *type, odp_port_t port_no, + struct netdev **datapath_netdev) OVS_REQ_WRLOCK(dp->port_rwlock); static void do_del_port(struct dp_netdev *dp, struct dp_netdev_port *) OVS_REQ_WRLOCK(dp->port_rwlock); @@ -1845,7 +1846,7 @@ create_dp_netdev(const char *name, const struct dpif_class *class, error = do_add_port(dp, name, dpif_netdev_port_open_type(dp->class, "internal"), - ODPP_LOCAL); + ODPP_LOCAL, NULL); ovs_rwlock_unlock(&dp->port_rwlock); if (error) { dp_netdev_free(dp); @@ -2112,7 +2113,7 @@ out: static int do_add_port(struct dp_netdev *dp, const char *devname, const char *type, - odp_port_t port_no) + odp_port_t port_no, struct netdev **datapath_netdev) OVS_REQ_WRLOCK(dp->port_rwlock) { struct netdev_saved_flags *sf; @@ -2128,6 +2129,9 @@ do_add_port(struct dp_netdev *dp, const char *devname, const char *type, if (error) { return error; } + if (datapath_netdev) { + *datapath_netdev = port->netdev; + } hmap_insert(&dp->ports, &port->node, hash_port_no(port_no)); seq_change(dp->port_seq); @@ -2157,7 +2161,7 @@ do_add_port(struct dp_netdev *dp, const char *devname, const char *type, static int dpif_netdev_port_add(struct dpif *dpif, struct netdev *netdev, - odp_port_t *port_nop) + odp_port_t *port_nop, struct netdev **datapath_netdev) { struct dp_netdev *dp = get_dp_netdev(dpif); char namebuf[NETDEV_VPORT_NAME_BUFSIZE]; @@ -2176,7 +2180,8 @@ dpif_netdev_port_add(struct dpif *dpif, struct netdev *netdev, } if (!error) { *port_nop = port_no; - error = do_add_port(dp, dpif_port, netdev_get_type(netdev), port_no); + error = do_add_port(dp, dpif_port, netdev_get_type(netdev), port_no, + datapath_netdev); } ovs_rwlock_unlock(&dp->port_rwlock); diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c index a620a6ec5..55d5a4593 100644 --- a/lib/dpif-netlink.c +++ b/lib/dpif-netlink.c @@ -1139,7 +1139,7 @@ dpif_netlink_rtnl_port_create_and_add(struct dpif_netlink *dpif, static int dpif_netlink_port_add(struct dpif *dpif_, struct netdev *netdev, - odp_port_t *port_nop) + odp_port_t *port_nop, struct netdev **datapath_netdev) { struct dpif_netlink *dpif = dpif_netlink_cast(dpif_); int error = EOPNOTSUPP; @@ -1152,6 +1152,9 @@ dpif_netlink_port_add(struct dpif *dpif_, struct netdev *netdev, error = dpif_netlink_port_add_compat(dpif, netdev, port_nop); } fat_rwlock_unlock(&dpif->upcall_lock); + if (datapath_netdev) { + *datapath_netdev = netdev; + } return error; } diff --git a/lib/dpif-provider.h b/lib/dpif-provider.h index 12477a24f..b79b10e6c 100644 --- a/lib/dpif-provider.h +++ b/lib/dpif-provider.h @@ -195,10 +195,11 @@ struct dpif_class { * ODPP_NONE, attempts to use that as the port's port number. * * If port is successfully added, sets '*port_no' to the new port's - * port number. Returns EBUSY if caller attempted to choose a port + * port number, and datapath_netdev to a potentially created netdev in the + * dpif-class level. Returns EBUSY if caller attempted to choose a port * number, and it was in use. */ int (*port_add)(struct dpif *dpif, struct netdev *netdev, - odp_port_t *port_no); + odp_port_t *port_no, struct netdev **datapath_netdev); /* Removes port numbered 'port_no' from 'dpif'. */ int (*port_del)(struct dpif *dpif, odp_port_t port_no); diff --git a/lib/dpif.c b/lib/dpif.c index 40f5fe446..2a1679ce5 100644 --- a/lib/dpif.c +++ b/lib/dpif.c @@ -586,6 +586,7 @@ dpif_port_add(struct dpif *dpif, struct netdev *netdev, odp_port_t *port_nop) { const char *netdev_name = netdev_get_name(netdev); odp_port_t port_no = ODPP_NONE; + struct netdev *datapath_netdev; int error; COVERAGE_INC(dpif_port_add); @@ -594,7 +595,8 @@ dpif_port_add(struct dpif *dpif, struct netdev *netdev, odp_port_t *port_nop) port_no = *port_nop; } - error = dpif->dpif_class->port_add(dpif, netdev, &port_no); + error = dpif->dpif_class->port_add(dpif, netdev, &port_no, + &datapath_netdev); if (!error) { VLOG_DBG_RL(&dpmsg_rl, "%s: added %s as port %"PRIu32, dpif_name(dpif), netdev_name, port_no); @@ -604,12 +606,12 @@ dpif_port_add(struct dpif *dpif, struct netdev *netdev, odp_port_t *port_nop) const char *dpif_type_str = dpif_normalize_type(dpif_type(dpif)); struct dpif_port dpif_port; - netdev_set_dpif_type(netdev, dpif_type_str); + netdev_set_dpif_type(datapath_netdev, dpif_type_str); dpif_port.type = CONST_CAST(char *, netdev_get_type(netdev)); dpif_port.name = CONST_CAST(char *, netdev_name); dpif_port.port_no = port_no; - netdev_ports_insert(netdev, &dpif_port); + netdev_ports_insert(datapath_netdev, &dpif_port); } } else { VLOG_WARN_RL(&error_rl, "%s: failed to add %s as port: %s",