MLX5 PMD RSS expansion implementation added L4 UDP or TCP
headers after ICMP.
For example:
ETH / IPv4 / ICMP expanded into  ETH / IPv4 / ICMP / {UDP | TCP}
ETH / IPv6 / ICMPv6 expanded into  ETH / IPv6 / ICMPv6 / {UDP | TCP}

The patch updates PMD expansion scheme to handle ICMP and ICMPv6 types
as non-expandable for RSS.

cc: sta...@dpdk.org

Fixes: c7870bfe09dc ("ethdev: move RSS expansion code to mlx5 driver")
Signed-off-by: Gregory Etelson <getel...@nvidia.com>
Acked-by: Matan Azrad <ma...@nvidia.com>
---
 drivers/net/mlx5/mlx5_flow.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 090de0366b..900ec8e4bc 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -150,6 +150,8 @@ mlx5_flow_is_rss_expandable_item(const struct rte_flow_item 
*item)
        case RTE_FLOW_ITEM_TYPE_UDP:
        case RTE_FLOW_ITEM_TYPE_TCP:
        case RTE_FLOW_ITEM_TYPE_ESP:
+       case RTE_FLOW_ITEM_TYPE_ICMP:
+       case RTE_FLOW_ITEM_TYPE_ICMP6:
        case RTE_FLOW_ITEM_TYPE_VXLAN:
        case RTE_FLOW_ITEM_TYPE_NVGRE:
        case RTE_FLOW_ITEM_TYPE_GRE:
@@ -563,10 +565,12 @@ enum mlx5_expansion {
        MLX5_EXPANSION_OUTER_IPV4_UDP,
        MLX5_EXPANSION_OUTER_IPV4_TCP,
        MLX5_EXPANSION_OUTER_IPV4_ESP,
+       MLX5_EXPANSION_OUTER_IPV4_ICMP,
        MLX5_EXPANSION_OUTER_IPV6,
        MLX5_EXPANSION_OUTER_IPV6_UDP,
        MLX5_EXPANSION_OUTER_IPV6_TCP,
        MLX5_EXPANSION_OUTER_IPV6_ESP,
+       MLX5_EXPANSION_OUTER_IPV6_ICMP6,
        MLX5_EXPANSION_VXLAN,
        MLX5_EXPANSION_STD_VXLAN,
        MLX5_EXPANSION_L3_VXLAN,
@@ -581,10 +585,12 @@ enum mlx5_expansion {
        MLX5_EXPANSION_IPV4_UDP,
        MLX5_EXPANSION_IPV4_TCP,
        MLX5_EXPANSION_IPV4_ESP,
+       MLX5_EXPANSION_IPV4_ICMP,
        MLX5_EXPANSION_IPV6,
        MLX5_EXPANSION_IPV6_UDP,
        MLX5_EXPANSION_IPV6_TCP,
        MLX5_EXPANSION_IPV6_ESP,
+       MLX5_EXPANSION_IPV6_ICMP6,
        MLX5_EXPANSION_IPV6_FRAG_EXT,
        MLX5_EXPANSION_GTP,
        MLX5_EXPANSION_GENEVE,
@@ -620,6 +626,7 @@ static const struct mlx5_flow_expand_node 
mlx5_support_expansion[] = {
                        (MLX5_EXPANSION_OUTER_IPV4_UDP,
                         MLX5_EXPANSION_OUTER_IPV4_TCP,
                         MLX5_EXPANSION_OUTER_IPV4_ESP,
+                        MLX5_EXPANSION_OUTER_IPV4_ICMP,
                         MLX5_EXPANSION_GRE,
                         MLX5_EXPANSION_NVGRE,
                         MLX5_EXPANSION_IPV4,
@@ -645,11 +652,15 @@ static const struct mlx5_flow_expand_node 
mlx5_support_expansion[] = {
                .type = RTE_FLOW_ITEM_TYPE_ESP,
                .rss_types = RTE_ETH_RSS_ESP,
        },
+       [MLX5_EXPANSION_OUTER_IPV4_ICMP] = {
+               .type = RTE_FLOW_ITEM_TYPE_ICMP,
+       },
        [MLX5_EXPANSION_OUTER_IPV6] = {
                .next = MLX5_FLOW_EXPAND_RSS_NEXT
                        (MLX5_EXPANSION_OUTER_IPV6_UDP,
                         MLX5_EXPANSION_OUTER_IPV6_TCP,
                         MLX5_EXPANSION_OUTER_IPV6_ESP,
+                        MLX5_EXPANSION_OUTER_IPV6_ICMP6,
                         MLX5_EXPANSION_IPV4,
                         MLX5_EXPANSION_IPV6,
                         MLX5_EXPANSION_GRE,
@@ -675,6 +686,9 @@ static const struct mlx5_flow_expand_node 
mlx5_support_expansion[] = {
                .type = RTE_FLOW_ITEM_TYPE_ESP,
                .rss_types = RTE_ETH_RSS_ESP,
        },
+       [MLX5_EXPANSION_OUTER_IPV6_ICMP6] = {
+               .type = RTE_FLOW_ITEM_TYPE_ICMP6,
+       },
        [MLX5_EXPANSION_VXLAN] = {
                .next = MLX5_FLOW_EXPAND_RSS_NEXT(MLX5_EXPANSION_ETH,
                                                  MLX5_EXPANSION_IPV4,
@@ -735,7 +749,8 @@ static const struct mlx5_flow_expand_node 
mlx5_support_expansion[] = {
        [MLX5_EXPANSION_IPV4] = {
                .next = MLX5_FLOW_EXPAND_RSS_NEXT(MLX5_EXPANSION_IPV4_UDP,
                                                  MLX5_EXPANSION_IPV4_TCP,
-                                                 MLX5_EXPANSION_IPV4_ESP),
+                                                 MLX5_EXPANSION_IPV4_ESP,
+                                                 MLX5_EXPANSION_IPV4_ICMP),
                .type = RTE_FLOW_ITEM_TYPE_IPV4,
                .rss_types = RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_FRAG_IPV4 |
                        RTE_ETH_RSS_NONFRAG_IPV4_OTHER,
@@ -752,10 +767,14 @@ static const struct mlx5_flow_expand_node 
mlx5_support_expansion[] = {
                .type = RTE_FLOW_ITEM_TYPE_ESP,
                .rss_types = RTE_ETH_RSS_ESP,
        },
+       [MLX5_EXPANSION_IPV4_ICMP] = {
+               .type = RTE_FLOW_ITEM_TYPE_ICMP,
+       },
        [MLX5_EXPANSION_IPV6] = {
                .next = MLX5_FLOW_EXPAND_RSS_NEXT(MLX5_EXPANSION_IPV6_UDP,
                                                  MLX5_EXPANSION_IPV6_TCP,
                                                  MLX5_EXPANSION_IPV6_ESP,
+                                                 MLX5_EXPANSION_IPV6_ICMP6,
                                                  MLX5_EXPANSION_IPV6_FRAG_EXT),
                .type = RTE_FLOW_ITEM_TYPE_IPV6,
                .rss_types = RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_FRAG_IPV6 |
@@ -776,6 +795,9 @@ static const struct mlx5_flow_expand_node 
mlx5_support_expansion[] = {
        [MLX5_EXPANSION_IPV6_FRAG_EXT] = {
                .type = RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,
        },
+       [MLX5_EXPANSION_IPV6_ICMP6] = {
+               .type = RTE_FLOW_ITEM_TYPE_ICMP6,
+       },
        [MLX5_EXPANSION_GTP] = {
                .next = MLX5_FLOW_EXPAND_RSS_NEXT(MLX5_EXPANSION_IPV4,
                                                  MLX5_EXPANSION_IPV6),
-- 
2.34.1

Reply via email to