From patchwork Sun May 28 12:00:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roi Dayan X-Patchwork-Id: 767871 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3wbJkB3nbKz9s2P for ; Sun, 28 May 2017 22:16:02 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 15F7AB47; Sun, 28 May 2017 12:09:50 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 550C6B2B for ; Sun, 28 May 2017 12:09:49 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by smtp1.linuxfoundation.org (Postfix) with ESMTP id 8370B12A for ; Sun, 28 May 2017 12:09:47 +0000 (UTC) Received: from Internal Mail-Server by MTLPINE1 (envelope-from roid@mellanox.com) with ESMTPS (AES256-SHA encrypted); 28 May 2017 15:00:56 +0300 Received: from dev-r-vrt-189.mtr.labs.mlnx (dev-r-vrt-189.mtr.labs.mlnx [10.212.189.1]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id v4SC0cmG011713; Sun, 28 May 2017 15:00:56 +0300 From: Roi Dayan To: dev@openvswitch.org Date: Sun, 28 May 2017 15:00:08 +0300 Message-Id: <1495972813-13475-27-git-send-email-roid@mellanox.com> X-Mailer: git-send-email 1.8.4.3 In-Reply-To: <1495972813-13475-1-git-send-email-roid@mellanox.com> References: <1495972813-13475-1-git-send-email-roid@mellanox.com> X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Shahar Klein , Hadar Hen Zion , Rony Efraim , Flavio Leitner , Jiri Pirko , Marcelo Ricardo Leitner , Simon Horman , Or Gerlitz , Andy Gospodarek Subject: [ovs-dev] [PATCH V9 26/31] dpctl: Indicate if flow is offloaded when dumping flows of all types X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org From: Paul Blakey When verbosity is requested on dump-flows (-m) indicate which flows are offloaded. Signed-off-by: Paul Blakey Reviewed-by: Roi Dayan --- lib/dpctl.c | 11 ++++++++--- lib/dpif-netlink.c | 4 ++++ lib/dpif.h | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/dpctl.c b/lib/dpctl.c index 95c8964..03fab0c 100644 --- a/lib/dpctl.c +++ b/lib/dpctl.c @@ -739,7 +739,7 @@ dpctl_dump_dps(int argc OVS_UNUSED, const char *argv[] OVS_UNUSED, static void format_dpif_flow(struct ds *ds, const struct dpif_flow *f, struct hmap *ports, - struct dpctl_params *dpctl_p) + char *type, struct dpctl_params *dpctl_p) { if (dpctl_p->verbosity && f->ufid_present) { odp_format_ufid(&f->ufid, ds); @@ -750,6 +750,9 @@ format_dpif_flow(struct ds *ds, const struct dpif_flow *f, struct hmap *ports, ds_put_cstr(ds, ", "); dpif_flow_stats_format(&f->stats, ds); + if (dpctl_p->verbosity && !type && f->offloaded) { + ds_put_cstr(ds, ", offloaded:yes"); + } ds_put_cstr(ds, ", actions:"); format_odp_actions(ds, f->actions, f->actions_len); } @@ -845,6 +848,7 @@ dpctl_dump_flows(int argc, const char *argv[], struct dpctl_params *dpctl_p) BUILD_ASSERT(PMD_ID_NULL != NON_PMD_CORE_ID); ds_init(&ds); + memset(&f, 0, sizeof f); flow_dump = dpif_flow_dump_create(dpif, false, (type ? type : "dpctl")); flow_dump_thread = dpif_flow_dump_thread_create(flow_dump); while (dpif_flow_dump_next(flow_dump_thread, &f, 1)) { @@ -881,7 +885,8 @@ dpctl_dump_flows(int argc, const char *argv[], struct dpctl_params *dpctl_p) } pmd_id = f.pmd_id; } - format_dpif_flow(&ds, &f, &portno_names, dpctl_p); + format_dpif_flow(&ds, &f, &portno_names, type, dpctl_p); + dpctl_print(dpctl_p, "%s\n", ds_cstr(&ds)); } dpif_flow_dump_thread_destroy(flow_dump_thread); @@ -1065,7 +1070,7 @@ dpctl_get_flow(int argc, const char *argv[], struct dpctl_params *dpctl_p) } ds_init(&ds); - format_dpif_flow(&ds, &flow, &portno_names, dpctl_p); + format_dpif_flow(&ds, &flow, &portno_names, NULL, dpctl_p); dpctl_print(dpctl_p, "%s\n", ds_cstr(&ds)); ds_destroy(&ds); diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c index ff1aebd..f0a7678 100644 --- a/lib/dpif-netlink.c +++ b/lib/dpif-netlink.c @@ -1573,6 +1573,7 @@ dpif_netlink_flow_to_dpif_flow(struct dpif *dpif, struct dpif_flow *dpif_flow, &dpif_flow->ufid); } dpif_netlink_flow_get_stats(datapath_flow, &dpif_flow->stats); + dpif_flow->offloaded = false; } /* The design is such that all threads are working together on the first dump @@ -1652,6 +1653,9 @@ dpif_netlink_netdev_match_to_dpif_flow(struct match *match, flow->ufid = *ufid; flow->pmd_id = PMD_ID_NULL; + + flow->offloaded = true; + return 0; } diff --git a/lib/dpif.h b/lib/dpif.h index b1f516e..38efd29 100644 --- a/lib/dpif.h +++ b/lib/dpif.h @@ -591,6 +591,7 @@ struct dpif_flow { bool ufid_present; /* True if 'ufid' was provided by datapath.*/ unsigned pmd_id; /* Datapath poll mode driver id. */ struct dpif_flow_stats stats; /* Flow statistics. */ + bool offloaded; /* True if flow is offloaded */ }; int dpif_flow_dump_next(struct dpif_flow_dump_thread *, struct dpif_flow *flows, int max_flows);