net/mlx5: Introduce new uplink destination type
authorMaor Gottlieb <maorg@nvidia.com>
Tue, 3 Aug 2021 07:04:41 +0000 (10:04 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Tue, 19 Oct 2021 03:18:08 +0000 (20:18 -0700)
The uplink destination type should be used in rules to steer the
packet to the uplink when the device is in steering based LAG mode.

Signed-off-by: Maor Gottlieb <maorg@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/diag/fs_tracepoint.c
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c
include/linux/mlx5/mlx5_ifc.h

index 87d65f6b53104f1aea18714cc374d3f53a1017cf..7841ef6c193c7f6fbfaf34d687acf373811830db 100644 (file)
@@ -235,6 +235,9 @@ const char *parse_fs_dst(struct trace_seq *p,
        const char *ret = trace_seq_buffer_ptr(p);
 
        switch (dst->type) {
+       case MLX5_FLOW_DESTINATION_TYPE_UPLINK:
+               trace_seq_printf(p, "uplink\n");
+               break;
        case MLX5_FLOW_DESTINATION_TYPE_VPORT:
                trace_seq_printf(p, "vport=%u\n", dst->vport.num);
                break;
index 2c82dc118460bb52e223bd06124c6a8236fa093d..750b21124a1ae09411e0530d01409543624a5c00 100644 (file)
@@ -577,8 +577,8 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
                        case MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE:
                                id = dst->dest_attr.ft->id;
                                break;
+                       case MLX5_FLOW_DESTINATION_TYPE_UPLINK:
                        case MLX5_FLOW_DESTINATION_TYPE_VPORT:
-                               id = dst->dest_attr.vport.num;
                                MLX5_SET(dest_format_struct, in_dests,
                                         destination_eswitch_owner_vhca_id_valid,
                                         !!(dst->dest_attr.vport.flags &
@@ -586,6 +586,12 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
                                MLX5_SET(dest_format_struct, in_dests,
                                         destination_eswitch_owner_vhca_id,
                                         dst->dest_attr.vport.vhca_id);
+                               if (type == MLX5_FLOW_DESTINATION_TYPE_UPLINK) {
+                                       /* destination_id is reserved */
+                                       id = 0;
+                                       break;
+                               }
+                               id = dst->dest_attr.vport.num;
                                if (extended_dest &&
                                    dst->dest_attr.vport.pkt_reformat) {
                                        MLX5_SET(dest_format_struct, in_dests,
index 8f41145bc6efca9491dd5edb51eca4d3a3f1cc96..09e43019d87701347602ca42e04813e8ec059e01 100644 (file)
@@ -1766,6 +1766,7 @@ enum mlx5_flow_destination_type {
        MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE   = 0x1,
        MLX5_FLOW_DESTINATION_TYPE_TIR          = 0x2,
        MLX5_FLOW_DESTINATION_TYPE_FLOW_SAMPLER = 0x6,
+       MLX5_FLOW_DESTINATION_TYPE_UPLINK       = 0x8,
 
        MLX5_FLOW_DESTINATION_TYPE_PORT         = 0x99,
        MLX5_FLOW_DESTINATION_TYPE_COUNTER      = 0x100,