aya-ebpf: add peek operation to stack and queue maps

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
reviewable/pr1310/r1
Xiaobo Liu 1 month ago
parent 44ec978bd3
commit 2c9fdcfe5f

@ -2,7 +2,7 @@ use core::{cell::UnsafeCell, marker::PhantomData, mem};
use crate::{ use crate::{
bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_QUEUE}, bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_QUEUE},
helpers::{bpf_map_pop_elem, bpf_map_push_elem}, helpers::{bpf_map_peek_elem, bpf_map_pop_elem, bpf_map_push_elem},
maps::PinningType, maps::PinningType,
}; };
@ -63,4 +63,12 @@ impl<T> Queue<T> {
(ret == 0).then_some(value.assume_init()) (ret == 0).then_some(value.assume_init())
} }
} }
pub fn peek(&self) -> Option<T> {
unsafe {
let mut value = mem::MaybeUninit::uninit();
let ret = bpf_map_peek_elem(self.def.get() as *mut _, value.as_mut_ptr() as *mut _);
(ret == 0).then_some(value.assume_init())
}
}
} }

@ -2,7 +2,7 @@ use core::{marker::PhantomData, mem};
use crate::{ use crate::{
bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_STACK}, bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_STACK},
helpers::{bpf_map_pop_elem, bpf_map_push_elem}, helpers::{bpf_map_peek_elem, bpf_map_pop_elem, bpf_map_push_elem},
maps::PinningType, maps::PinningType,
}; };
@ -64,4 +64,15 @@ impl<T> Stack<T> {
(ret == 0).then_some(value.assume_init()) (ret == 0).then_some(value.assume_init())
} }
} }
pub fn peek(&mut self) -> Option<T> {
unsafe {
let mut value = mem::MaybeUninit::uninit();
let ret = bpf_map_peek_elem(
&mut self.def as *mut _ as *mut _,
value.as_mut_ptr() as *mut _,
);
(ret == 0).then_some(value.assume_init())
}
}
} }

Loading…
Cancel
Save