mirror of https://github.com/aya-rs/aya
feat: add `Ebpf::maps_disjoint_mut`
Implemented using `HashMap::get_disjoint_mut` introduced in Rust 1.86.0.reviewable/pr1389/r9^2
parent
65865e8dfc
commit
d8f5497884
@ -0,0 +1,44 @@
|
|||||||
|
use aya::{
|
||||||
|
Ebpf,
|
||||||
|
maps::{Array, HashMap},
|
||||||
|
programs::UProbe,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[unsafe(no_mangle)]
|
||||||
|
#[inline(never)]
|
||||||
|
extern "C" fn trigger_ebpf_program_maps_disjoint() {
|
||||||
|
core::hint::black_box(trigger_ebpf_program_maps_disjoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test_log::test]
|
||||||
|
fn test_maps_disjoint() {
|
||||||
|
let mut bpf: Ebpf = Ebpf::load(crate::MAP_TEST).unwrap();
|
||||||
|
let prog: &mut UProbe = bpf
|
||||||
|
.program_mut("simple_prog_mut")
|
||||||
|
.unwrap()
|
||||||
|
.try_into()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
prog.load().unwrap();
|
||||||
|
prog.attach(
|
||||||
|
"trigger_ebpf_program_maps_disjoint",
|
||||||
|
"/proc/self/exe",
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let [foo, bar, baz] = bpf.maps_disjoint_mut(["FOO", "BAR", "BAZ"]);
|
||||||
|
|
||||||
|
let mut foo: Array<_, u32> = Array::try_from(foo.unwrap()).unwrap();
|
||||||
|
let mut bar: HashMap<_, u32, u8> = HashMap::try_from(bar.unwrap()).unwrap();
|
||||||
|
assert!(baz.is_none());
|
||||||
|
|
||||||
|
foo.set(0, 5, 0).unwrap();
|
||||||
|
bar.insert(0, 10, 0).unwrap();
|
||||||
|
|
||||||
|
trigger_ebpf_program_maps_disjoint();
|
||||||
|
|
||||||
|
assert_eq!(foo.get(&0, 0).unwrap(), 6);
|
||||||
|
assert_eq!(bar.get(&0, 0).unwrap(), 11);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue