From patchwork Thu Apr 27 14:42:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Jastrzebski X-Patchwork-Id: 23972 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 1C1D8567F; Thu, 27 Apr 2017 16:46:20 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 96AA358D1 for ; Thu, 27 Apr 2017 16:46:17 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Apr 2017 07:46:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.37,384,1488873600"; d="scan'208";a="79640678" Received: from unknown ([10.103.103.28]) by orsmga002.jf.intel.com with SMTP; 27 Apr 2017 07:46:13 -0700 Received: by (sSMTP sendmail emulation); Thu, 27 Apr 2017 16:45:30 +0200 From: Michal Jastrzebski To: dev@dpdk.org Cc: harry.van.haaren@intel.com, deepak.k.jain@intel.com, Kuba Kozak Date: Thu, 27 Apr 2017 16:42:37 +0200 Message-Id: <20170427144240.10188-4-michalx.k.jastrzebski@intel.com> X-Mailer: git-send-email 2.12.2 In-Reply-To: <20170427144240.10188-1-michalx.k.jastrzebski@intel.com> References: <20170427144240.10188-1-michalx.k.jastrzebski@intel.com> Subject: [dpdk-dev] [PATCH v1 3/6] ethdev: get xstats ID by name X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Kuba Kozak Introduced new function: rte_eth_xstats_get_id_by_name to retrieve xstats ids by its names. doc: added release note Signed-off-by: Kuba Kozak Acked-by: Harry van Haaren --- doc/guides/rel_notes/release_17_05.rst | 2 ++ lib/librte_ether/rte_ethdev.c | 44 ++++++++++++++++++++++++++++++++++ lib/librte_ether/rte_ethdev.h | 20 ++++++++++++++++ lib/librte_ether/rte_ether_version.map | 1 + 4 files changed, 67 insertions(+) diff --git a/doc/guides/rel_notes/release_17_05.rst b/doc/guides/rel_notes/release_17_05.rst index 12d6b49..2e1463f 100644 --- a/doc/guides/rel_notes/release_17_05.rst +++ b/doc/guides/rel_notes/release_17_05.rst @@ -454,6 +454,8 @@ API Changes * Added new functions ``rte_eth_xstats_get_by_id`` and ``rte_eth_xstats_get_names_by_id`` + * Added new function ``rte_eth_xstats_get_id_by_name`` + ABI Changes ----------- diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index 331d2e3..8aa6331 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -1382,6 +1382,50 @@ get_xstats_count(uint8_t port_id) } int +rte_eth_xstats_get_id_by_name(uint8_t port_id, const char *xstat_name, + uint64_t *id) +{ + int cnt_xstats, idx_xstat; + + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); + + if (!id) { + RTE_PMD_DEBUG_TRACE("Error: id pointer is NULL\n"); + return -ENOMEM; + } + + if (!xstat_name) { + RTE_PMD_DEBUG_TRACE("Error: xstat_name pointer is NULL\n"); + return -ENOMEM; + } + + /* Get count */ + cnt_xstats = rte_eth_xstats_get_names_by_id(port_id, NULL, 0, NULL); + if (cnt_xstats < 0) { + RTE_PMD_DEBUG_TRACE("Error: Cannot get count of xstats\n"); + return -ENODEV; + } + + /* Get id-name lookup table */ + struct rte_eth_xstat_name xstats_names[cnt_xstats]; + + if (cnt_xstats != rte_eth_xstats_get_names_by_id( + port_id, xstats_names, cnt_xstats, NULL)) { + RTE_PMD_DEBUG_TRACE("Error: Cannot get xstats lookup\n"); + return -1; + } + + for (idx_xstat = 0; idx_xstat < cnt_xstats; idx_xstat++) { + if (!strcmp(xstats_names[idx_xstat].name, xstat_name)) { + *id = idx_xstat; + return 0; + }; + } + + return -EINVAL; +} + +int rte_eth_xstats_get_names_by_id(uint8_t port_id, struct rte_eth_xstat_name *xstats_names, unsigned int size, uint64_t *ids) diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 8594416..782a6a8 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -2389,6 +2389,26 @@ int rte_eth_xstats_get_by_id(uint8_t port_id, const uint64_t *ids, uint64_t *values, unsigned int n); /** + * Gets the ID of a statistic from its name. + * + * This function searches for the statistics using string compares, and + * as such should not be used on the fast-path. For fast-path retrieval of + * specific statistics, store the ID as provided in *id* from this function, + * and pass the ID to rte_eth_xstats_get() + * + * @param port_id The port to look up statistics from + * @param xstat_name The name of the statistic to return + * @param[out] id A pointer to an app-supplied uint64_t which should be + * set to the ID of the stat if the stat exists. + * @return + * 0 on success + * -ENODEV for invalid port_id, + * -EINVAL if the xstat_name doesn't exist in port_id + */ +int rte_eth_xstats_get_id_by_name(uint8_t port_id, const char *xstat_name, + uint64_t *id); + +/** * Reset extended statistics of an Ethernet device. * * @param port_id diff --git a/lib/librte_ether/rte_ether_version.map b/lib/librte_ether/rte_ether_version.map index 1abd717..d6726bb 100644 --- a/lib/librte_ether/rte_ether_version.map +++ b/lib/librte_ether/rte_ether_version.map @@ -152,6 +152,7 @@ DPDK_17.05 { rte_eth_dev_attach_secondary; rte_eth_find_next; rte_eth_xstats_get_by_id; + rte_eth_xstats_get_id_by_name; rte_eth_xstats_get_names_by_id; } DPDK_17.02;