Thread (1 message) 1 message, 1 author, 2017-10-03

Re: [PATCH 2/2] net/tap: allow RSS flow action

From: Matan Azrad <hidden>
Date: 2017-10-03 15:07:38

I sent it from root user by mistake, sorry!
I Sent it again with my user.
quoted hunk
-----Original Message-----
From: root [mailto:root@pegasus12.mtr.labs.mlnx]
Sent: Tuesday, October 3, 2017 5:52 PM
To: Pascal Mazon <redacted>
Cc: dev@dpdk.org; Matan Azrad <redacted>
Subject: [PATCH 2/2] net/tap: allow RSS flow action

From: Matan Azrad <redacted>

One of the main identified use cases for the tap PMD is to be used in
combination with the fail-safe PMD as a fallback for a physical device.

Fail-safe is very strict about making sure its current configuration is properly
applied to all slave devices, they get rejected otherwise in order to maintain
a consistent state.

The problem is that tap's RSS support is currently limited to the default (non-
Toeplitz) balancing performed by the kernel on all Rx queues. While proper
RSS support emulation in the tap PMD is a work in progress, the lack of
rte_flow counterpart prevents validation of the above use case in the
meantime.

Given that unlike most PMDs, tap is more about convenience than
performance, support for the RSS action can be temporarily faked with a
minimum amount of code and mostly correct behavior by treating it like a
QUEUE action. Traffic is directed to the first queue of the set.

Signed-off-by: Matan Azrad <redacted>
---
 drivers/net/tap/tap_flow.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c index
aa33960..28d793f 100644
--- a/drivers/net/tap/tap_flow.c
+++ b/drivers/net/tap/tap_flow.c
@@ -1089,6 +1089,7 @@ struct tap_flow_items {
 			const struct rte_flow_action_queue *queue =
 				(const struct rte_flow_action_queue *)
 				actions->conf;
+
 			if (action)
 				goto exit_action_not_supported;
 			action = 1;
@@ -1097,6 +1098,20 @@ struct tap_flow_items {
 				goto exit_action_not_supported;
 			if (flow)
 				err = add_action_skbedit(flow, queue-
quoted
index);
+		} else if (actions->type == RTE_FLOW_ACTION_TYPE_RSS) {
+			/* Fake RSS support. */
+			const struct rte_flow_action_rss *rss =
+				(const struct rte_flow_action_rss *)
+				actions->conf;
+
+			if (action)
+				goto exit_action_not_supported;
+			action = 1;
+			if (!rss || rss->num < 1 ||
+			    (rss->queue[0] > pmd->dev->data->nb_rx_queues
- 1))
+				goto exit_action_not_supported;
+			if (flow)
+				err = add_action_skbedit(flow, rss-
quoted
queue[0]);
 		} else {
 			goto exit_action_not_supported;
 		}
--
1.8.3.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help