From efb08a8850a4a97211936516bb2a214c8b966bf6 Mon Sep 17 00:00:00 2001 From: Michal R Date: Sun, 7 Sep 2025 12:49:32 +0200 Subject: [PATCH] aya-ebpf: Take `c_void` instead of `bpf_map_def` in map helpers `bpf_map_def` is a legacy map definition. To be able to introduce BTF map definitions, make the `lookup` and `remove` helpers work with `c_void` and let the callers cast the map types to it. --- ebpf/aya-ebpf/src/lib.rs | 8 ++++---- ebpf/aya-ebpf/src/maps/array.rs | 2 +- ebpf/aya-ebpf/src/maps/hash_map.rs | 10 +++++----- ebpf/aya-ebpf/src/maps/lpm_trie.rs | 4 ++-- ebpf/aya-ebpf/src/maps/per_cpu_array.rs | 2 +- ebpf/aya-ebpf/src/maps/sock_hash.rs | 2 +- ebpf/aya-ebpf/src/maps/sock_map.rs | 2 +- ebpf/aya-ebpf/src/maps/xdp/dev_map.rs | 2 +- ebpf/aya-ebpf/src/maps/xdp/dev_map_hash.rs | 2 +- ebpf/aya-ebpf/src/maps/xdp/xsk_map.rs | 2 +- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ebpf/aya-ebpf/src/lib.rs b/ebpf/aya-ebpf/src/lib.rs index d842abaf..55d7517b 100644 --- a/ebpf/aya-ebpf/src/lib.rs +++ b/ebpf/aya-ebpf/src/lib.rs @@ -28,11 +28,11 @@ pub mod helpers; pub mod maps; pub mod programs; -use core::{ffi::c_void, ptr::NonNull}; +use core::ptr::NonNull; pub use aya_ebpf_cty as cty; pub use aya_ebpf_macros as macros; -use cty::c_long; +use cty::{c_long, c_void}; use helpers::{ bpf_get_current_comm, bpf_get_current_pid_tgid, bpf_get_current_uid_gid, bpf_map_delete_elem, bpf_map_lookup_elem, bpf_map_update_elem, @@ -157,7 +157,7 @@ fn insert( } #[inline] -fn remove(def: *mut bindings::bpf_map_def, key: &K) -> Result<(), c_long> { +fn remove(def: *mut c_void, key: &K) -> Result<(), c_long> { let key: *const _ = key; match unsafe { bpf_map_delete_elem(def.cast(), key.cast()) } { 0 => Ok(()), @@ -166,7 +166,7 @@ fn remove(def: *mut bindings::bpf_map_def, key: &K) -> Result<(), c_long> { } #[inline] -fn lookup(def: *mut bindings::bpf_map_def, key: &K) -> Option> { +fn lookup(def: *mut c_void, key: &K) -> Option> { let key: *const _ = key; NonNull::new(unsafe { bpf_map_lookup_elem(def.cast(), key.cast()) }.cast()) } diff --git a/ebpf/aya-ebpf/src/maps/array.rs b/ebpf/aya-ebpf/src/maps/array.rs index d9911547..dc221515 100644 --- a/ebpf/aya-ebpf/src/maps/array.rs +++ b/ebpf/aya-ebpf/src/maps/array.rs @@ -65,7 +65,7 @@ impl Array { #[inline(always)] unsafe fn lookup(&self, index: u32) -> Option> { - lookup(self.def.get(), &index) + lookup(self.def.get().cast(), &index) } /// Sets the value of the element at the given index. diff --git a/ebpf/aya-ebpf/src/maps/hash_map.rs b/ebpf/aya-ebpf/src/maps/hash_map.rs index f6efa8b2..2e75d167 100644 --- a/ebpf/aya-ebpf/src/maps/hash_map.rs +++ b/ebpf/aya-ebpf/src/maps/hash_map.rs @@ -84,7 +84,7 @@ impl HashMap { #[inline] pub fn remove(&self, key: &K) -> Result<(), c_long> { - remove(self.def.get(), key) + remove(self.def.get().cast(), key) } } @@ -160,7 +160,7 @@ impl LruHashMap { #[inline] pub fn remove(&self, key: &K) -> Result<(), c_long> { - remove(self.def.get(), key) + remove(self.def.get().cast(), key) } } @@ -236,7 +236,7 @@ impl PerCpuHashMap { #[inline] pub fn remove(&self, key: &K) -> Result<(), c_long> { - remove(self.def.get(), key) + remove(self.def.get().cast(), key) } } @@ -312,7 +312,7 @@ impl LruPerCpuHashMap { #[inline] pub fn remove(&self, key: &K) -> Result<(), c_long> { - remove(self.def.get(), key) + remove(self.def.get().cast(), key) } } @@ -330,7 +330,7 @@ const fn build_def(ty: u32, max_entries: u32, flags: u32, pin: PinningType #[inline] fn get_ptr_mut(def: *mut bpf_map_def, key: &K) -> Option<*mut V> { - lookup(def, key).map(|p| p.as_ptr()) + lookup(def.cast(), key).map(|p| p.as_ptr()) } #[inline] diff --git a/ebpf/aya-ebpf/src/maps/lpm_trie.rs b/ebpf/aya-ebpf/src/maps/lpm_trie.rs index 1e79f30d..dada7c2f 100644 --- a/ebpf/aya-ebpf/src/maps/lpm_trie.rs +++ b/ebpf/aya-ebpf/src/maps/lpm_trie.rs @@ -64,7 +64,7 @@ impl LpmTrie { #[inline] pub fn get(&self, key: &Key) -> Option<&V> { - lookup(self.def.get(), key).map(|p| unsafe { p.as_ref() }) + lookup(self.def.get().cast(), key).map(|p| unsafe { p.as_ref() }) } #[inline] @@ -74,7 +74,7 @@ impl LpmTrie { #[inline] pub fn remove(&self, key: &Key) -> Result<(), c_long> { - remove(self.def.get(), key) + remove(self.def.get().cast(), key) } } diff --git a/ebpf/aya-ebpf/src/maps/per_cpu_array.rs b/ebpf/aya-ebpf/src/maps/per_cpu_array.rs index da6e7640..500cc596 100644 --- a/ebpf/aya-ebpf/src/maps/per_cpu_array.rs +++ b/ebpf/aya-ebpf/src/maps/per_cpu_array.rs @@ -65,6 +65,6 @@ impl PerCpuArray { #[inline(always)] unsafe fn lookup(&self, index: u32) -> Option> { - lookup(self.def.get(), &index) + lookup(self.def.get().cast(), &index) } } diff --git a/ebpf/aya-ebpf/src/maps/sock_hash.rs b/ebpf/aya-ebpf/src/maps/sock_hash.rs index fe7fc25b..9d25059e 100644 --- a/ebpf/aya-ebpf/src/maps/sock_hash.rs +++ b/ebpf/aya-ebpf/src/maps/sock_hash.rs @@ -93,7 +93,7 @@ impl SockHash { key: impl Borrow, flags: u64, ) -> Result<(), u32> { - let sk = lookup(self.def.get(), key.borrow()).ok_or(1u32)?; + let sk = lookup(self.def.get().cast(), key.borrow()).ok_or(1u32)?; let ret = unsafe { bpf_sk_assign(ctx.as_ptr().cast(), sk.as_ptr(), flags) }; unsafe { bpf_sk_release(sk.as_ptr()) }; match ret { diff --git a/ebpf/aya-ebpf/src/maps/sock_map.rs b/ebpf/aya-ebpf/src/maps/sock_map.rs index 67b01a12..4a01ceef 100644 --- a/ebpf/aya-ebpf/src/maps/sock_map.rs +++ b/ebpf/aya-ebpf/src/maps/sock_map.rs @@ -77,7 +77,7 @@ impl SockMap { index: u32, flags: u64, ) -> Result<(), u32> { - let sk = lookup(self.def.get(), &index).ok_or(1u32)?; + let sk = lookup(self.def.get().cast(), &index).ok_or(1u32)?; let ret = unsafe { bpf_sk_assign(ctx.as_ptr().cast(), sk.as_ptr(), flags) }; unsafe { bpf_sk_release(sk.as_ptr()) }; match ret { diff --git a/ebpf/aya-ebpf/src/maps/xdp/dev_map.rs b/ebpf/aya-ebpf/src/maps/xdp/dev_map.rs index 52afeeef..07ce271a 100644 --- a/ebpf/aya-ebpf/src/maps/xdp/dev_map.rs +++ b/ebpf/aya-ebpf/src/maps/xdp/dev_map.rs @@ -105,7 +105,7 @@ impl DevMap { /// ``` #[inline(always)] pub fn get(&self, index: u32) -> Option { - let value = lookup(self.def.get(), &index)?; + let value = lookup(self.def.get().cast(), &index)?; let value: &bpf_devmap_val = unsafe { value.as_ref() }; Some(DevMapValue { if_index: value.ifindex, diff --git a/ebpf/aya-ebpf/src/maps/xdp/dev_map_hash.rs b/ebpf/aya-ebpf/src/maps/xdp/dev_map_hash.rs index 3c8ff019..29cc6d75 100644 --- a/ebpf/aya-ebpf/src/maps/xdp/dev_map_hash.rs +++ b/ebpf/aya-ebpf/src/maps/xdp/dev_map_hash.rs @@ -107,7 +107,7 @@ impl DevMapHash { /// ``` #[inline(always)] pub fn get(&self, key: u32) -> Option { - let value = lookup(self.def.get(), &key)?; + let value = lookup(self.def.get().cast(), &key)?; let value: &bpf_devmap_val = unsafe { value.as_ref() }; Some(DevMapValue { if_index: value.ifindex, diff --git a/ebpf/aya-ebpf/src/maps/xdp/xsk_map.rs b/ebpf/aya-ebpf/src/maps/xdp/xsk_map.rs index 3e3b7475..5de3816a 100644 --- a/ebpf/aya-ebpf/src/maps/xdp/xsk_map.rs +++ b/ebpf/aya-ebpf/src/maps/xdp/xsk_map.rs @@ -124,7 +124,7 @@ impl XskMap { /// ``` #[inline(always)] pub fn get(&self, index: u32) -> Option { - let value = lookup(self.def.get(), &index)?; + let value = lookup(self.def.get().cast(), &index)?; let value: &bpf_xdp_sock = unsafe { value.as_ref() }; Some(value.queue_id) }