From patchwork Sat Dec 28 07:11:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tonghao Zhang X-Patchwork-Id: 1215824 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.138; helo=whitealder.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="b9aLSLok"; dkim-atps=neutral Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 47lFHn0yXNz9sPW for ; Sat, 28 Dec 2019 18:12:05 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 843E886092; Sat, 28 Dec 2019 07:12:03 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id NNSCw8Maou-b; Sat, 28 Dec 2019 07:11:58 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by whitealder.osuosl.org (Postfix) with ESMTP id 96DB0862D2; Sat, 28 Dec 2019 07:11:49 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 75B4FC1D8A; Sat, 28 Dec 2019 07:11:49 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4B98CC1D8D for ; Sat, 28 Dec 2019 07:11:48 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 3301485BD3 for ; Sat, 28 Dec 2019 07:11:48 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Kt8cDUeWJY7S for ; Sat, 28 Dec 2019 07:11:45 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pg1-f195.google.com (mail-pg1-f195.google.com [209.85.215.195]) by whitealder.osuosl.org (Postfix) with ESMTPS id 183AE86252 for ; Sat, 28 Dec 2019 07:11:41 +0000 (UTC) Received: by mail-pg1-f195.google.com with SMTP id k197so15488838pga.10 for ; Fri, 27 Dec 2019 23:11:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZghtE++VUQBK5wq0SDJbnNbECHgPztcTvScNY52h4w8=; b=b9aLSLokspvREXDCtBfmlB+/El2ygVcd3xtJOABFzNfULFHnqm5PeTpb+QVUhZzDXU Jr8Ih08Q6YbOtu2aCoyxQbe/bT7qwtnoV3ZDii3BS7lqaZotksWKNOTnMze9SVIZXqBo qhxRcA3x4Xy56V/Elb0mpNVOiHtpA56IyZh8MEWBSaF5zndlEzYpWxxnZKOhpDKRD2/9 LtSiII3eTlNvVcVnegoO1Yr4XLLkMryYC4EfEc2eslfXFWVhpq4hMVEFB7U7PatoU+Ud fwgKj5fdL1PHbu4cnFp1agW90zCcq9cjJC7Hna1rTUuzCWaacb6/56IXeaCKGA2Rg2Sm gl0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZghtE++VUQBK5wq0SDJbnNbECHgPztcTvScNY52h4w8=; b=Mc1M4GgFwWUsAKjiJ8SP6bUua8OQO/aDq6pvIn04PTQp1E7h0OjjFB8AkDRAZPD6AK 0r6wy7FOmqVmv+xDGQuANblqOhL3YzvD2Bcou9AKtZEkOsFLAxqKHG37uOCCQzoVF5QH nlD3EgslulMZspyEXW4DQlvtCWSh9ZifwYtCufk0loU9KI6avACdIM+54PXycKkEsAcS PI81o6HD5GZfn8abU/VpNvPYKNtACj3Jct+xacAD6u1lwdcRqxbuGYdCOpVoXPZFpSb6 JnC4Y4KmSwpHLiA2z52AzV9zr3PRwhmSkE0uW9lY+st+B2UVIJgcLES9EdeQYLQtHFWs Vz1Q== X-Gm-Message-State: APjAAAWktaA6/PH7/3LUHv5p0xVqkAG9wJUFqrOyvWDUC1J9Mygv5g4E l64Fc60uoliEukt7wsERnJg= X-Google-Smtp-Source: APXvYqzO+drGCv84jKKGdxLaPqK1clSd3ibphzTpHGqMzgkrvrw1hMoUgpwrSBKN6q3OjeIdtG2Avw== X-Received: by 2002:a63:e954:: with SMTP id q20mr61236997pgj.204.1577517100668; Fri, 27 Dec 2019 23:11:40 -0800 (PST) Received: from local.opencloud.tech.localdomain ([203.100.54.194]) by smtp.gmail.com with ESMTPSA id o2sm17380429pjo.26.2019.12.27.23.11.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 27 Dec 2019 23:11:39 -0800 (PST) From: xiangxia.m.yue@gmail.com To: blp@ovn.org, i.maximets@ovn.org, elibr@mellanox.com Date: Sat, 28 Dec 2019 15:11:14 +0800 Message-Id: <1577517076-105041-6-git-send-email-xiangxia.m.yue@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1577517076-105041-1-git-send-email-xiangxia.m.yue@gmail.com> References: <1577517076-105041-1-git-send-email-xiangxia.m.yue@gmail.com> Cc: dev@openvswitch.org, martinbj2008@gmail.com Subject: [ovs-dev] [ovs-dev 5/7] netdev-dpif: Implement netdev meter offload 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: , MIME-Version: 1.0 Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Tonghao Zhang Implement the meter offload api in the netdev. Signed-off-by: Tonghao Zhang --- lib/dpif-netdev.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 93 insertions(+), 3 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 051d090..e33215d 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -5893,6 +5893,96 @@ dpif_netdev_meter_del(struct dpif *dpif, return error; } +static int +dpif_netdev_meter_get_config(struct dpif *dpif, + ofproto_meter_id meter_id, + struct ofputil_meter_config *conf) +{ + struct dp_netdev *dp = get_dp_netdev(dpif); + uint32_t mid = meter_id.uint32; + struct dp_meter *meter; + int ret = 0, i; + + if (mid >= MAX_METERS) { + return -1; + } + + meter_lock(dp, mid); + meter = dp->meters[mid]; + if (!meter) { + ret = -1; + goto done; + } + + conf->n_bands = meter->n_bands; + conf->bands = xzalloc(conf->n_bands * sizeof(struct dp_meter_band)); + for (i = 0; i < meter->n_bands; ++i) { + conf->bands[i] = meter->bands[i].up; + } + +done: + meter_unlock(dp, mid); + return ret; +} + +static int +dpif_netdev_meter_set_offload(struct dpif *dpif, + ofproto_meter_id meter_id, + void *data) +{ + struct dp_netdev *dp = get_dp_netdev(dpif); + uint32_t mid = meter_id.uint32; + struct dp_meter *meter; + int ret = 0; + + if (mid >= MAX_METERS) { + return -1; + } + + meter_lock(dp, mid); + meter = dp->meters[mid]; + if (!meter) { + ret = -1; + goto done; + } + + meter->offload = (struct netdev_offload_meter *)data; +done: + meter_unlock(dp, mid); + return ret; +} + +static int +dpif_netdev_meter_get_offload(struct dpif *dpif, + ofproto_meter_id meter_id, + void **data, uint16_t size) +{ + struct dp_netdev *dp = get_dp_netdev(dpif); + uint32_t mid = meter_id.uint32; + struct dp_meter *meter; + int ret = 0; + + if (mid >= MAX_METERS) { + return -1; + } + + meter_lock(dp, mid); + meter = dp->meters[mid]; + if (!meter) { + ret = -1; + goto done; + } + + *data = NULL; + if (meter->offload) { + *data = xmemdup(meter->offload, size); + } + +done: + meter_unlock(dp, mid); + return ret; +} + static void dpif_netdev_disable_upcall(struct dpif *dpif) @@ -7681,9 +7771,9 @@ const struct dpif_class dpif_netdev_class = { dpif_netdev_meter_set, dpif_netdev_meter_get, dpif_netdev_meter_del, - NULL, - NULL, - NULL, + dpif_netdev_meter_get_config, + dpif_netdev_meter_set_offload, + dpif_netdev_meter_get_offload, }; static void