From 2c9fdcfe5f5ac8396484bd51f2fc0ab6d3869fd4 Mon Sep 17 00:00:00 2001 From: Xiaobo Liu Date: Sat, 2 Aug 2025 15:43:59 +0800 Subject: [PATCH] aya-ebpf: add peek operation to stack and queue maps Signed-off-by: Xiaobo Liu --- ebpf/aya-ebpf/src/maps/queue.rs | 10 +++++++++- ebpf/aya-ebpf/src/maps/stack.rs | 13 ++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/ebpf/aya-ebpf/src/maps/queue.rs b/ebpf/aya-ebpf/src/maps/queue.rs index 8c8f0bb1..961ee8a1 100644 --- a/ebpf/aya-ebpf/src/maps/queue.rs +++ b/ebpf/aya-ebpf/src/maps/queue.rs @@ -2,7 +2,7 @@ use core::{cell::UnsafeCell, marker::PhantomData, mem}; use crate::{ 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, }; @@ -63,4 +63,12 @@ impl Queue { (ret == 0).then_some(value.assume_init()) } } + + pub fn peek(&self) -> Option { + 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()) + } + } } diff --git a/ebpf/aya-ebpf/src/maps/stack.rs b/ebpf/aya-ebpf/src/maps/stack.rs index 6328693d..cfb9a0f8 100644 --- a/ebpf/aya-ebpf/src/maps/stack.rs +++ b/ebpf/aya-ebpf/src/maps/stack.rs @@ -2,7 +2,7 @@ use core::{marker::PhantomData, mem}; use crate::{ 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, }; @@ -64,4 +64,15 @@ impl Stack { (ret == 0).then_some(value.assume_init()) } } + + pub fn peek(&mut self) -> Option { + 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()) + } + } }