net/mlx5: TC, Add support for SF tunnel offload
authorRoi Dayan <roid@nvidia.com>
Wed, 13 Jul 2022 06:37:10 +0000 (09:37 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Tue, 23 Aug 2022 05:44:26 +0000 (22:44 -0700)
VF tunnel flow already exists and SF tunnel is the
same flow.  Support offloading of tunneling over SF device
by allow to attach an encap route over SF and set to use
indirect flow table on SF.

Signed-off-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Reviewed-by: Maor Dickman <maord@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
drivers/net/ethernet/mellanox/mlx5/core/esw/indir_table.c

index 0b98e117cc0afada97b7817d1b5dd753e4f59881..0872a214d2a3bc40ed5facfda3f25da0059b4426 100644 (file)
@@ -1505,8 +1505,11 @@ bool mlx5e_tc_is_vf_tunnel(struct net_device *out_dev, struct net_device *route_
        route_priv = netdev_priv(route_dev);
        route_mdev = route_priv->mdev;
 
-       if (out_mdev->coredev_type != MLX5_COREDEV_PF ||
-           route_mdev->coredev_type != MLX5_COREDEV_VF)
+       if (out_mdev->coredev_type != MLX5_COREDEV_PF)
+               return false;
+
+       if (route_mdev->coredev_type != MLX5_COREDEV_VF &&
+           route_mdev->coredev_type != MLX5_COREDEV_SF)
                return false;
 
        return mlx5e_same_hw_devs(out_priv, route_priv);
index 0abef71cb839b81ae803d8bfe42b0d6c39c8e8e0..c9a91158e99c99199c40181d41a21639932d4aab 100644 (file)
@@ -78,12 +78,16 @@ mlx5_esw_indir_table_needed(struct mlx5_eswitch *esw,
                            struct mlx5_core_dev *dest_mdev)
 {
        struct mlx5_esw_flow_attr *esw_attr = attr->esw_attr;
+       bool vf_sf_vport;
+
+       vf_sf_vport = mlx5_eswitch_is_vf_vport(esw, vport_num) ||
+                     mlx5_esw_is_sf_vport(esw, vport_num);
 
        /* Use indirect table for all IP traffic from UL to VF with vport
         * destination when source rewrite flag is set.
         */
        return esw_attr->in_rep->vport == MLX5_VPORT_UPLINK &&
-               mlx5_eswitch_is_vf_vport(esw, vport_num) &&
+               vf_sf_vport &&
                esw->dev == dest_mdev &&
                attr->ip_version &&
                attr->flags & MLX5_ATTR_FLAG_SRC_REWRITE;