[dpdk-dev] [PATCH 2/2] net/tap: allow RSS flow action
Matan Azrad
matan at mellanox.com
Tue Oct 3 17:07:37 CEST 2017
I sent it from root user by mistake, sorry!
I Sent it again with my user.
> -----Original Message-----
> From: root [mailto:root at pegasus12.mtr.labs.mlnx]
> Sent: Tuesday, October 3, 2017 5:52 PM
> To: Pascal Mazon <pascal.mazon at 6wind.com>
> Cc: dev at dpdk.org; Matan Azrad <matan at mellanox.com>
> Subject: [PATCH 2/2] net/tap: allow RSS flow action
>
> From: Matan Azrad <matan at mellanox.com>
>
> 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 <matan at mellanox.com>
> ---
> 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-
> >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-
> >queue[0]);
> } else {
> goto exit_action_not_supported;
> }
> --
> 1.8.3.1
More information about the dev
mailing list