mirror of https://github.com/aya-rs/aya
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.1 KiB
Rust
37 lines
1.1 KiB
Rust
//! Test to make sure loading split BTF (kernel module BTF) works properly.
|
|
|
|
use aya::{EbpfLoader, maps::Array, programs::UProbe};
|
|
|
|
#[test]
|
|
fn rebase_tests() {
|
|
// First, check that we have ip_tables in the split btf.
|
|
if !matches!(std::fs::exists("/sys/kernel/btf/ip_tables"), Ok(true)) {
|
|
eprintln!(
|
|
"skipping test on kernel, as ip_tables is not loaded as an external kernel module."
|
|
);
|
|
return;
|
|
}
|
|
let mut bpf = EbpfLoader::new().load(crate::SPLIT_BPF).unwrap();
|
|
let program: &mut UProbe = bpf
|
|
.program_mut("check_can_access_module")
|
|
.unwrap()
|
|
.try_into()
|
|
.unwrap();
|
|
program.load().unwrap();
|
|
program
|
|
.attach("trigger_btf_split_program", "/proc/self/exe", None, None)
|
|
.unwrap();
|
|
|
|
trigger_btf_split_program();
|
|
|
|
let output_map: Array<_, u64> = bpf.take_map("output_map").unwrap().try_into().unwrap();
|
|
let key = 0;
|
|
assert_eq!(output_map.get(&key, 0).unwrap(), 1)
|
|
}
|
|
|
|
#[unsafe(no_mangle)]
|
|
#[inline(never)]
|
|
pub extern "C" fn trigger_btf_split_program() {
|
|
core::hint::black_box(trigger_btf_split_program);
|
|
}
|