// Copyright 2016 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Handles setting basic cgroup properties.  The format of the cgroup files can
// be found in the linux kernel at Documentation/cgroups/.

#ifndef LIBCONTAINER_CGROUP_H_
#define LIBCONTAINER_CGROUP_H_

#include <sys/types.h>

#include <memory>
#include <string>

#include <base/callback_forward.h>
#include <base/files/file_path.h>

namespace libcontainer {

class Cgroup {
 public:
  enum Type : int32_t {
    CPU,
    CPUACCT,
    CPUSET,
    DEVICES,
    FREEZER,
    SCHEDTUNE,

    NUM_TYPES,
  };

  static std::unique_ptr<Cgroup> Create(base::StringPiece name,
                                        const base::FilePath& cgroup_root,
                                        const base::FilePath& cgroup_parent,
                                        uid_t cgroup_owner,
                                        gid_t cgroup_group);
  virtual ~Cgroup();

  virtual bool Freeze();
  virtual bool Thaw();
  virtual bool DenyAllDevices();
  virtual bool AddDevice(bool allow,
                         int major,
                         int minor,
                         bool read,
                         bool write,
                         bool modify,
                         char type);
  virtual bool SetCpuShares(int shares);
  virtual bool SetCpuQuota(int quota);
  virtual bool SetCpuPeriod(int period);
  virtual bool SetCpuRtRuntime(int rt_runtime);
  virtual bool SetCpuRtPeriod(int rt_period);

  bool has_tasks_path(int32_t t) const {
    return !cgroup_tasks_paths_[t].empty();
  }

  const base::FilePath& tasks_path(int32_t t) const {
    return cgroup_tasks_paths_[t];
  }

  // TODO(lhchavez): Move to private when we use gtest.
  using CgroupFactory = decltype(&Cgroup::Create);
  static void SetCgroupFactoryForTesting(CgroupFactory factory);

 protected:
  Cgroup();

 private:
  std::string name_;
  base::FilePath cgroup_paths_[Type::NUM_TYPES];
  base::FilePath cgroup_tasks_paths_[Type::NUM_TYPES];

  DISALLOW_COPY_AND_ASSIGN(Cgroup);
};

}  // namespace libcontainer

#endif  // LIBCONTAINER_CGROUP_H_
