From 282fc648dea106b541899664e7b1753b7c6143bf Mon Sep 17 00:00:00 2001 From: Masato Imai Date: Tue, 22 Oct 2024 07:37:59 +0000 Subject: [PATCH] add derive --- src/bin/izoli.rs | 14 ++++++++------ src/cgroup/limit_value.rs | 2 +- src/izolibox.rs | 11 ++++++++--- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/bin/izoli.rs b/src/bin/izoli.rs index 28b76c4..b86b598 100644 --- a/src/bin/izoli.rs +++ b/src/bin/izoli.rs @@ -5,7 +5,7 @@ use izolilib::{ cgroup::CGroup, cgroup_option::CGroupOption, cpu_limit::CpuLimit, limit_value::CGroupLimitValue, }, - izolibox::IzoliBox, + izolibox::{IzoliBox, IzoliBoxOptions}, }; use nix::{sys::wait::waitpid, unistd::execvp}; use tracing::Level; @@ -23,12 +23,14 @@ fn main() { let izolibox = IzoliBox::new( 1, - Some(CGroupOption { - cpu_max: Some(CpuLimit { - max: CGroupLimitValue::Max, - period: 100000, + IzoliBoxOptions { + cgroup_option: Some(CGroupOption { + cpu_max: Some(CpuLimit { + max: CGroupLimitValue::Max, + period: 100000, + }), }), - }), + }, ); let pid = izolibox .enter(Box::new(|| { diff --git a/src/cgroup/limit_value.rs b/src/cgroup/limit_value.rs index e8fd755..c2a12e8 100644 --- a/src/cgroup/limit_value.rs +++ b/src/cgroup/limit_value.rs @@ -1,6 +1,6 @@ use std::{fmt, str::FromStr}; -#[derive(Debug)] +#[derive(Debug, Clone, Copy)] pub enum CGroupLimitValue where T: FromStr + std::fmt::Display, diff --git a/src/izolibox.rs b/src/izolibox.rs index 831f934..5409937 100644 --- a/src/izolibox.rs +++ b/src/izolibox.rs @@ -14,12 +14,17 @@ const STACK_SIZE: usize = 8192; pub struct IzoliBox { pub id: usize, + pub options: IzoliBoxOptions, +} + +#[derive(Debug, Clone, Default)] +pub struct IzoliBoxOptions { pub cgroup_option: Option, } impl IzoliBox { - pub fn new(id: usize, cgroup_option: Option) -> Self { - Self { id, cgroup_option } + pub fn new(id: usize, options: IzoliBoxOptions) -> Self { + Self { id, options } } pub fn enter(&self, callback: CloneCb<'_>) -> Result { @@ -31,7 +36,7 @@ impl IzoliBox { | CloneFlags::CLONE_NEWPID | CloneFlags::CLONE_NEWNET; - if let Some(cgroup_option) = &self.cgroup_option { + if let Some(cgroup_option) = &self.options.cgroup_option { let cgroup = CGroup::new(&format!("izoli/box_{}", self.id)).unwrap(); cgroup.apply_options(cgroup_option).unwrap(); cgroup.enter().unwrap();