All of lore.kernel.org
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] net/ice: support flow redirect function
@ 2020-03-30 16:37 Beilei Xing
  2020-03-30  8:01 ` Yang, Qiming
  2020-03-30 17:38 ` [dpdk-dev] [PATCH v2 0/2] add " Beilei Xing
  0 siblings, 2 replies; 7+ messages in thread
From: Beilei Xing @ 2020-03-30 16:37 UTC (permalink / raw)
  To: dev, haiyue.wang, qiming.yang, qi.z.zhang

Add a new ops "redirect" to flow engine, it's used to implement the
function that redirect a flow's destination. Currently only support
VSI-Redirect which will be used by DCF for handling VSI mapping table
change.
A new API "ice_flow_redirect" is exposed, current usage is: it could
be called when VSI mapping table change happens.

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/ice/ice_generic_flow.c | 22 ++++++++++++++++++++++
 drivers/net/ice/ice_generic_flow.h | 21 +++++++++++++++++++++
 2 files changed, 43 insertions(+)

diff --git a/drivers/net/ice/ice_generic_flow.c b/drivers/net/ice/ice_generic_flow.c
index a1648ee..823ff0e 100644
--- a/drivers/net/ice/ice_generic_flow.c
+++ b/drivers/net/ice/ice_generic_flow.c
@@ -1961,3 +1961,25 @@ ice_flow_query(struct rte_eth_dev *dev,
 	}
 	return ret;
 }
+
+int
+ice_flow_redirect(struct ice_adapter *ad,
+		  struct ice_flow_redirect *rd)
+{
+	struct ice_pf *pf = &ad->pf;
+	struct rte_flow *p_flow;
+	void *temp;
+	int ret;
+
+	TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) {
+		if (!p_flow->engine->redirect)
+			continue;
+		ret = p_flow->engine->redirect(ad, p_flow, rd);
+		if (ret) {
+			PMD_DRV_LOG(ERR, "Failed to redirect flows");
+			return ret;
+		}
+	}
+
+	return 0;
+}
diff --git a/drivers/net/ice/ice_generic_flow.h b/drivers/net/ice/ice_generic_flow.h
index adc30ee..ede6ec8 100644
--- a/drivers/net/ice/ice_generic_flow.h
+++ b/drivers/net/ice/ice_generic_flow.h
@@ -417,6 +417,20 @@ struct ice_pattern_match_item {
 	void *meta;
 };
 
+enum ice_flow_redirect_type {
+	ICE_FLOW_REDIRECT_VSI,
+};
+
+struct ice_flow_redirect {
+	enum ice_flow_redirect_type type;
+	union {
+		struct {
+			uint16_t vsi_handle;
+			uint16_t new_vsi_num;
+		};
+	};
+};
+
 typedef int (*engine_init_t)(struct ice_adapter *ad);
 typedef void (*engine_uninit_t)(struct ice_adapter *ad);
 typedef int (*engine_create_t)(struct ice_adapter *ad,
@@ -430,6 +444,9 @@ typedef int (*engine_query_t)(struct ice_adapter *ad,
 		struct rte_flow *flow,
 		struct rte_flow_query_count *count,
 		struct rte_flow_error *error);
+typedef int(*engine_redirect_t)(struct ice_adapter *ad,
+				struct rte_flow *flow,
+				struct ice_flow_redirect *redirect);
 typedef void (*engine_free_t) (struct rte_flow *flow);
 typedef int (*parse_pattern_action_t)(struct ice_adapter *ad,
 		struct ice_pattern_match_item *array,
@@ -447,6 +464,7 @@ struct ice_flow_engine {
 	engine_create_t create;
 	engine_destroy_t destroy;
 	engine_query_t query_count;
+	engine_redirect_t redirect;
 	engine_free_t free;
 	enum ice_flow_engine_type type;
 };
@@ -485,4 +503,7 @@ ice_search_pattern_match_item(const struct rte_flow_item pattern[],
 		struct ice_pattern_match_item *array,
 		uint32_t array_len,
 		struct rte_flow_error *error);
+int
+ice_flow_redirect(struct ice_adapter *ad,
+		  struct ice_flow_redirect *rd);
 #endif
-- 
2.7.4


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

end of thread, other threads:[~2020-03-31  2:49 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-30 16:37 [dpdk-dev] [PATCH] net/ice: support flow redirect function Beilei Xing
2020-03-30  8:01 ` Yang, Qiming
2020-03-30 17:38 ` [dpdk-dev] [PATCH v2 0/2] add " Beilei Xing
2020-03-30 17:38   ` [dpdk-dev] [PATCH v2 1/2] net/ice: support " Beilei Xing
2020-03-31  2:45     ` Ye Xiaolong
2020-03-30 17:38   ` [dpdk-dev] [PATCH v2 2/2] net/ice: support flow ops thread safe Beilei Xing
2020-03-31  2:46   ` [dpdk-dev] [PATCH v2 0/2] add flow redirect function Ye Xiaolong

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.