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.
reviewable/pr1340/r1
Michal R 5 days ago
parent aa47acc507
commit efb08a8850

@ -28,11 +28,11 @@ pub mod helpers;
pub mod maps; pub mod maps;
pub mod programs; 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_cty as cty;
pub use aya_ebpf_macros as macros; pub use aya_ebpf_macros as macros;
use cty::c_long; use cty::{c_long, c_void};
use helpers::{ use helpers::{
bpf_get_current_comm, bpf_get_current_pid_tgid, bpf_get_current_uid_gid, bpf_map_delete_elem, 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, bpf_map_lookup_elem, bpf_map_update_elem,
@ -157,7 +157,7 @@ fn insert<K, V>(
} }
#[inline] #[inline]
fn remove<K>(def: *mut bindings::bpf_map_def, key: &K) -> Result<(), c_long> { fn remove<K>(def: *mut c_void, key: &K) -> Result<(), c_long> {
let key: *const _ = key; let key: *const _ = key;
match unsafe { bpf_map_delete_elem(def.cast(), key.cast()) } { match unsafe { bpf_map_delete_elem(def.cast(), key.cast()) } {
0 => Ok(()), 0 => Ok(()),
@ -166,7 +166,7 @@ fn remove<K>(def: *mut bindings::bpf_map_def, key: &K) -> Result<(), c_long> {
} }
#[inline] #[inline]
fn lookup<K, V>(def: *mut bindings::bpf_map_def, key: &K) -> Option<NonNull<V>> { fn lookup<K, V>(def: *mut c_void, key: &K) -> Option<NonNull<V>> {
let key: *const _ = key; let key: *const _ = key;
NonNull::new(unsafe { bpf_map_lookup_elem(def.cast(), key.cast()) }.cast()) NonNull::new(unsafe { bpf_map_lookup_elem(def.cast(), key.cast()) }.cast())
} }

@ -65,7 +65,7 @@ impl<T> Array<T> {
#[inline(always)] #[inline(always)]
unsafe fn lookup(&self, index: u32) -> Option<NonNull<T>> { unsafe fn lookup(&self, index: u32) -> Option<NonNull<T>> {
lookup(self.def.get(), &index) lookup(self.def.get().cast(), &index)
} }
/// Sets the value of the element at the given index. /// Sets the value of the element at the given index.

@ -84,7 +84,7 @@ impl<K, V> HashMap<K, V> {
#[inline] #[inline]
pub fn remove(&self, key: &K) -> Result<(), c_long> { 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<K, V> LruHashMap<K, V> {
#[inline] #[inline]
pub fn remove(&self, key: &K) -> Result<(), c_long> { 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<K, V> PerCpuHashMap<K, V> {
#[inline] #[inline]
pub fn remove(&self, key: &K) -> Result<(), c_long> { 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<K, V> LruPerCpuHashMap<K, V> {
#[inline] #[inline]
pub fn remove(&self, key: &K) -> Result<(), c_long> { 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<K, V>(ty: u32, max_entries: u32, flags: u32, pin: PinningType
#[inline] #[inline]
fn get_ptr_mut<K, V>(def: *mut bpf_map_def, key: &K) -> Option<*mut V> { fn get_ptr_mut<K, V>(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] #[inline]

@ -64,7 +64,7 @@ impl<K, V> LpmTrie<K, V> {
#[inline] #[inline]
pub fn get(&self, key: &Key<K>) -> Option<&V> { pub fn get(&self, key: &Key<K>) -> 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] #[inline]
@ -74,7 +74,7 @@ impl<K, V> LpmTrie<K, V> {
#[inline] #[inline]
pub fn remove(&self, key: &Key<K>) -> Result<(), c_long> { pub fn remove(&self, key: &Key<K>) -> Result<(), c_long> {
remove(self.def.get(), key) remove(self.def.get().cast(), key)
} }
} }

@ -65,6 +65,6 @@ impl<T> PerCpuArray<T> {
#[inline(always)] #[inline(always)]
unsafe fn lookup(&self, index: u32) -> Option<NonNull<T>> { unsafe fn lookup(&self, index: u32) -> Option<NonNull<T>> {
lookup(self.def.get(), &index) lookup(self.def.get().cast(), &index)
} }
} }

@ -93,7 +93,7 @@ impl<K> SockHash<K> {
key: impl Borrow<K>, key: impl Borrow<K>,
flags: u64, flags: u64,
) -> Result<(), u32> { ) -> 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) }; let ret = unsafe { bpf_sk_assign(ctx.as_ptr().cast(), sk.as_ptr(), flags) };
unsafe { bpf_sk_release(sk.as_ptr()) }; unsafe { bpf_sk_release(sk.as_ptr()) };
match ret { match ret {

@ -77,7 +77,7 @@ impl SockMap {
index: u32, index: u32,
flags: u64, flags: u64,
) -> Result<(), u32> { ) -> 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) }; let ret = unsafe { bpf_sk_assign(ctx.as_ptr().cast(), sk.as_ptr(), flags) };
unsafe { bpf_sk_release(sk.as_ptr()) }; unsafe { bpf_sk_release(sk.as_ptr()) };
match ret { match ret {

@ -105,7 +105,7 @@ impl DevMap {
/// ``` /// ```
#[inline(always)] #[inline(always)]
pub fn get(&self, index: u32) -> Option<DevMapValue> { pub fn get(&self, index: u32) -> Option<DevMapValue> {
let value = lookup(self.def.get(), &index)?; let value = lookup(self.def.get().cast(), &index)?;
let value: &bpf_devmap_val = unsafe { value.as_ref() }; let value: &bpf_devmap_val = unsafe { value.as_ref() };
Some(DevMapValue { Some(DevMapValue {
if_index: value.ifindex, if_index: value.ifindex,

@ -107,7 +107,7 @@ impl DevMapHash {
/// ``` /// ```
#[inline(always)] #[inline(always)]
pub fn get(&self, key: u32) -> Option<DevMapValue> { pub fn get(&self, key: u32) -> Option<DevMapValue> {
let value = lookup(self.def.get(), &key)?; let value = lookup(self.def.get().cast(), &key)?;
let value: &bpf_devmap_val = unsafe { value.as_ref() }; let value: &bpf_devmap_val = unsafe { value.as_ref() };
Some(DevMapValue { Some(DevMapValue {
if_index: value.ifindex, if_index: value.ifindex,

@ -124,7 +124,7 @@ impl XskMap {
/// ``` /// ```
#[inline(always)] #[inline(always)]
pub fn get(&self, index: u32) -> Option<u32> { pub fn get(&self, index: u32) -> Option<u32> {
let value = lookup(self.def.get(), &index)?; let value = lookup(self.def.get().cast(), &index)?;
let value: &bpf_xdp_sock = unsafe { value.as_ref() }; let value: &bpf_xdp_sock = unsafe { value.as_ref() };
Some(value.queue_id) Some(value.queue_id)
} }

Loading…
Cancel
Save