From: Declan Doherty <declan.doherty@intel.com>
To: dev@dpdk.org
Cc: Declan Doherty <declan.doherty@intel.com>
Subject: [PATCH v3 1/4] ethdev: add group counter support to rte_flow
Date: Fri, 6 Apr 2018 13:24:00 +0100 [thread overview]
Message-ID: <1523017443-12414-2-git-send-email-declan.doherty@intel.com> (raw)
In-Reply-To: <1523017443-12414-1-git-send-email-declan.doherty@intel.com>
Add new RTE_FLOW_ACTION_TYPE_GROUP_COUNT action type to enable shared
counters across multiple flows on a single port or across multiple
flows on multiple ports within the same switch domain.
Introduce new API rte_flow_query_group_count to allow querying of group
counters.
Signed-off-by: Declan Doherty <declan.doherty@intel.com>
---
doc/guides/prog_guide/rte_flow.rst | 35 +++++++++++++++++++++
lib/librte_ether/rte_ethdev_version.map | 8 +++++
lib/librte_ether/rte_flow.c | 21 +++++++++++++
lib/librte_ether/rte_flow.h | 56 ++++++++++++++++++++++++++++++++-
lib/librte_ether/rte_flow_driver.h | 6 ++++
5 files changed, 125 insertions(+), 1 deletion(-)
diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index 961943d..fd33d19 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -1698,6 +1698,41 @@ Return values:
- 0 on success, a negative errno value otherwise and ``rte_errno`` is set.
+
+Group Count Query
+~~~~~~~~~~~~~~~~~
+
+Query group counter which can be associated with multiple flows on a specified
+port.
+
+This function allows retrieving of group counters. A group counter is a
+counter which can be shared among multiple flows on a single port or among
+multiple flows on multiple ports within the same switch domain. Data is
+gathered by special actions which must be present in the flow rule
+definition.
+
+.. code-block:: c
+
+ int
+ rte_flow_query_group_count(uint16_t port_id,
+ uint32_t group_counter_id,
+ struct rte_flow_query_count *count,
+ struct rte_flow_error *error);
+
+Arguments:
+
+- ``port_id``: port identifier of Ethernet device.
+- ``group_counter_id``: group counter identifier.
+- ``count``: group counter parameters.
+- ``error``: perform verbose error reporting if not NULL. PMDs initialize
+ this structure in case of error only.
+
+Return values:
+
+- 0 on success, a negative errno value otherwise and ``rte_errno`` is set.
+
+
+
Isolated mode
-------------
diff --git a/lib/librte_ether/rte_ethdev_version.map b/lib/librte_ether/rte_ethdev_version.map
index 34df6c8..cff6807 100644
--- a/lib/librte_ether/rte_ethdev_version.map
+++ b/lib/librte_ether/rte_ethdev_version.map
@@ -229,3 +229,11 @@ EXPERIMENTAL {
rte_mtr_stats_update;
} DPDK_17.11;
+
+
+EXPERIMENTAL {
+ global:
+
+ rte_flow_query_group_count
+
+} DPDK_18.05;
diff --git a/lib/librte_ether/rte_flow.c b/lib/librte_ether/rte_flow.c
index 38f2d27..e10b1d0 100644
--- a/lib/librte_ether/rte_flow.c
+++ b/lib/librte_ether/rte_flow.c
@@ -418,3 +418,24 @@ rte_flow_copy(struct rte_flow_desc *desc, size_t len,
}
return 0;
}
+
+int __rte_experimental
+rte_flow_query_group_count(uint16_t port_id,
+ uint32_t group_count_id,
+ struct rte_flow_query_count *count,
+ struct rte_flow_error *error)
+{
+ struct rte_eth_dev *dev = &rte_eth_devices[port_id];
+ const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);
+
+ if (!ops)
+ return -rte_errno;
+ if (likely(!!ops->query_group_count))
+ return flow_err(port_id,
+ ops->query_group_count(dev, group_count_id,
+ count, error),
+ error);
+ return rte_flow_error_set(error, ENOSYS,
+ RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
+ NULL, rte_strerror(ENOSYS));
+}
diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h
index 13e4202..7d1f89d 100644
--- a/lib/librte_ether/rte_flow.h
+++ b/lib/librte_ether/rte_flow.h
@@ -1010,7 +1010,19 @@ enum rte_flow_action_type {
*
* See struct rte_flow_action_security.
*/
- RTE_FLOW_ACTION_TYPE_SECURITY
+ RTE_FLOW_ACTION_TYPE_SECURITY,
+
+ /**
+ * Enable a shared flow group counter for flow. Group counters can be
+ * associated with multiples flows on the same port or on port within
+ * the same switch domain if supported by that device.
+ *
+ * Group counters can be retrieved and reset through
+ * rte_flow_query_group_count()
+ *
+ * See struct rte_flow_action_group_count.
+ */
+ RTE_FLOW_ACTION_TYPE_GROUP_COUNT
};
/**
@@ -1149,6 +1161,18 @@ struct rte_flow_action_security {
};
/**
+ * RTE_FLOW_ACTION_TYPE_GROUP_COUNT
+ *
+ * A packet/byte counter which can be shared across a group of flows programmed
+ * on the same port/switch domain.
+ *
+ * Non-terminating by default.
+ */
+struct rte_flow_action_group_count {
+ uint32_t id;
+};
+
+/**
* Definition of a single action.
*
* A list of actions is terminated by a END action.
@@ -1476,6 +1500,36 @@ rte_flow_copy(struct rte_flow_desc *fd, size_t len,
const struct rte_flow_item *items,
const struct rte_flow_action *actions);
+
+/**
+ * Get hit/bytes count for group counter.
+ *
+ * A group counter is a counter which can be shared among multiple flows on a
+ * single port or among multiple flows on multiple ports within the same
+ * switch domain.
+ *
+ * In the case of ports within the same switch domain a global name space is
+ * assumed for group_count_id value.
+ *
+ * @param[in] port_id
+ * Port identifier of Ethernet device.
+ * @param[in] group_count_id
+ * Group counter identifier to query
+ * @param[out] count
+ * Group counter value
+ * @param[out] error
+ * Perform verbose error reporting if not NULL. PMDs initialize this
+ * structure in case of error only.
+ *
+ * @return
+ * Negative error code (errno value) and rte_errno is set.
+ */
+int __rte_experimental
+rte_flow_query_group_count(uint16_t port_id,
+ uint32_t group_count_id,
+ struct rte_flow_query_count *count,
+ struct rte_flow_error *error);
+
#ifdef __cplusplus
}
#endif
diff --git a/lib/librte_ether/rte_flow_driver.h b/lib/librte_ether/rte_flow_driver.h
index 7778c8e..ef09465 100644
--- a/lib/librte_ether/rte_flow_driver.h
+++ b/lib/librte_ether/rte_flow_driver.h
@@ -96,6 +96,12 @@ struct rte_flow_ops {
(struct rte_eth_dev *,
int,
struct rte_flow_error *);
+ /** See rte_flow_query_group_count(). */
+ int (*query_group_count)
+ (struct rte_eth_dev *,
+ uint32_t,
+ struct rte_flow_query_count *,
+ struct rte_flow_error *);
};
/**
--
2.7.4
next prev parent reply other threads:[~2018-04-06 12:24 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-06 12:23 [PATCH v3 0/4] ethdev: Additions to support tunnel encap/decap offload Declan Doherty
2018-04-06 12:24 ` Declan Doherty [this message]
2018-04-06 20:26 ` [PATCH v3 1/4] ethdev: add group counter support to rte_flow Adrien Mazarguil
2018-04-09 14:22 ` Mohammad Abdul Awal
2018-04-09 15:23 ` Adrien Mazarguil
2018-04-06 12:24 ` [PATCH v3 2/4] ethdev: Add tunnel encap/decap actions Declan Doherty
2018-04-06 20:26 ` Adrien Mazarguil
2018-04-09 16:10 ` Mohammad Abdul Awal
2018-04-10 10:19 ` Adrien Mazarguil
2018-04-10 11:06 ` Shahaf Shuler
2018-04-17 14:58 ` Doherty, Declan
2018-04-06 12:24 ` [PATCH v3 3/4] ethdev: Add group action type to rte_flow Declan Doherty
2018-04-06 20:26 ` Adrien Mazarguil
2018-04-17 14:40 ` Doherty, Declan
2018-04-06 12:24 ` [PATCH v3 4/4] ethdev: Add metadata flow and action items support Declan Doherty
2018-04-06 20:27 ` Adrien Mazarguil
2018-04-17 14:40 ` Doherty, Declan
2018-04-27 7:41 ` Xueming(Steven) Li
2018-04-18 21:04 ` [PATCH v4 0/6] additions to support tunnel encap/decap Declan Doherty
2018-04-18 21:04 ` [PATCH v4 1/6] ethdev: Add tunnel encap/decap actions Declan Doherty
2018-04-19 13:03 ` Adrien Mazarguil
2018-04-23 11:00 ` Shahaf Shuler
2018-04-23 11:17 ` Doherty, Declan
2018-04-23 11:49 ` Adrien Mazarguil
2018-04-18 21:04 ` [PATCH v4 2/6] ethdev: Add jump action type to rte_flow Declan Doherty
2018-04-19 13:03 ` Adrien Mazarguil
2018-04-18 21:04 ` [PATCH v4 3/6] testpmd: add jump action Declan Doherty
2018-04-19 13:03 ` Adrien Mazarguil
2018-04-18 21:04 ` [PATCH v4 4/6] ethdev: add mark flow item to flow item types Declan Doherty
2018-04-19 13:03 ` Adrien Mazarguil
2018-04-23 11:10 ` Shahaf Shuler
2018-04-23 11:49 ` Adrien Mazarguil
2018-04-18 21:04 ` [PATCH v4 5/6] testpmd: add support for MARK flow item Declan Doherty
2018-04-19 13:03 ` Adrien Mazarguil
2018-04-18 21:04 ` [PATCH v4 6/6] ethdev: add shared counter support to rte_flow Declan Doherty
2018-04-19 13:03 ` Adrien Mazarguil
2018-04-23 11:11 ` [PATCH v4 0/6] additions to support tunnel encap/decap Shahaf Shuler
2018-04-23 11:13 ` Doherty, Declan
2018-04-23 15:56 ` [PATCH v5 0/4] ethdev " Declan Doherty
2018-04-23 15:56 ` [PATCH v5 1/4] ethdev: Add tunnel encap/decap actions Declan Doherty
2018-04-23 15:56 ` [PATCH v5 2/4] ethdev: Add group JUMP action Declan Doherty
2018-04-23 15:56 ` [PATCH v5 3/4] ethdev: add mark flow item to rte_flow_item_types Declan Doherty
2018-04-23 15:56 ` [PATCH v5 4/4] ethdev: add shared counter support to rte_flow Declan Doherty
2018-04-24 16:26 ` [PATCH v5 0/4] ethdev additions to support tunnel encap/decap Thomas Monjalon
2018-04-30 13:54 ` Thomas Monjalon
2018-04-25 22:05 ` Ferruh Yigit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1523017443-12414-2-git-send-email-declan.doherty@intel.com \
--to=declan.doherty@intel.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.