From patchwork Wed Apr 26 14:05:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1774128 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::133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=corigine.onmicrosoft.com header.i=@corigine.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-corigine-onmicrosoft-com header.b=at0DwXra; dkim-atps=neutral Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (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 4Q60yN5r4Hz23vJ for ; Thu, 27 Apr 2023 00:05:48 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 56BAB41D25; Wed, 26 Apr 2023 14:05:44 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 56BAB41D25 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=corigine.onmicrosoft.com header.i=@corigine.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-corigine-onmicrosoft-com header.b=at0DwXra X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id i6l6agqY5-DN; Wed, 26 Apr 2023 14:05:41 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTPS id EDB004016D; Wed, 26 Apr 2023 14:05:39 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org EDB004016D Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 038E2C0097; Wed, 26 Apr 2023 14:05:38 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 740B3C0037 for ; Wed, 26 Apr 2023 14:05:37 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 5B88681970 for ; Wed, 26 Apr 2023 14:05:37 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 5B88681970 Authentication-Results: smtp1.osuosl.org; dkim=pass (1024-bit key) header.d=corigine.onmicrosoft.com header.i=@corigine.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-corigine-onmicrosoft-com header.b=at0DwXra 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 1ERQGQxmYzxl for ; Wed, 26 Apr 2023 14:05:36 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 4A13081839 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on20717.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe5a::717]) by smtp1.osuosl.org (Postfix) with ESMTPS id 4A13081839 for ; Wed, 26 Apr 2023 14:05:36 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YwqQ7xcd9d1HNdBefzErWpfz1XTTmTXfn//q2sCYE0aYi8TI4kd4qb+h8uO9hg4XdPjHGf+al4ge82TvVKJkRbYnKWzBw63gNcOj6V/xSm0PP+aHeYI75Oag8P/RH/N30fSBfLKlClCwdUJE+IEmlzeCUNo4aIz1aFWSz87CZ3AkPM4aQM3sb0TpeJxKDcHR21YmK5FDp4jeiWdaShOf5OvvdfsHlxE36J7oP36EYMewG/Z+m67z/0EcNUWyXV0Ng3MEDcLaMnzSI1H6szikoegqddlUtIa80vR0KHeghfUim0UekQJwTmb3GpW9YQ1PWfwnZ6gx4dIVbDVJ92gQXQ== 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=mYERP0r0SqlEFGTPHi/MEPP8P3UWyjYKAmhQ01ucLcw=; b=XXv2UKgDY1bzQ1JEQl0JQKMEtY5/GXpcZMeIhY5alDo5WWWbNrD9vc9oHlf5ziAx4tuGSRZ5V8CgetYGWbeSiaEn3zzbKxFBRJQv1pTLp+tL37rvtLcUVxg+PLI10CTOMRDDJncTRY188H+XrXU4rk40PastRRS6s3QMmsw97weYWlAupeu5YLAezaSbc7dpsYnR2DDU3OiKFOJ3BlTBxmgLRJYXnAOLGbXWwAY3rDXlV2iTU4s2v8N0ZvbmrZ+4wEFN1cCfqm6Cz36RTeYaqMowlhYCUdSzqzlsEd1Y6NaUVB9sKHurUoCQ6BIfi3Uux/2TYw4sYbnZegZi/oDRiQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mYERP0r0SqlEFGTPHi/MEPP8P3UWyjYKAmhQ01ucLcw=; b=at0DwXrai0WyNbxOOU5T1p5dLLXblELx4yTxALOSfx/spNroatyj+Xw49/NdUyEJBi0IYbw8+dI3CXAGqpQS8uvpvcul2Is3Z90f3JQ1dAaI9S7m/63vL7x8raW+elE1pSUgE6jF1EVyaJ7/baOmT65UY5W2o+0nuRRSEFaiacM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) by BN0PR13MB5229.namprd13.prod.outlook.com (2603:10b6:408:158::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.21; Wed, 26 Apr 2023 14:05:33 +0000 Received: from PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::f416:544d:18b7:bb34]) by PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::f416:544d:18b7:bb34%5]) with mapi id 15.20.6319.033; Wed, 26 Apr 2023 14:05:32 +0000 From: Simon Horman To: dev@openvswitch.org Date: Wed, 26 Apr 2023 16:05:07 +0200 Message-Id: <20230426140510.949421-3-simon.horman@corigine.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230426140510.949421-1-simon.horman@corigine.com> References: <20230426140510.949421-1-simon.horman@corigine.com> X-ClientProxiedBy: AM0PR10CA0058.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:150::38) To PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH0PR13MB4842:EE_|BN0PR13MB5229:EE_ X-MS-Office365-Filtering-Correlation-Id: b7f06b7f-c0be-4d44-7e9c-08db465f4cb0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Yjnsa1GVtIRs7CLraHVjn4YoIWjNFSfamFqiQGpLuKzdgBXdc0J20AeLBdF7p8BWE2u8Yrd4P0kZmBq5zX5u9qv0Pr9i3sQD3xmzkHdTyxo6XvnBNbx1YMYvdUQ8OvinyNebmbFcCWwrlYzJqS2N19LO4QDZRNfMPKevH0l5IiTNf+yo4YjcRjKmywmVb0bGQ0uGEFY7fzj03FYucbkFDbZQttGc1BYX/bZGC0i5ebNjObqNnThXquqEyXgdM1cFzOyiQmXNtfAGq3lDmcr0nicR20+EWa7ZCICPAPWPix+cEe9JnTsib+aL8O7Dv9OR8z1jizG+A5/Ozw84OvRJnTpa82q8qb99RCOnFxMOSA3+C2mLgJtl/JUXOi91tLgrb7A3CcDa3CsDI+nORltxpAaM58Oe2bCFUTPt1gimNIHXRKJu014cKezWRIqaT/XeLLHQdT6RSsTnCEx/yWHv3ZW4K4mcis0PL+Ev4cd53W4ZSuOMwOTMV6k15+HSRzauUj5DrbaobmWlk99lP99zbVa1rsMxluviGVl/hmT9aj/vCDNZTHocy+L6+RqQz15K X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR13MB4842.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(376002)(366004)(39840400004)(136003)(396003)(346002)(451199021)(44832011)(107886003)(1076003)(6506007)(6512007)(38100700002)(6486002)(478600001)(66476007)(66556008)(6916009)(66946007)(41300700001)(52116002)(36756003)(86362001)(6666004)(54906003)(4326008)(316002)(2616005)(83380400001)(186003)(8936002)(8676002)(2906002)(30864003)(5660300002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: eVDAApiKocPKXIJ1noUhOsxhxObyi7+IPhDT2DMdDaRXMFsGQhJT5/6VHxglr8lPOHvMam9WdyZTvqIXym0OkTCvxtyQw5qYdFFQF61GA933AbX8ct1a03ZHi27m7kUmUC4e08LbduR50lp503amwe23mDxW8ZCLQYxLx9YbxTa4x/XCha+5o7KVSxbmTipDtu4kcp16kbArewEmIsU8fywsKb11aKlrtgnTZ4l/2z1qU5g5NCnIqaloTXDHm1hJRJomzkNoxIcBxJKSVglQBW1Z4Lt5lh8Fl9HRU+Pgwypdq5gojFlQQ4IuWfgb/cW4tpKSvI7l8FexKq19Vn5aVdA3EZqSTMcOzbKZ7p/u8Pw2KIJB+S/X5yKq0uARCR++BFav0/Dq9wpXoA7AYMJ2ZScjpCch8da2TIDd8PLc5Pzr459Kjxd+XzurmJESi6V3vCRvPaNN3Puk5GWK5zbaXQWxXIN5O1oS7piDkWzDntKGQArZYCjoHE2jP0vzUffpg2V2iJRton+HR7hDJCK0UdvnZnw37Kp9SR9v3FcPn0nOFzbIiXTFDBMXCpFk+5RYlxxy0lqQG4/5jqIvC8sVx4kfeobvRvbRp1iu5pw9zYpMtFMiC4f2gDDYmvGoDzKQac4gWTfUtPmzXbCUjAt/nuSZf97tqLWj5BZe/rjdvFKEI/0TXlU3oQoKP3kjy2cZxmp8AzQ3nkBymhBklBLRs2QKqwKc5xX0ChJVTjFmfMCnWwONTAIno1pC1RfnAVQD7Pl1tLQplkFCPI4GJXkvDRp2cC5FGsMN20Bmo9sX7UVXbJe93aJ4Qnfl0h+QzizdtAcOQL3Rmjk3dW/cItFr4xDcIChD/tAXBJ4GHumLuD/8hvNzF5RcDuoqVQh8wjIcBEjzW2cF4vZyDa4mXo+hNaot9w+jgk1YAxzuj0MjTxkj4cEmOEkDo/P3zRa2HsOEeEQabLpM0m4mN9RWgElAyh3yT5pPSvoyS5k40/vol6hOkCjKnD3vjzu+we2hGNsFZXQDcYPuDWXXqt3jYOFl1y19Blu7zRErYAa/UUVX41lK8t5UxvZEFt0d+AJ/tSPOJmrSzwOle7t5U9HZn8C4bxYpmZXW9G2WSghx1eT8ZpW5caqWI7rHtHNGb0c5BB/O0tZFHW0X8HCKSQg3lXlBE7ahEN4PZOovE5FXGik78iQBnt8G680xv3yjYTRmWMfUmdfiE/Qz5VNztd7qgF6XnbagQd457nLMvV9GIH/yo2VkD3Tr2RL6MCD+IFmeLhRyWAii73R3YR4ifgG+OJS1UDcuWw3afIcLupLwgMVoH/khFM2MZD3d0rHzXr7xlh2RcWhb4gRelgYjQZu3ZD0HWSqGNL+E/ZOnFpt+S1K9dJqEHht0rsNIo5CiQnLsYYVt83rivVC52dkyZMcYkZSAuN9zFxpqpHFd5h3vzg+emrkKiCQ+ad87J++rzuK5I44T79tA0s3TzbhGE6yZIgAGop56+/QjAjYChCQ/m0mgMdvD7+6+bb/uk9uUZi5A+IpHYy4rRwSoJcn4pAgMcV5yqtR40n9UkHNLVb50NsFKg5SKOtrwpDO9cWg2ayT5yo4MKZsrMK/6hsFNm9wbEBQ7WJysZdVETAhzbKv9WJMxwCM1ltGiaK68WvTi0nPhF3TqoBCiq56UUatytDQkxBCuaA== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: b7f06b7f-c0be-4d44-7e9c-08db465f4cb0 X-MS-Exchange-CrossTenant-AuthSource: PH0PR13MB4842.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2023 14:05:32.8952 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kuKxbhkdOyLQFokJ2WTujuUPyfO50jDskmqWSH0xflhCpvUIabqe3/zeDw9pYnA5VRzqJxwBkuNSTSAjZCahWMpx69/j/5LfpqvhDPTFhmk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN0PR13MB5229 Cc: Eli Britstein , Jin Liu , Chaoyong He , oss-drivers@corigine.com, Ilya Maximets , Peng Zhang Subject: [ovs-dev] [PATCH dpdk-latest v4 2/5] dpif-netdev: Offloading meter with DPDK 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: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Peng Zhang By calling meter API, so it can offload meter to HW in netdev datapath. Add the check for datapath in the meter API to avoid the unnecessary error. Signed-off-by: Peng Zhang Signed-off-by: Jin Liu Co-authored-by: Jin Liu Signed-off-by: Simon Horman --- Documentation/howto/dpdk.rst | 5 +++-- lib/dpif-netdev.c | 27 +++++++++++++++++++++++++-- lib/dpif-netlink.c | 9 ++++++--- lib/netdev-offload-provider.h | 9 ++++++--- lib/netdev-offload-tc.c | 24 +++++++++++++++++++++--- lib/netdev-offload.c | 17 +++++++++++------ lib/netdev-offload.h | 9 ++++++--- 7 files changed, 78 insertions(+), 22 deletions(-) diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst index 04609b20bd21..02fc568770ee 100644 --- a/Documentation/howto/dpdk.rst +++ b/Documentation/howto/dpdk.rst @@ -401,10 +401,11 @@ Supported actions for hardware offload are: - Modification of IPv6 (set_field:->ipv6_src/ipv6_dst/mod_nw_ttl). - Clone/output (tnl_push and output) for encapsulating over a tunnel. - Tunnel pop, for packets received on physical ports. +- Meter. .. note:: - Tunnel offloads are experimental APIs in DPDK. In order to enable it, - compile with -DALLOW_EXPERIMENTAL_API. + Tunnel offloads and Meter offloads are experimental APIs in DPDK. To enable + these features, compile with -DALLOW_EXPERIMENTAL_API. Multiprocess ------------ diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 2c08a71c8db2..e3e0346c30dd 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -7277,6 +7277,11 @@ dpif_netdev_meter_set(struct dpif *dpif, ofproto_meter_id meter_id, ovs_mutex_unlock(&dp->meters_lock); + if (netdev_is_flow_api_enabled()) { + meter_offload_set(dpif_normalize_type(dpif_type(dpif)), + meter_id, config); + } + return 0; } @@ -7287,7 +7292,7 @@ dpif_netdev_meter_get(const struct dpif *dpif, { struct dp_netdev *dp = get_dp_netdev(dpif); uint32_t meter_id = meter_id_.uint32; - const struct dp_meter *meter; + struct dp_meter *meter; if (meter_id >= MAX_METERS) { return EFBIG; @@ -7313,8 +7318,21 @@ dpif_netdev_meter_get(const struct dpif *dpif, ovs_mutex_unlock(&meter->lock); stats->n_bands = i; - } + if (netdev_is_flow_api_enabled()) { + meter_offload_get(dpif_normalize_type(dpif_type(dpif)), + meter_id_, stats); + + meter->packet_count = stats->packet_in_count; + meter->byte_count = stats->byte_in_count; + + /* nit: Meter offload currently only supports one band */ + if (meter->n_bands) { + stats->bands[0].packet_count = stats->packet_in_count; + stats->bands[0].byte_count = stats->byte_in_count; + } + } + } return 0; } @@ -7330,6 +7348,11 @@ dpif_netdev_meter_del(struct dpif *dpif, if (!error) { uint32_t meter_id = meter_id_.uint32; + if (netdev_is_flow_api_enabled()) { + meter_offload_del(dpif_normalize_type(dpif_type(dpif)), + meter_id_, stats); + } + ovs_mutex_lock(&dp->meters_lock); dp_meter_detach_free(&dp->meters, meter_id); ovs_mutex_unlock(&dp->meters_lock); diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c index 026b0daa8d83..c90b5c3fb776 100644 --- a/lib/dpif-netlink.c +++ b/lib/dpif-netlink.c @@ -4249,7 +4249,8 @@ dpif_netlink_meter_set(struct dpif *dpif_, ofproto_meter_id meter_id, err = dpif_netlink_meter_set__(dpif_, meter_id, config); if (!err && netdev_is_flow_api_enabled()) { - meter_offload_set(meter_id, config); + meter_offload_set(dpif_normalize_type(dpif_type(dpif_)), + meter_id, config); } return err; @@ -4348,7 +4349,8 @@ dpif_netlink_meter_get(const struct dpif *dpif, ofproto_meter_id meter_id, err = dpif_netlink_meter_get_stats(dpif, meter_id, stats, max_bands, OVS_METER_CMD_GET); if (!err && netdev_is_flow_api_enabled()) { - meter_offload_get(meter_id, stats); + meter_offload_get(dpif_normalize_type(dpif_type(dpif)), + meter_id, stats); } return err; @@ -4363,7 +4365,8 @@ dpif_netlink_meter_del(struct dpif *dpif, ofproto_meter_id meter_id, err = dpif_netlink_meter_get_stats(dpif, meter_id, stats, max_bands, OVS_METER_CMD_DEL); if (!err && netdev_is_flow_api_enabled()) { - meter_offload_del(meter_id, stats); + meter_offload_del(dpif_normalize_type(dpif_type(dpif)), + meter_id, stats); } return err; diff --git a/lib/netdev-offload-provider.h b/lib/netdev-offload-provider.h index 9108856d18d1..23d94b1b24ae 100644 --- a/lib/netdev-offload-provider.h +++ b/lib/netdev-offload-provider.h @@ -99,7 +99,8 @@ struct netdev_flow_api { * returned. * * The meter id specified through 'config->meter_id' is ignored. */ - int (*meter_set)(ofproto_meter_id meter_id, + int (*meter_set)(const char *type, + ofproto_meter_id meter_id, struct ofputil_meter_config *config); /* Queries HW for meter stats with the given 'meter_id'. Store the stats @@ -110,7 +111,8 @@ struct netdev_flow_api { * available statistics should be incremented, not replaced. Those fields * are packet_in_count, byte_in_count and band[]->byte_count and * band[]->packet_count. */ - int (*meter_get)(ofproto_meter_id meter_id, + int (*meter_get)(const char *type, + ofproto_meter_id meter_id, struct ofputil_meter_stats *stats); /* Removes meter 'meter_id' from HW. Store the stats of dropped packets to @@ -118,7 +120,8 @@ struct netdev_flow_api { * * 'stats' may be passed in as NULL if no stats are needed, See the above * function for additional details on the 'stats' usage. */ - int (*meter_del)(ofproto_meter_id meter_id, + int (*meter_del)(const char *type, + ofproto_meter_id meter_id, struct ofputil_meter_stats *stats); /* Initializies the netdev flow api. diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c index ce7f8ad97306..2e708df036d4 100644 --- a/lib/netdev-offload-tc.c +++ b/lib/netdev-offload-tc.c @@ -2892,7 +2892,8 @@ meter_free_police_index(uint32_t police_index) } static int -meter_tc_set_policer(ofproto_meter_id meter_id, +meter_tc_set_policer(const char *dpif_type, + ofproto_meter_id meter_id, struct ofputil_meter_config *config) { uint32_t police_index; @@ -2900,6 +2901,11 @@ meter_tc_set_policer(ofproto_meter_id meter_id, bool add_policer; int err; + if (strcmp(dpif_type, "system")) { + VLOG_DBG("meter doesn't belongs to the system datapath. Skipping."); + return EOPNOTSUPP; + } + if (!config->bands || config->n_bands < 1 || config->bands[0].type != OFPMBT13_DROP) { return 0; @@ -2946,12 +2952,18 @@ meter_tc_set_policer(ofproto_meter_id meter_id, } static int -meter_tc_get_policer(ofproto_meter_id meter_id, +meter_tc_get_policer(const char *dpif_type, + ofproto_meter_id meter_id, struct ofputil_meter_stats *stats) { uint32_t police_index; int err = ENOENT; + if (strcmp(dpif_type, "system")) { + VLOG_DBG("meter doesn't belongs to the system datapath. Skipping."); + return EOPNOTSUPP; + } + if (!meter_id_lookup(meter_id.uint32, &police_index)) { err = tc_get_policer_action(police_index, stats); if (err) { @@ -2965,12 +2977,18 @@ meter_tc_get_policer(ofproto_meter_id meter_id, } static int -meter_tc_del_policer(ofproto_meter_id meter_id, +meter_tc_del_policer(const char *dpif_type, + ofproto_meter_id meter_id, struct ofputil_meter_stats *stats) { uint32_t police_index; int err = ENOENT; + if (strcmp(dpif_type, "system")) { + VLOG_DBG("meter doesn't belongs to the system datapath. Skipping."); + return EOPNOTSUPP; + } + if (!meter_id_lookup(meter_id.uint32, &police_index)) { err = tc_del_policer_action(police_index, stats); if (err && err != ENOENT) { diff --git a/lib/netdev-offload.c b/lib/netdev-offload.c index 4592262bd34e..52dc74c216a3 100644 --- a/lib/netdev-offload.c +++ b/lib/netdev-offload.c @@ -199,14 +199,15 @@ netdev_assign_flow_api(struct netdev *netdev) } void -meter_offload_set(ofproto_meter_id meter_id, +meter_offload_set(const char *dpif_type, + ofproto_meter_id meter_id, struct ofputil_meter_config *config) { struct netdev_registered_flow_api *rfa; CMAP_FOR_EACH (rfa, cmap_node, &netdev_flow_apis) { if (rfa->flow_api->meter_set) { - int ret = rfa->flow_api->meter_set(meter_id, config); + int ret = rfa->flow_api->meter_set(dpif_type, meter_id, config); if (ret) { VLOG_DBG_RL(&rl, "Failed setting meter %u for flow api %s, " "error %d", meter_id.uint32, rfa->flow_api->type, @@ -219,13 +220,15 @@ meter_offload_set(ofproto_meter_id meter_id, } int -meter_offload_get(ofproto_meter_id meter_id, struct ofputil_meter_stats *stats) +meter_offload_get(const char *dpif_type, + ofproto_meter_id meter_id, + struct ofputil_meter_stats *stats) { struct netdev_registered_flow_api *rfa; CMAP_FOR_EACH (rfa, cmap_node, &netdev_flow_apis) { if (rfa->flow_api->meter_get) { - int ret = rfa->flow_api->meter_get(meter_id, stats); + int ret = rfa->flow_api->meter_get(dpif_type, meter_id, stats); if (ret) { VLOG_DBG_RL(&rl, "Failed getting meter %u for flow api %s, " "error %d", meter_id.uint32, rfa->flow_api->type, @@ -238,13 +241,15 @@ meter_offload_get(ofproto_meter_id meter_id, struct ofputil_meter_stats *stats) } int -meter_offload_del(ofproto_meter_id meter_id, struct ofputil_meter_stats *stats) +meter_offload_del(const char *dpif_type, + ofproto_meter_id meter_id, + struct ofputil_meter_stats *stats) { struct netdev_registered_flow_api *rfa; CMAP_FOR_EACH (rfa, cmap_node, &netdev_flow_apis) { if (rfa->flow_api->meter_del) { - int ret = rfa->flow_api->meter_del(meter_id, stats); + int ret = rfa->flow_api->meter_del(dpif_type, meter_id, stats); if (ret) { VLOG_DBG_RL(&rl, "Failed deleting meter %u for flow api %s, " "error %d", meter_id.uint32, rfa->flow_api->type, diff --git a/lib/netdev-offload.h b/lib/netdev-offload.h index edc843cd99a3..b52d642bf8ab 100644 --- a/lib/netdev-offload.h +++ b/lib/netdev-offload.h @@ -158,9 +158,12 @@ int netdev_ports_flow_get(const char *dpif_type, struct match *match, int netdev_ports_get_n_flows(const char *dpif_type, odp_port_t port_no, uint64_t *n_flows); -void meter_offload_set(ofproto_meter_id, struct ofputil_meter_config *); -int meter_offload_get(ofproto_meter_id, struct ofputil_meter_stats *); -int meter_offload_del(ofproto_meter_id, struct ofputil_meter_stats *); +void meter_offload_set(const char *dpif_type, ofproto_meter_id, + struct ofputil_meter_config *); +int meter_offload_get(const char *dpif_type, ofproto_meter_id, + struct ofputil_meter_stats *); +int meter_offload_del(const char *dpif_type, ofproto_meter_id, + struct ofputil_meter_stats *); #ifdef __cplusplus }