blob: fe3eca2d6ea26321efc6ddc41d8b4cd8829c322c [file] [log] [blame] [edit]
use std::io;
use std::path::PathBuf;
use libbpf_rs::Map;
use libbpf_rs::MapCore;
use libbpf_rs::MapMut;
use libbpf_rs::Object;
use libbpf_rs::ObjectBuilder;
use libbpf_rs::OpenObject;
use libbpf_rs::ProgramMut;
pub fn get_test_object_path(filename: &str) -> PathBuf {
let mut path = PathBuf::new();
// env!() macro fails at compile time if var not found
path.push(env!("CARGO_MANIFEST_DIR"));
path.push("tests/bin");
path.push(filename);
path
}
pub fn open_test_object(filename: &str) -> OpenObject {
let obj_path = get_test_object_path(filename);
let obj = ObjectBuilder::default()
.debug(true)
.open_file(obj_path)
.expect("failed to open object");
obj
}
pub fn bump_rlimit_mlock() {
let rlimit = libc::rlimit {
rlim_cur: 128 << 20,
rlim_max: 128 << 20,
};
let ret = unsafe { libc::setrlimit(libc::RLIMIT_MEMLOCK, &rlimit) };
assert_eq!(
ret,
0,
"Setting RLIMIT_MEMLOCK failed with errno: {}",
io::Error::last_os_error()
);
}
pub fn get_test_object(filename: &str) -> Object {
open_test_object(filename)
.load()
.expect("failed to load object")
}
/// Find the BPF map with the given name, panic if it does not exist.
#[track_caller]
pub fn get_map<'obj>(object: &'obj Object, name: &str) -> Map<'obj> {
object
.maps()
.find(|map| map.name() == name)
.unwrap_or_else(|| panic!("failed to find map `{name}`"))
}
/// Find the BPF map with the given name, panic if it does not exist.
#[track_caller]
pub fn get_map_mut<'obj>(object: &'obj mut Object, name: &str) -> MapMut<'obj> {
object
.maps_mut()
.find(|map| map.name() == name)
.unwrap_or_else(|| panic!("failed to find map `{name}`"))
}
/// Find the BPF program with the given name, panic if it does not exist.
#[track_caller]
pub fn get_prog_mut<'obj>(object: &'obj mut Object, name: &str) -> ProgramMut<'obj> {
object
.progs_mut()
.find(|map| map.name() == name)
.unwrap_or_else(|| panic!("failed to find program `{name}`"))
}