`cgroup_traffic` is a library to monitor the network traffic of a cgroup. By passing a pid to this library, it will attach to the cgroup of the pid and monitor the network traffic of the cgroup. It use ebpf program `BPF_PROG_TYPE_CGROUP_SKB` to monitor the network traffic. Now it's only tested for Cgroup V2. It doesn't support Cgroup V1, because it cannot parse the path of cgroup V1. ## Examples ```rust #![deny(warnings)] use std::mem::MaybeUninit; use log::info; pub fn main() -> Result<(), Box> { let _ = env_logger::builder() .filter_level(log::LevelFilter::Info) .try_init(); let mut open_object = MaybeUninit::uninit(); // make the ebpf prog lives as long as the process. let (cgroup_transmit_counter, _links) = cgroup_traffic::init_cgroup_skb_for_process_name( &mut open_object, "^rust-analyzer$|ssh|rust_http_proxy", )?; // _links cannot be replaced by _, because it holds the life of bpf prog. loop { info!( "current bytes: {} {}", cgroup_transmit_counter.get_egress(), cgroup_transmit_counter.get_ingress() ); std::thread::sleep(std::time::Duration::from_secs(1)); } } ``` Refer to `cgroup_traffic::init_cgroup_skb_monitor` if you want to attach to a specific cgroup path. ## Limitations - Support for Cgroup V1 is NOT tested.