DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [RFC PATCH] ethdev: support priority based flow control
@ 2021-10-05 12:59 jerinj
  2021-11-17  9:48 ` Jerin Jacob
  0 siblings, 1 reply; 15+ messages in thread
From: jerinj @ 2021-10-05 12:59 UTC (permalink / raw)
  To: dev, Ori Kam, Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko
  Cc: ajit.khaparde, aboyer, beilei.xing, bruce.richardson, chas3,
	chenbo.xia, ciara.loftus, dsinghrawat, ed.czeck, evgenys, grive,
	g.singh, zhouguoyang, haiyue.wang, hkalra, heinrich.kuhn,
	hemant.agrawal, hyonkim, igorch, irusskikh, jgrajcia,
	jasvinder.singh, jianwang, jiawenwu, jingjing.wu, johndale,
	john.miller, linville, keith.wiles, kirankumark, oulijun, lironh,
	longli, mw, spinler, matan, matt.peters, maxime.coquelin, mk,
	humin29, pnalla, ndabilpuram, qiming.yang, qi.z.zhang, radhac,
	rahul.lakkireddy, rmody, rosen.xu, sachin.saxena, skoteshwar,
	shshaikh, shaibran, shepard.siegel, asomalap, somnath.kotur,
	sthemmin, steven.webster, skori, mtetsuyah, vburru, viacheslavo,
	xiao.w.wang, cloud.wangxiaoyun, yisen.zhuang, yongwang,
	xuanziyang2, Jerin Jacob

From: Jerin Jacob <jerinj@marvell.com>

rte_eth_dev_priority_flow_ctrl_set() based API is not generic as it
can not support other than VLAN priority mapping to PFC traffic class.

Introducing RTE_FLOW_ACTION_TYPE_PFC_SET_TC rte_flow action to
set the traffic class as per 802.1Qbb specification. This will enable,
Traffic class(8bit) to be selected based on any packet field like DSCP.

Also, making it as rte_flow action will enable fine control on
traffic class selection to a specific queue or VF etc.

Signed-off-by: Jerin Jacob <jerinj@marvell.com>
---

Planning to submit the testpmd and cnxk ethdev driver changes after receiving
the feedback on this.


 doc/guides/prog_guide/rte_flow.rst | 24 ++++++++++++++++++++++++
 lib/ethdev/rte_flow.c              |  1 +
 lib/ethdev/rte_flow.h              | 27 +++++++++++++++++++++++++++
 3 files changed, 52 insertions(+)

diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index 2b42d5ec8c..e59f8a2902 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -2999,6 +2999,30 @@ which is set in the packet meta-data (i.e. struct ``rte_mbuf::sched::color``)
    | ``meter_color`` | Packet color |
    +-----------------+--------------+

+Action: ``PFC_SET_TC``
+^^^^^^^^^^^^^^^^^^^^^^
+
+Set traffic class as per PFC (802.1Qbb) specification.
+
+This action must be used with any of the following action.
+
+- ``RTE_FLOW_ACTION_TYPE_QUEUE``
+- ``RTE_FLOW_ACTION_TYPE_RSS``
+- ``RTE_FLOW_ACTION_TYPE_PF``
+- ``RTE_FLOW_ACTION_TYPE_VF``
+- ``RTE_FLOW_ACTION_TYPE_PHY_PORT``
+- ``RTE_FLOW_ACTION_TYPE_PORT_ID``
+
+.. _table_rte_flow_action_pfc_set_tc:
+
+.. table:: PFC_SET_PRIORITY
+
+   +-----------------+-------------------------------------+
+   | Field           | Value                               |
+   +=================+=====================================+
+   | ``tc``          | Traffic class as per PFC (802.1Qbb) |
+   +-----------------+-------------------------------------+
+
 Negative types
 ~~~~~~~~~~~~~~

diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index 8cb7a069c8..75c661159e 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -189,6 +189,7 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = {
 	 */
 	MK_FLOW_ACTION(INDIRECT, 0),
 	MK_FLOW_ACTION(CONNTRACK, sizeof(struct rte_flow_action_conntrack)),
+	MK_FLOW_ACTION(PFC_SET_TC, sizeof(struct rte_flow_action_pfc_set_tc)),
 };

 int
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index 7b1ed7f110..5298418e9e 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -2409,6 +2409,13 @@ enum rte_flow_action_type {
 	 * See struct rte_flow_action_meter_color.
 	 */
 	RTE_FLOW_ACTION_TYPE_METER_COLOR,
+
+	/**
+	 * Set traffic class as per PFC (802.1Qbb) specification.
+	 *
+	 * See struct rte_flow_action_pfc_set_tc.
+	 */
+	RTE_FLOW_ACTION_TYPE_PFC_SET_TC,
 };

 /**
@@ -3168,6 +3175,26 @@ struct rte_flow_action_meter_color {
 	enum rte_color color; /**< Packet color. */
 };

+/**
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ACTION_TYPE_PFC_SET_TC
+ *
+ * Set traffic class as per PFC (802.1Qbb) specification.
+ *
+ * This action must be used any of the following action.
+ * - RTE_FLOW_ACTION_TYPE_QUEUE,
+ * - RTE_FLOW_ACTION_TYPE_RSS,
+ * - RTE_FLOW_ACTION_TYPE_PF,
+ * - RTE_FLOW_ACTION_TYPE_VF,
+ * - RTE_FLOW_ACTION_TYPE_PHY_PORT,
+ * - RTE_FLOW_ACTION_TYPE_PORT_ID
+ */
+struct rte_flow_action_pfc_set_tc {
+	uint8_t tc; /**< Traffic class as per PFC (802.1Qbb) specification */
+};
+
 /**
  * Field IDs for MODIFY_FIELD action.
  */
--
2.33.0


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2021-12-04 17:30 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-05 12:59 [dpdk-dev] [RFC PATCH] ethdev: support priority based flow control jerinj
2021-11-17  9:48 ` Jerin Jacob
2021-11-21  9:50   ` Ori Kam
2021-11-23 10:58     ` Jerin Jacob
2021-11-23 19:07       ` Ajit Khaparde
2021-11-24  9:31       ` Ori Kam
2021-11-24 10:48         ` Jerin Jacob
2021-11-24 16:00           ` Ori Kam
2021-11-25 11:12             ` Jerin Jacob
2021-11-25 14:02               ` Ori Kam
2021-11-26  6:46                 ` Jerin Jacob
2021-11-28 11:31                   ` Ori Kam
2021-11-28 11:37                     ` Jerin Jacob
2021-11-29 14:54                       ` Jerin Jacob
2021-12-04 17:30                         ` Jerin Jacob

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).