[2/2] net/mlx5: support IPIP flow for all combinations
Checks
Commit Message
IP-in-IP tunnel type includes the following combination:
- IPv4 over IPv4
- IPv4 over IPv6
- IPv6 over IPv4
- IPv6 over IPv6
It's okay to have MLX5_FLOW_LAYER_IPIP flag when validate IPv6 item.
And it's okay to have outer L3 layer as either IPv4 or IPv6 when
setting the IP-in-IP tunnel item flag.
Signed-off-by: Junfeng Guo <junfengg@nvidia.com>
Acked-by: Bing Zhao <bingz@nvidia.com>
---
drivers/net/mlx5/mlx5_flow.c | 5 -----
drivers/net/mlx5/mlx5_flow_hw.c | 3 ++-
2 files changed, 2 insertions(+), 6 deletions(-)
@@ -2973,11 +2973,6 @@ mlx5_flow_validate_item_ipv6(const struct rte_eth_dev *dev,
RTE_FLOW_ERROR_TYPE_ITEM, item,
"IPv6 proto (next header) should "
"not be set as extension header");
- if (item_flags & MLX5_FLOW_LAYER_IPIP)
- return rte_flow_error_set(error, EINVAL,
- RTE_FLOW_ERROR_TYPE_ITEM, item,
- "wrong tunnel type - IPv4 specified "
- "but IPv6 item provided");
if (item_flags & l3m)
return rte_flow_error_set(error, ENOTSUP,
RTE_FLOW_ERROR_TYPE_ITEM, item,
@@ -8325,7 +8325,8 @@ mlx5_hw_flow_tunnel_ip_check(uint64_t last_item, uint64_t *item_flags)
{
bool tunnel;
- if (last_item == MLX5_FLOW_LAYER_OUTER_L3_IPV4) {
+ if (last_item == MLX5_FLOW_LAYER_OUTER_L3_IPV4 ||
+ last_item == MLX5_FLOW_LAYER_OUTER_L3_IPV6) {
tunnel = true;
*item_flags |= MLX5_FLOW_LAYER_IPIP;
} else if (last_item == MLX5_FLOW_LAYER_OUTER_L3_IPV6 ||