diff --git a/libprocessgroup/cgrouprc_format/Android.bp b/libprocessgroup/cgrouprc_format/Android.bp new file mode 100644 index 000000000..dfbeed73e --- /dev/null +++ b/libprocessgroup/cgrouprc_format/Android.bp @@ -0,0 +1,32 @@ +// Copyright (C) 2019 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +cc_library_static { + name: "libcgrouprc_format", + host_supported: true, + recovery_available: true, + srcs: [ + "cgroup_controller.cpp", + ], + cflags: [ + "-Wall", + "-Werror", + ], + export_include_dirs: [ + "include", + ], + shared_libs: [ + "libbase", + ], +} diff --git a/libprocessgroup/cgrouprc_format/cgroup_controller.cpp b/libprocessgroup/cgrouprc_format/cgroup_controller.cpp new file mode 100644 index 000000000..877eed872 --- /dev/null +++ b/libprocessgroup/cgrouprc_format/cgroup_controller.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +namespace android { +namespace cgrouprc { +namespace format { + +CgroupController::CgroupController(uint32_t version, const std::string& name, + const std::string& path) { + // strlcpy isn't available on host. Although there is an implementation + // in licutils, libcutils itself depends on libcgrouprc_format, causing + // a circular dependency. + version_ = version; + strncpy(name_, name.c_str(), sizeof(name_) - 1); + name_[sizeof(name_) - 1] = '\0'; + strncpy(path_, path.c_str(), sizeof(path_) - 1); + path_[sizeof(path_) - 1] = '\0'; +} + +uint32_t CgroupController::version() const { + return version_; +} + +const char* CgroupController::name() const { + return name_; +} + +const char* CgroupController::path() const { + return path_; +} + +} // namespace format +} // namespace cgrouprc +} // namespace android diff --git a/libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_controller.h b/libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_controller.h new file mode 100644 index 000000000..64c7532d9 --- /dev/null +++ b/libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_controller.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include + +namespace android { +namespace cgrouprc { +namespace format { + +// Minimal controller description to be mmapped into process address space +struct CgroupController { + public: + CgroupController() {} + CgroupController(uint32_t version, const std::string& name, const std::string& path); + + uint32_t version() const; + const char* name() const; + const char* path() const; + + private: + static constexpr size_t CGROUP_NAME_BUF_SZ = 16; + static constexpr size_t CGROUP_PATH_BUF_SZ = 32; + + uint32_t version_; + char name_[CGROUP_NAME_BUF_SZ]; + char path_[CGROUP_PATH_BUF_SZ]; +}; + +} // namespace format +} // namespace cgrouprc +} // namespace android diff --git a/libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_file.h b/libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_file.h new file mode 100644 index 000000000..f1678a114 --- /dev/null +++ b/libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_file.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +namespace android { +namespace cgrouprc { +namespace format { + +struct CgroupFile { + uint32_t version_; + uint32_t controller_count_; + CgroupController controllers_[]; + + static constexpr uint32_t FILE_VERSION_1 = 1; + static constexpr uint32_t FILE_CURR_VERSION = FILE_VERSION_1; +}; + +} // namespace format +} // namespace cgrouprc +} // namespace android