[DR_ACTION_TYP_INSERT_HDR] = "DR_ACTION_TYP_INSERT_HDR",
        [DR_ACTION_TYP_REMOVE_HDR] = "DR_ACTION_TYP_REMOVE_HDR",
        [DR_ACTION_TYP_ASO_FLOW_METER] = "DR_ACTION_TYP_ASO_FLOW_METER",
+       [DR_ACTION_TYP_RANGE] = "DR_ACTION_TYP_RANGE",
        [DR_ACTION_TYP_MAX] = "DR_ACTION_UNKNOWN",
 };
 
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_QP]              = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_TAG]             = DR_ACTION_STATE_NON_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_NON_TERM,
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_QP]              = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_TAG]             = DR_ACTION_STATE_DECAP,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_DECAP,
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_QP]              = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_TAG]             = DR_ACTION_STATE_ENCAP,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_ENCAP,
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_QP]              = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_TAG]             = DR_ACTION_STATE_MODIFY_HDR,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_MODIFY_HDR,
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_QP]              = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_TAG]             = DR_ACTION_STATE_POP_VLAN,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_POP_VLAN,
                [DR_ACTION_STATE_PUSH_VLAN] = {
                        [DR_ACTION_TYP_QP]              = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_TAG]             = DR_ACTION_STATE_PUSH_VLAN,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_PUSH_VLAN,
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_QP]              = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_TAG]             = DR_ACTION_STATE_NON_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_NON_TERM,
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_QP]              = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_ASO,
                },
                [DR_ACTION_STATE_TERM] = {
                [DR_ACTION_STATE_NO_ACTION] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_NON_TERM,
                        [DR_ACTION_TYP_L2_TO_TNL_L2]    = DR_ACTION_STATE_ENCAP,
                [DR_ACTION_STATE_DECAP] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_DECAP,
                        [DR_ACTION_TYP_ASO_FLOW_METER]  = DR_ACTION_STATE_ASO,
                [DR_ACTION_STATE_ENCAP] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_ENCAP,
                        [DR_ACTION_TYP_ASO_FLOW_METER]  = DR_ACTION_STATE_ASO,
                [DR_ACTION_STATE_MODIFY_HDR] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_MODIFY_HDR,
                        [DR_ACTION_TYP_L2_TO_TNL_L2]    = DR_ACTION_STATE_ENCAP,
                },
                [DR_ACTION_STATE_POP_VLAN] = {
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_POP_VLAN,
                        [DR_ACTION_TYP_POP_VLAN]        = DR_ACTION_STATE_POP_VLAN,
                [DR_ACTION_STATE_PUSH_VLAN] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_PUSH_VLAN,
                        [DR_ACTION_TYP_PUSH_VLAN]       = DR_ACTION_STATE_PUSH_VLAN,
                [DR_ACTION_STATE_NON_TERM] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_NON_TERM,
                        [DR_ACTION_TYP_L2_TO_TNL_L2]    = DR_ACTION_STATE_ENCAP,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_ASO,
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                },
                [DR_ACTION_STATE_TERM] = {
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_TERM,
                [DR_ACTION_STATE_NO_ACTION] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_NON_TERM,
                        [DR_ACTION_TYP_TNL_L2_TO_L2]    = DR_ACTION_STATE_DECAP,
                [DR_ACTION_STATE_DECAP] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_DECAP,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_MODIFY_HDR]      = DR_ACTION_STATE_MODIFY_HDR,
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_QP]              = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_VPORT]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_ENCAP,
                [DR_ACTION_STATE_MODIFY_HDR] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_MODIFY_HDR,
                        [DR_ACTION_TYP_VPORT]           = DR_ACTION_STATE_TERM,
                [DR_ACTION_STATE_POP_VLAN] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_POP_VLAN]        = DR_ACTION_STATE_POP_VLAN,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_POP_VLAN,
                [DR_ACTION_STATE_PUSH_VLAN] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_PUSH_VLAN]       = DR_ACTION_STATE_PUSH_VLAN,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_PUSH_VLAN,
                [DR_ACTION_STATE_NON_TERM] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_NON_TERM,
                        [DR_ACTION_TYP_TNL_L2_TO_L2]    = DR_ACTION_STATE_DECAP,
                [DR_ACTION_STATE_ASO] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_VPORT]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_ASO,
                },
                [DR_ACTION_STATE_NO_ACTION] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_NON_TERM,
                        [DR_ACTION_TYP_MODIFY_HDR]      = DR_ACTION_STATE_MODIFY_HDR,
                [DR_ACTION_STATE_DECAP] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_DECAP,
                        [DR_ACTION_TYP_VPORT]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                [DR_ACTION_STATE_ENCAP] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_ENCAP,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_VPORT]           = DR_ACTION_STATE_TERM,
                [DR_ACTION_STATE_MODIFY_HDR] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_MODIFY_HDR,
                        [DR_ACTION_TYP_L2_TO_TNL_L2]    = DR_ACTION_STATE_ENCAP,
                },
                [DR_ACTION_STATE_POP_VLAN] = {
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_POP_VLAN,
                        [DR_ACTION_TYP_POP_VLAN]        = DR_ACTION_STATE_POP_VLAN,
                [DR_ACTION_STATE_PUSH_VLAN] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_PUSH_VLAN]       = DR_ACTION_STATE_PUSH_VLAN,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_PUSH_VLAN,
                [DR_ACTION_STATE_NON_TERM] = {
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_SAMPLER]         = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_NON_TERM,
                        [DR_ACTION_TYP_MODIFY_HDR]      = DR_ACTION_STATE_MODIFY_HDR,
                        [DR_ACTION_TYP_PUSH_VLAN]       = DR_ACTION_STATE_PUSH_VLAN,
                        [DR_ACTION_TYP_DROP]            = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_FT]              = DR_ACTION_STATE_TERM,
+                       [DR_ACTION_TYP_RANGE]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_VPORT]           = DR_ACTION_STATE_TERM,
                        [DR_ACTION_TYP_CTR]             = DR_ACTION_STATE_ASO,
                },
                        if (ret)
                                return ret;
                        break;
+               case DR_ACTION_TYP_RANGE:
+                       ret = dr_action_get_dest_tbl_addr(matcher,
+                                                         action->range->hit_tbl_action->dest_tbl,
+                                                         rx_rule, &attr.final_icm_addr);
+                       if (ret)
+                               return ret;
+
+                       ret = dr_action_get_dest_tbl_addr(matcher,
+                                                         action->range->miss_tbl_action->dest_tbl,
+                                                         rx_rule, &attr.range.miss_icm_addr);
+                       if (ret)
+                               return ret;
+
+                       attr.range.definer_id = action->range->definer_id;
+                       attr.range.min = action->range->min;
+                       attr.range.max = action->range->max;
+                       break;
                case DR_ACTION_TYP_QP:
                        mlx5dr_info(dmn, "Domain doesn't support QP\n");
                        return -EOPNOTSUPP;
        [DR_ACTION_TYP_REMOVE_HDR]   = sizeof(struct mlx5dr_action_reformat),
        [DR_ACTION_TYP_SAMPLER]      = sizeof(struct mlx5dr_action_sampler),
        [DR_ACTION_TYP_ASO_FLOW_METER] = sizeof(struct mlx5dr_action_aso_flow_meter),
+       [DR_ACTION_TYP_RANGE]        = sizeof(struct mlx5dr_action_range),
 };
 
 static struct mlx5dr_action *
        return NULL;
 }
 
+static void dr_action_range_definer_fill(u16 *format_id,
+                                        u8 *dw_selectors,
+                                        u8 *byte_selectors,
+                                        u8 *match_mask)
+{
+       int i;
+
+       *format_id = MLX5_IFC_DEFINER_FORMAT_ID_SELECT;
+
+       dw_selectors[0] = MLX5_IFC_DEFINER_FORMAT_OFFSET_OUTER_ETH_PKT_LEN / 4;
+
+       for (i = 1; i < MLX5_IFC_DEFINER_DW_SELECTORS_NUM; i++)
+               dw_selectors[i] = MLX5_IFC_DEFINER_FORMAT_OFFSET_UNUSED;
+
+       for (i = 0; i < MLX5_IFC_DEFINER_BYTE_SELECTORS_NUM; i++)
+               byte_selectors[i] = MLX5_IFC_DEFINER_FORMAT_OFFSET_UNUSED;
+
+       MLX5_SET(match_definer_match_mask, match_mask,
+                match_dw_0, 0xffffUL << 16);
+}
+
+static int dr_action_create_range_definer(struct mlx5dr_action *action)
+{
+       u8 match_mask[MLX5_FLD_SZ_BYTES(match_definer, match_mask)] = {};
+       u8 byte_selectors[MLX5_IFC_DEFINER_BYTE_SELECTORS_NUM] = {};
+       u8 dw_selectors[MLX5_IFC_DEFINER_DW_SELECTORS_NUM] = {};
+       struct mlx5dr_domain *dmn = action->range->dmn;
+       u32 definer_id;
+       u16 format_id;
+       int ret;
+
+       dr_action_range_definer_fill(&format_id,
+                                    dw_selectors,
+                                    byte_selectors,
+                                    match_mask);
+
+       ret = mlx5dr_definer_get(dmn, format_id,
+                                dw_selectors, byte_selectors,
+                                match_mask, &definer_id);
+       if (ret)
+               return ret;
+
+       action->range->definer_id = definer_id;
+       return 0;
+}
+
+static void dr_action_destroy_range_definer(struct mlx5dr_action *action)
+{
+       mlx5dr_definer_put(action->range->dmn, action->range->definer_id);
+}
+
+struct mlx5dr_action *
+mlx5dr_action_create_dest_match_range(struct mlx5dr_domain *dmn,
+                                     u32 field,
+                                     struct mlx5_flow_table *hit_ft,
+                                     struct mlx5_flow_table *miss_ft,
+                                     u32 min,
+                                     u32 max)
+{
+       struct mlx5dr_action *action;
+       int ret;
+
+       if (!mlx5dr_supp_match_ranges(dmn->mdev)) {
+               mlx5dr_dbg(dmn, "SELECT definer support is needed for match range\n");
+               return NULL;
+       }
+
+       if (field != MLX5_FLOW_DEST_RANGE_FIELD_PKT_LEN ||
+           min > 0xffff || max > 0xffff) {
+               mlx5dr_err(dmn, "Invalid match range parameters\n");
+               return NULL;
+       }
+
+       action = dr_action_create_generic(DR_ACTION_TYP_RANGE);
+       if (!action)
+               return NULL;
+
+       action->range->hit_tbl_action =
+               mlx5dr_is_fw_table(hit_ft) ?
+                       mlx5dr_action_create_dest_flow_fw_table(dmn, hit_ft) :
+                       mlx5dr_action_create_dest_table(hit_ft->fs_dr_table.dr_table);
+
+       if (!action->range->hit_tbl_action)
+               goto free_action;
+
+       action->range->miss_tbl_action =
+               mlx5dr_is_fw_table(miss_ft) ?
+                       mlx5dr_action_create_dest_flow_fw_table(dmn, miss_ft) :
+                       mlx5dr_action_create_dest_table(miss_ft->fs_dr_table.dr_table);
+
+       if (!action->range->miss_tbl_action)
+               goto free_hit_tbl_action;
+
+       action->range->min = min;
+       action->range->max = max;
+       action->range->dmn = dmn;
+
+       ret = dr_action_create_range_definer(action);
+       if (ret)
+               goto free_miss_tbl_action;
+
+       /* No need to increase refcount on domain for this action,
+        * the hit/miss table actions will do it internally.
+        */
+
+       return action;
+
+free_miss_tbl_action:
+       mlx5dr_action_destroy(action->range->miss_tbl_action);
+free_hit_tbl_action:
+       mlx5dr_action_destroy(action->range->hit_tbl_action);
+free_action:
+       kfree(action);
+
+       return NULL;
+}
+
 struct mlx5dr_action *
 mlx5dr_action_create_mult_dest_tbl(struct mlx5dr_domain *dmn,
                                   struct mlx5dr_action_dest *dests,
        case DR_ACTION_TYP_ASO_FLOW_METER:
                refcount_dec(&action->aso->dmn->refcount);
                break;
+       case DR_ACTION_TYP_RANGE:
+               dr_action_destroy_range_definer(action);
+               mlx5dr_action_destroy(action->range->miss_tbl_action);
+               mlx5dr_action_destroy(action->range->hit_tbl_action);
+               break;
        default:
                break;
        }