use anyhow::anyhow;
use anyhow::Result;
use libbpf_rs::OpenObject;
const CBW_CGRP_MAP: &str = "cbw_cgrp_map";
const CBW_CGRP_LLC_MAP: &str = "cbw_cgrp_llc_map";
pub fn resize_cgroup_bw_llc_map(open_obj: &mut OpenObject, nr_llcs: usize) -> Result<()> {
let cgrp_max = open_obj
.maps_mut()
.find(|m| m.name().to_str() == Some(CBW_CGRP_MAP))
.map(|m| m.max_entries())
.ok_or_else(|| anyhow!("cgroup_bw: map `{CBW_CGRP_MAP}` not found"))?;
let max_entries = cgrp_max
.checked_mul(nr_llcs as u32)
.ok_or_else(|| anyhow!("cgroup_bw: `{CBW_CGRP_LLC_MAP}` size overflow"))?;
open_obj
.maps_mut()
.find(|m| m.name().to_str() == Some(CBW_CGRP_LLC_MAP))
.ok_or_else(|| anyhow!("cgroup_bw: map `{CBW_CGRP_LLC_MAP}` not found"))?
.set_max_entries(max_entries)?;
Ok(())
}