From patchwork Wed Nov 10 16:28:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1553501 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.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=uQM18BgJ; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4Hq9L63m2tz9sRK for ; Thu, 11 Nov 2021 03:29:50 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 7ACEB60B34; Wed, 10 Nov 2021 16:29:48 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id sWvB39awoZcC; Wed, 10 Nov 2021 16:29:46 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 0C07760B01; Wed, 10 Nov 2021 16:29:44 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id C5B64C0019; Wed, 10 Nov 2021 16:29:44 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2E92CC000E for ; Wed, 10 Nov 2021 16:29:44 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id DF17C60AF2 for ; Wed, 10 Nov 2021 16:29:38 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8thQw0Q4XDv4 for ; Wed, 10 Nov 2021 16:29:36 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on20702.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe59::702]) by smtp3.osuosl.org (Postfix) with ESMTPS id DCBB560ADE for ; Wed, 10 Nov 2021 16:29:35 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j/WGi8vAUL85tVBz+/BargqrBAuCxGPzFuuZ15CKZFPODEKkTgk0TFXMl22XCAQPTBWRMz2TWi+siG6kqye13UFX+AS7P6mnJIhrEwh3+csP2G3Qx2OrRXKiIwWJcGJFTfwVldt+QaD+djqHD3nGcoK+KoET1d8ZIAd67KcBfOPKYsUTJQJDv/bS6v7k7nGjN5wujvJQ9VZ1ew3i+kc80XIDqG5O6F26f3MaWCFN6ayTIzy6OmiNG8Nhh9Nd2JD4loTtdKoCYFqwI2ktqhlivzakmLcBtGjTZe110wABLmDgTmpz397hR8kacDvsitqBf+29WALQuk59Hw70/Ico6Q== 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=1nUwEjL9Edvm4ws/wVS64BBdoZPHmbcuqbnHfwMXymg=; b=Y3gAmApOFBdS4lNf/Ilmv8FJDuf0EPRozcFuu20wBXZoBc3tRSKZTZ68SV5Dsl3JEWvYDmkAK1cUpO2aKrBINmjPfFFDXKg+z0qj+yeX9M7GMmp48IBPE8187ZjBTjhNE5cMhIand1V5O4XXtY4jtt0sd085qGV4TrrC94S+7782yn9ePGGtK88tA1pH1vL7+/S27Z88xVtdqwT+LOd1V5eVl6pKXgHPmfn/PA0lrwRj9TQMnYEgvmJcOkcGT7Z+j/yA/YiwVWxjXHFt2Zns8AOMyMNIRTJjStl/wSK/MI2zN2rlZu/QXpTXoNIhzwabfI5TvGLwMfNIg3NQgqc/1g== 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=1nUwEjL9Edvm4ws/wVS64BBdoZPHmbcuqbnHfwMXymg=; b=uQM18BgJpPck39kqkFyD6VKMXoA9IljCFUfXKjFUWCL6No+FAzUpKo5qapnL+CiNh3uWm2lKvmlp7qLfo/zMonUTbVrooEVwt7z4IYzcgHl6yD6zoWGTAV43sn0mP+oU8bvVz+KR29iVPCPAPfGc08qxlir4T851WPqUCcJxwX0= Authentication-Results: openvswitch.org; dkim=none (message not signed) header.d=none;openvswitch.org; dmarc=none action=none header.from=corigine.com; Received: from PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) by PH0PR13MB5003.namprd13.prod.outlook.com (2603:10b6:510:78::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.6; Wed, 10 Nov 2021 16:29:33 +0000 Received: from PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::e1d9:64d0:cb4f:3e90]) by PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::e1d9:64d0:cb4f:3e90%9]) with mapi id 15.20.4690.005; Wed, 10 Nov 2021 16:29:33 +0000 From: Simon Horman To: dev@openvswitch.org Date: Wed, 10 Nov 2021 17:28:58 +0100 Message-Id: <20211110162858.20101-8-simon.horman@corigine.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211110162858.20101-1-simon.horman@corigine.com> References: <20211110162858.20101-1-simon.horman@corigine.com> X-ClientProxiedBy: AM0PR02CA0224.eurprd02.prod.outlook.com (2603:10a6:20b:28f::31) To PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) MIME-Version: 1.0 Received: from madeliefje.horms.nl (80.113.23.202) by AM0PR02CA0224.eurprd02.prod.outlook.com (2603:10a6:20b:28f::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.15 via Frontend Transport; Wed, 10 Nov 2021 16:29:31 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 24407225-2ac2-4181-c044-08d9a467473b X-MS-TrafficTypeDiagnostic: PH0PR13MB5003: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: m8UUnVX0G/udvHRolkb3/Ghdnn1gRbmqxJmfZBp5rEzaOkmjKFUOBJw3ZkgDo0rvPa4Lc9R8s9XAz/K8XWdxDDmcAcPFSjpg+9FhYgHYiL4xOjajlEiQxmd2Som8HL9RL4yIM2o2AhnWwGolLkDB6/oHUGG1KqjMaepIix3gAS9Q4e0a+zvCQn+94acbkTnCPlw0Q+ROFqETXBY10dU8rmAnqYpY4EhoMbfUvqjOCNCzuyG0V5vPTlAL+9v9lAPS1mpkSrIZ55YamBVw/+TzImcDaT/VRCE64LRcIBM7PwuV8E8q2L9YU83iU6cfxjmXTMqEM8yCPvN9Vo+AzfR6MQDp9D4AnvQJ/kyoqBz6gwg2MFc87jSuin+8h3K0sLnNhQzkxnz18f6QiAyVHUmZHEgZKFOYELvhcl7p3Wc/FHWyLDLz9NIFpTPhkrBSgfQmiaOwNdk4QXrpfumkzbD2q8Nsw9T+josHl17HiTlsUGbeiwSTZ5KLpWUGN9IJrJ5x2JwM7ymo7Y8XUzD2hyQW/RfaXb5+Zyhk/S5aK1aGzKkTPA2CXk2xEXSzgIhmkVK3wR5WlJFtijWRvlRQlZmHiYQdz/k9L2tDR/KreCHPgF2R2sXr8+ZVnyXSFyO3cHN9/k8pzmhcHHk0s8W98bSsGTHYXbi3Rf1zoX0nHhtF0XMG5gjQUE8NLdt7s6rgq/mSEizd6MO0CF2DrfC+/Zhd3A== 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:(376002)(39830400003)(366004)(396003)(136003)(346002)(38100700002)(5660300002)(4326008)(316002)(83380400001)(8676002)(186003)(6916009)(8936002)(508600001)(26005)(1076003)(44832011)(38350700002)(86362001)(2906002)(52116002)(2616005)(54906003)(6512007)(956004)(66946007)(36756003)(107886003)(6506007)(6486002)(6666004)(66556008)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8sp3aRp3ckmXBNPQ9TBb+R5xjlcFvYsYox0k5ePOSp/O2D4G18dWHi9GGnxQBmeJuBgW+bPLv5+hwrLEBWcRfbiVchy/FnkFXABkTenZbFXIwMaEzFVEHPEVt5qKxdrcl8qTwcIjkSq+c1d/qrDQO6J3gutz1XSr6D9V+Nex5FujNdRRe+aWOGXfCKw7OjthPU/EtDE75Dr7ikVyxznxaEFTu7xGZ8BlxzWEFB+YSqPJqfERPuwP2N/UnoLKIj4Ip069qtE5zAJPFPdqiLQ3aUDNG9tN/3UxKqVUWulc6NVqvoman2atkPWBO088WLxaRh6XHQzdrP820tj7trdtHpaIT4lz8Oh+o9EH44cZL/CJRla8gwX4Zl7mX4py/XbGbtm5k3QY4LTasJGXp1FF2Zh+vlDm3MrFeztrPaiyue3NeaAehIRuc4xt0tVxVcWRLbBYxljE2nGV36h1hJKy+PCgDi5mvhMsWli9OeaYcfGfXeKy0+VbqlYwi+13bgfclm9PhPHYy2Llgee5zmciBdHyYe1r5WNXra0nPdJrCSt8/BZmr39vkNK5JO3jC5QIeyRpmKg8rDd8rpJ9Tq/UUAhw24V8BpaavxGyiCK53AJind+OCo71RjgHakaykrXSmIIOKxPXDR+4idI8WqiHojYd7JJQRPVOR0JOiF4HPlXPXRo4vqeD9V2jEuo7QjBvchkg5RsOOfJp9lBZXbpLXCGWDdowPeysQ2mw3aKhOHRYX1YLysiFPtbE7disrK+bpuJaU80lTNWCBnhCAkpZIPnTGv0hgU3S/TCHJlB6MbIXqrXxPkc2o1MSY0h5UbuqFc8jhu3sGlI1qlru/e3m9Z3HmqVdzE5Quic88/IGIdGrO6gByvSSwXXWKe8la9NDn+M+T5wJtPdbtbkiYG1FLDpVhtY6gj63msRVac5DhwAvMok9D063CgiVW3XfuT/qvgQCgao23wCM/UV5IFLHQLnYBdfj5otRjC8WmgRlEwuwMOvctCP7md0L3I1K46ydodk1O9QsG7BOAQEdSkUhjSyg6aCXiOXPULZNRizzfQa4JpskxHeeDjS0/q9q17asPboJA0wWpGA5e3o8Ui6jgIDdaQAtVmz9f6dhFPhAuu8qRmRXA9UYMV9guKr+us7tYHVVc1cH7chzAVI44UVsRszYIK/CChS7T+w0vK7Ft9UEAN4rEnuHHGX6JzuPigQnuihqiufHcxgrbWEtpJLe2F3Ag2Z4AUWELJSRbRHrv3j/XHLv195PxddnebB+bfmNBoir+3gb1uScWpyDNqN7TYsrJuF3YbRY4Yy7jiWuhLNfxjv7ITYa1cctJQokOqG5SUtwvEtjyWCLH6ibH2naE8EBllfsN4xWrYIlc5EBbMEj0y+05n3kiAqLKFFobhMcGNCINBg5FYJaI83nfmOKNmoSOBccwef2A4JRxIr3J04aZAqKxO2RuuUnWeuRtq5p3OFlC/RIrYEz3iNikDyw+TgLGBWuAc0Nm2KgvhmrNvHt1xGcMNP7J3SkyIQWHuKAyvuxL9IaIzhf4teGTXFaKpKUPlBggmUoS3811SESEnu/2ESq7chtnHr+/JA/k6yIfzSSsakHxzd406of8ikN3Vp+bFIs+jCjK0gPdw0/4XjYstyeiO4zKJwU4HVn2gh1DzELgrgQ9E/NA929TrfAsg== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24407225-2ac2-4181-c044-08d9a467473b X-MS-Exchange-CrossTenant-AuthSource: PH0PR13MB4842.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Nov 2021 16:29:33.4873 (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: HJlvBy7v/5FQNZFNLJMCjE543KcJxzuIMwwbfhufsRKga42XQQ/Ul65v2iPNYLCrgO7jWyLw9zZJhx5sL5H6Iksa5O46lHg5m0F0h/C61Cg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR13MB5003 Cc: Baowen Zheng , Tianyu Yuan , oss-drivers@corigine.com Subject: [ovs-dev] [PATCH/RFC 7/7] dpif-netlink: add offloaded meter stats dump in dpif_netlink_meter_get_stats 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: Tianyu Yuan Since previous ovs meter only supported dumping meter stats in non-offload datapath, the dpif_netlink_meter_transact_offloaded is introduced in dpif_netlink_meter_get_stats, in order to ckech meter stats in offloaded datapath through sending and receiving corresponding netlink message. Using "ovs-ofctl meter-stats br0 [meter] -O openflow13" can check the stats on OVS-Bridge br0. Shown stats(packet_in_count and byte_in_count) are counted by summing states of offloaded and non-offloaded datapath. Signed-off-by: Tianyu Yuan Signed-off-by: Simon Horman --- lib/dpif-netlink.c | 136 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 133 insertions(+), 3 deletions(-) diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c index aff78abcc..0765ceda3 100644 --- a/lib/dpif-netlink.c +++ b/lib/dpif-netlink.c @@ -32,6 +32,7 @@ #include #include #include +#include #include "bitmap.h" #include "dpif-netlink-rtnl.h" @@ -4036,12 +4037,125 @@ dpif_netlink_meter_transact(struct ofpbuf *request, struct ofpbuf **replyp, return 0; } + +static const struct nl_policy tca_root_policy_[] = { + [TCA_ACT_TAB] = { .type = NL_A_NESTED, .optional = false }, + [TCA_ROOT_COUNT] = { .type = NL_A_U32, .optional = true }, +}; + +static const struct nl_policy act_policy_[] = { + [TCA_ACT_KIND] = { .type = NL_A_STRING, .optional = false, }, + [TCA_ACT_COOKIE] = { .type = NL_A_UNSPEC, .optional = true, }, + [TCA_ACT_OPTIONS] = { .type = NL_A_NESTED, .optional = true, }, + [TCA_ACT_STATS] = { .type = NL_A_NESTED, .optional = true, }, +}; + +static const struct nl_policy stats_policy[] = { + [TCA_STATS_BASIC] = { .type = NL_A_UNSPEC, + .min_len = sizeof(struct gnet_stats_basic), + .optional = false, }, +}; + static const struct nl_policy police_policy[] = { [TCA_POLICE_TBF] = { .type = NL_A_UNSPEC, .min_len = sizeof(struct tc_police), .optional = false, }, }; +static int +dpif_netlink_meter_transact_offloaded(ofproto_meter_id meter_id, + struct ofpbuf request, + struct ofpbuf **reply) +{ + uint32_t index = METER_ID_TO_POLICY_INDEX(meter_id.uint32); + size_t total_offset, basic_offset; + struct tcamsg *tcamsg; + int prio = 0; + + tcamsg = tc_act_make_request(RTM_GETACTION, NLM_F_REQUEST, &request); + if (!tcamsg) { + return ENODEV; + } + dpif_netlink_police_start_nested(&request, &prio, &total_offset, + &basic_offset); + nl_msg_put_u32(&request, TCA_ACT_INDEX, index); + dpif_netlink_police_end_nested(&request, &total_offset, &basic_offset); + + return tc_transact(&request, reply); +} + +static int +dpif_netlink_meter_get_stats_offloaded(ofproto_meter_id meter_id, + struct ovs_flow_stats *stats) +{ + static struct nl_policy actions_orders_policy[ACT_MAX_NUM + 1] = {}; + struct nlattr *action_root_attrs_temp[ARRAY_SIZE(tca_root_policy_)]; + struct nlattr *actions_orders[ARRAY_SIZE(actions_orders_policy)]; + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); + struct nlattr *action_police_attrs[ARRAY_SIZE(act_policy_)]; + const int max_size = ARRAY_SIZE(actions_orders_policy); + struct nlattr *stats_attrs[ARRAY_SIZE(stats_policy)]; + const struct gnet_stats_basic *bs; + struct nlattr *act_stats; + struct ofpbuf request; + struct ofpbuf *reply; + int i, err; + + err = dpif_netlink_meter_transact_offloaded(meter_id, request, &reply); + if (err) { + VLOG_ERR_RL(&rl, "failed to send get-action netlink msg : %d", err); + goto err_out; + } + + /*parse reply from ofpbuf to *nlattr[] */ + if (!nl_policy_parse(reply, NLMSG_HDRLEN + sizeof(struct tcamsg), + tca_root_policy_, action_root_attrs_temp, + ARRAY_SIZE(action_root_attrs_temp))) { + VLOG_ERR_RL(&rl, "failed to parse reply message"); + err = EINVAL; + goto err_out; + } + + for (i = 0; i < max_size; i++) { + actions_orders_policy[i].type = NL_A_NESTED; + actions_orders_policy[i].optional = true; + } + + if (!nl_parse_nested(action_root_attrs_temp[TCA_ACT_TAB], + actions_orders_policy, + actions_orders, ACT_MAX_NUM + 1)) { + VLOG_ERR_RL(&rl, "failed to parse TCA_ACT_TAB"); + err = EPROTO; + goto err_out; + } + + if (!nl_parse_nested(actions_orders[1], act_policy_, action_police_attrs, + ARRAY_SIZE(act_policy_)) ) { + VLOG_ERR_RL(&rl, "failed to parse action when getting meter stats"); + err = EPROTO; + goto err_out; + } + + act_stats = action_police_attrs[TCA_ACT_STATS]; + + if (!nl_parse_nested(act_stats, stats_policy, stats_attrs, + ARRAY_SIZE(stats_policy))) { + VLOG_ERR_RL(&rl, "failed to parse action stats policy"); + err = EPROTO; + goto err_out; + } + + bs = nl_attr_get_unspec(stats_attrs[TCA_STATS_BASIC], sizeof *bs); + if (bs->packets) { + put_32aligned_u64(&stats->n_packets, bs->packets); + put_32aligned_u64(&stats->n_bytes, bs->bytes); + } + +err_out: + ofpbuf_delete(reply); + return err; +} + static void dpif_netlink_meter_get_features(const struct dpif *dpif_, struct ofputil_meter_features *features) @@ -4478,8 +4592,13 @@ dpif_netlink_meter_get_stats(const struct dpif *dpif_, enum ovs_meter_cmd command) { struct dpif_netlink *dpif = dpif_netlink_cast(dpif_); + struct ovs_flow_stats stats_t; + struct ovs_flow_stats *stats_offload = &stats_t; struct ofpbuf buf, *msg; uint64_t stub[1024 / 8]; + int error; + + memset(&stats_t, 0, sizeof(struct ovs_flow_stats)); static const struct nl_policy ovs_meter_stats_policy[] = { [OVS_METER_ATTR_ID] = { .type = NL_A_U32, .optional = true}, @@ -4493,9 +4612,9 @@ dpif_netlink_meter_get_stats(const struct dpif *dpif_, nl_msg_put_u32(&buf, OVS_METER_ATTR_ID, meter_id.uint32); - int error = dpif_netlink_meter_transact(&buf, &msg, - ovs_meter_stats_policy, a, - ARRAY_SIZE(ovs_meter_stats_policy)); + error = dpif_netlink_meter_transact(&buf, &msg, + ovs_meter_stats_policy, a, + ARRAY_SIZE(ovs_meter_stats_policy)); if (error) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5); VLOG_INFO_RL(&rl, "dpif_netlink_meter_transact %s failed", @@ -4503,6 +4622,10 @@ dpif_netlink_meter_get_stats(const struct dpif *dpif_, return error; } + if (netdev_is_flow_api_enabled()) { + dpif_netlink_meter_get_stats_offloaded(meter_id, stats_offload); + } + if (stats && a[OVS_METER_ATTR_ID] && a[OVS_METER_ATTR_STATS] @@ -4516,6 +4639,13 @@ dpif_netlink_meter_get_stats(const struct dpif *dpif_, stats->packet_in_count = get_32aligned_u64(&stat->n_packets); stats->byte_in_count = get_32aligned_u64(&stat->n_bytes); + if (netdev_is_flow_api_enabled()) { + stats->packet_in_count += + get_32aligned_u64(&stats_offload->n_packets); + stats->byte_in_count += + get_32aligned_u64(&stats_offload->n_bytes); + } + if (a[OVS_METER_ATTR_BANDS]) { size_t n_bands = 0; NL_NESTED_FOR_EACH (nla, left, a[OVS_METER_ATTR_BANDS]) {