[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