diff --git a/aya/src/bpf.rs b/aya/src/bpf.rs index 7e03a12a..57162163 100644 --- a/aya/src/bpf.rs +++ b/aya/src/bpf.rs @@ -398,7 +398,7 @@ impl<'a> BpfLoader<'a> { if let Some(btf) = obj.fixup_and_sanitize_btf(features)? { match load_btf(btf.to_bytes(), *verifier_log_level) { Ok(btf_fd) => Some(Arc::new(btf_fd)), - // Only report an error here if the BTF is truely needed, otherwise proceed without. + // Only report an error here if the BTF is truly needed, otherwise proceed without. Err(err) => { for program in obj.programs.values() { match program.section { @@ -861,6 +861,29 @@ impl Bpf { self.maps.iter().map(|(name, map)| (name.as_str(), map)) } + /// A mutable iterator over all the maps. + /// + /// # Examples + /// ```no_run + /// # use std::path::Path; + /// # #[derive(thiserror::Error, Debug)] + /// # enum Error { + /// # #[error(transparent)] + /// # Bpf(#[from] aya::BpfError), + /// # #[error(transparent)] + /// # Pin(#[from] aya::pin::PinError) + /// # } + /// # let mut bpf = aya::Bpf::load(&[])?; + /// # let pin_path = Path::new("/tmp/pin_path"); + /// for (_, map) in bpf.maps_mut() { + /// map.pin(pin_path)?; + /// } + /// # Ok::<(), Error>(()) + /// ``` + pub fn maps_mut(&mut self) -> impl Iterator { + self.maps.iter_mut().map(|(name, map)| (name.as_str(), map)) + } + /// Returns a reference to the program with the given name. /// /// You can use this to inspect a program and its properties. To load and attach a program, use diff --git a/aya/src/maps/array/array.rs b/aya/src/maps/array/array.rs index 5d137d05..9fdc91e3 100644 --- a/aya/src/maps/array/array.rs +++ b/aya/src/maps/array/array.rs @@ -31,7 +31,7 @@ use crate::{ /// ``` #[doc(alias = "BPF_MAP_TYPE_ARRAY")] pub struct Array { - inner: T, + pub(crate) inner: T, _v: PhantomData, } diff --git a/aya/src/maps/array/per_cpu_array.rs b/aya/src/maps/array/per_cpu_array.rs index f384b713..9c261f0c 100644 --- a/aya/src/maps/array/per_cpu_array.rs +++ b/aya/src/maps/array/per_cpu_array.rs @@ -50,7 +50,7 @@ use crate::{ /// ``` #[doc(alias = "BPF_MAP_TYPE_PERCPU_ARRAY")] pub struct PerCpuArray { - inner: T, + pub(crate) inner: T, _v: PhantomData, } diff --git a/aya/src/maps/array/program_array.rs b/aya/src/maps/array/program_array.rs index 48bb6b9d..513bf77f 100644 --- a/aya/src/maps/array/program_array.rs +++ b/aya/src/maps/array/program_array.rs @@ -48,7 +48,7 @@ use crate::{ /// ``` #[doc(alias = "BPF_MAP_TYPE_PROG_ARRAY")] pub struct ProgramArray { - inner: T, + pub(crate) inner: T, } impl> ProgramArray { diff --git a/aya/src/maps/bloom_filter.rs b/aya/src/maps/bloom_filter.rs index d038e35f..5c547fb0 100644 --- a/aya/src/maps/bloom_filter.rs +++ b/aya/src/maps/bloom_filter.rs @@ -36,7 +36,7 @@ use crate::{ #[doc(alias = "BPF_MAP_TYPE_BLOOM_FILTER")] #[derive(Debug)] pub struct BloomFilter { - inner: T, + pub(crate) inner: T, _v: PhantomData, } diff --git a/aya/src/maps/hash_map/hash_map.rs b/aya/src/maps/hash_map/hash_map.rs index bfc96845..72c81b95 100644 --- a/aya/src/maps/hash_map/hash_map.rs +++ b/aya/src/maps/hash_map/hash_map.rs @@ -34,7 +34,7 @@ use crate::{ #[doc(alias = "BPF_MAP_TYPE_LRU_HASH")] #[derive(Debug)] pub struct HashMap { - inner: T, + pub(crate) inner: T, _k: PhantomData, _v: PhantomData, } diff --git a/aya/src/maps/hash_map/per_cpu_hash_map.rs b/aya/src/maps/hash_map/per_cpu_hash_map.rs index b1985390..fe404ce0 100644 --- a/aya/src/maps/hash_map/per_cpu_hash_map.rs +++ b/aya/src/maps/hash_map/per_cpu_hash_map.rs @@ -43,7 +43,7 @@ use crate::{ #[doc(alias = "BPF_MAP_TYPE_LRU_PERCPU_HASH")] #[doc(alias = "BPF_MAP_TYPE_PERCPU_HASH")] pub struct PerCpuHashMap { - inner: T, + pub(crate) inner: T, _k: PhantomData, _v: PhantomData, } diff --git a/aya/src/maps/lpm_trie.rs b/aya/src/maps/lpm_trie.rs index 181a2f57..139a9cb9 100644 --- a/aya/src/maps/lpm_trie.rs +++ b/aya/src/maps/lpm_trie.rs @@ -48,7 +48,7 @@ use crate::{ #[doc(alias = "BPF_MAP_TYPE_LPM_TRIE")] #[derive(Debug)] pub struct LpmTrie { - inner: T, + pub(crate) inner: T, _k: PhantomData, _v: PhantomData, } diff --git a/aya/src/maps/mod.rs b/aya/src/maps/mod.rs index af9ec868..771486c2 100644 --- a/aya/src/maps/mod.rs +++ b/aya/src/maps/mod.rs @@ -48,6 +48,7 @@ //! versa. Because of that, all map values must be plain old data and therefore //! implement the [Pod] trait. use std::{ + borrow::BorrowMut, ffi::CString, fmt, io, marker::PhantomData, @@ -170,8 +171,8 @@ pub enum MapError { #[error(transparent)] SyscallError(#[from] SyscallError), - /// Could not pin map by name - #[error("map `{name:?}` requested pinning by name. pinning failed")] + /// Could not pin map + #[error("map `{name:?}` requested pinning. pinning failed")] PinError { /// The map name name: Option, @@ -308,8 +309,89 @@ impl Map { Self::Unsupported(map) => map.obj.map_type(), } } + + /// Pins the map to a BPF filesystem. + /// + /// When a map is pinned it will remain loaded until the corresponding file + /// is deleted. All parent directories in the given `path` must already exist. + pub fn pin>(&mut self, path: P) -> Result<(), PinError> { + match self { + Self::Array(map) => map.pin(path), + Self::PerCpuArray(map) => map.pin(path), + Self::ProgramArray(map) => map.pin(path), + Self::HashMap(map) => map.pin(path), + Self::LruHashMap(map) => map.pin(path), + Self::PerCpuHashMap(map) => map.pin(path), + Self::PerCpuLruHashMap(map) => map.pin(path), + Self::PerfEventArray(map) => map.pin(path), + Self::SockHash(map) => map.pin(path), + Self::SockMap(map) => map.pin(path), + Self::BloomFilter(map) => map.pin(path), + Self::LpmTrie(map) => map.pin(path), + Self::Stack(map) => map.pin(path), + Self::StackTraceMap(map) => map.pin(path), + Self::Queue(map) => map.pin(path), + Self::CpuMap(map) => map.pin(path), + Self::DevMap(map) => map.pin(path), + Self::DevMapHash(map) => map.pin(path), + Self::XskMap(map) => map.pin(path), + Self::Unsupported(map) => map.pin(path), + } + } +} + +// Implements map pinning for different map implementations +// TODO add support for PerfEventArrays and AsyncPerfEventArrays +macro_rules! impl_map_pin { + ($ty_param:tt { + $($ty:ident),+ $(,)? + }) => { + $(impl_map_pin!(<$ty_param> $ty);)+ + }; + ( + <($($ty_param:ident),*)> + $ty:ident + ) => { + impl, $($ty_param: Pod),*> $ty + { + /// Pins the map to a BPF filesystem. + /// + /// When a map is pinned it will remain loaded until the corresponding file + /// is deleted. All parent directories in the given `path` must already exist. + pub fn pin>(&mut self, path: P) -> Result<(), PinError> { + let data = self.inner.borrow_mut(); + data.pin(path) + } + } + + }; } +impl_map_pin!(() { + ProgramArray, + SockMap, + StackTraceMap, + CpuMap, + DevMap, + DevMapHash, + XskMap, +}); + +impl_map_pin!((V) { + Array, + PerCpuArray, + SockHash, + BloomFilter, + Queue, + Stack, +}); + +impl_map_pin!((K, V) { + HashMap, + PerCpuHashMap, + LpmTrie, +}); + // Implements TryFrom for different map implementations. Different map implementations can be // constructed from different variants of the map enum. Also, the implementation may have type // parameters (which we assume all have the bound `Pod` and nothing else). diff --git a/aya/src/maps/queue.rs b/aya/src/maps/queue.rs index 31c44633..b9177b24 100644 --- a/aya/src/maps/queue.rs +++ b/aya/src/maps/queue.rs @@ -30,7 +30,7 @@ use crate::{ /// ``` #[doc(alias = "BPF_MAP_TYPE_QUEUE")] pub struct Queue { - inner: T, + pub(crate) inner: T, _v: PhantomData, } diff --git a/aya/src/maps/sock/sock_hash.rs b/aya/src/maps/sock/sock_hash.rs index 99d0f871..e3074be8 100644 --- a/aya/src/maps/sock/sock_hash.rs +++ b/aya/src/maps/sock/sock_hash.rs @@ -65,7 +65,7 @@ use crate::{ /// ``` #[doc(alias = "BPF_MAP_TYPE_SOCKHASH")] pub struct SockHash { - inner: T, + pub(crate) inner: T, _k: PhantomData, } diff --git a/aya/src/maps/stack.rs b/aya/src/maps/stack.rs index ac1453cd..a85fe14d 100644 --- a/aya/src/maps/stack.rs +++ b/aya/src/maps/stack.rs @@ -30,7 +30,7 @@ use crate::{ /// ``` #[doc(alias = "BPF_MAP_TYPE_STACK")] pub struct Stack { - inner: T, + pub(crate) inner: T, _v: PhantomData, } diff --git a/aya/src/maps/stack_trace.rs b/aya/src/maps/stack_trace.rs index fdf1d937..389b28f7 100644 --- a/aya/src/maps/stack_trace.rs +++ b/aya/src/maps/stack_trace.rs @@ -67,7 +67,7 @@ use crate::{ #[derive(Debug)] #[doc(alias = "BPF_MAP_TYPE_STACK_TRACE")] pub struct StackTraceMap { - inner: T, + pub(crate) inner: T, max_stack_depth: usize, } diff --git a/aya/src/maps/xdp/cpu_map.rs b/aya/src/maps/xdp/cpu_map.rs index f48fcdc2..85f9e679 100644 --- a/aya/src/maps/xdp/cpu_map.rs +++ b/aya/src/maps/xdp/cpu_map.rs @@ -50,7 +50,7 @@ use crate::{ /// Kernel documentation: #[doc(alias = "BPF_MAP_TYPE_CPUMAP")] pub struct CpuMap { - inner: T, + pub(crate) inner: T, } impl> CpuMap { diff --git a/aya/src/maps/xdp/dev_map.rs b/aya/src/maps/xdp/dev_map.rs index 6b6cd545..31e9b3ac 100644 --- a/aya/src/maps/xdp/dev_map.rs +++ b/aya/src/maps/xdp/dev_map.rs @@ -42,7 +42,7 @@ use crate::{ /// Kernel documentation: #[doc(alias = "BPF_MAP_TYPE_DEVMAP")] pub struct DevMap { - inner: T, + pub(crate) inner: T, } impl> DevMap { diff --git a/aya/src/maps/xdp/dev_map_hash.rs b/aya/src/maps/xdp/dev_map_hash.rs index 65b00ee4..63a93b02 100644 --- a/aya/src/maps/xdp/dev_map_hash.rs +++ b/aya/src/maps/xdp/dev_map_hash.rs @@ -42,7 +42,7 @@ use crate::{ /// Kernel documentation: #[doc(alias = "BPF_MAP_TYPE_DEVMAP_HASH")] pub struct DevMapHash { - inner: T, + pub(crate) inner: T, } impl> DevMapHash { diff --git a/aya/src/maps/xdp/xsk_map.rs b/aya/src/maps/xdp/xsk_map.rs index 5382ae4c..43924abf 100644 --- a/aya/src/maps/xdp/xsk_map.rs +++ b/aya/src/maps/xdp/xsk_map.rs @@ -36,7 +36,7 @@ use crate::{ /// Kernel documentation: #[doc(alias = "BPF_MAP_TYPE_XSKMAP")] pub struct XskMap { - inner: T, + pub(crate) inner: T, } impl> XskMap { diff --git a/xtask/public-api/aya.txt b/xtask/public-api/aya.txt index 86221498..81fa16ec 100644 --- a/xtask/public-api/aya.txt +++ b/xtask/public-api/aya.txt @@ -12,6 +12,8 @@ pub fn aya::maps::array::Array::get(&self, index: &u32, flags: u64) -> cor pub fn aya::maps::array::Array::iter(&self) -> impl core::iter::traits::iterator::Iterator> + '_ pub fn aya::maps::array::Array::len(&self) -> u32 impl, V: aya::Pod> aya::maps::array::Array +pub fn aya::maps::array::Array::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl, V: aya::Pod> aya::maps::array::Array pub fn aya::maps::array::Array::set(&mut self, index: u32, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::array::Array<&'a aya::maps::MapData, V> pub type aya::maps::array::Array<&'a aya::maps::MapData, V>::Error = aya::maps::MapError @@ -52,6 +54,8 @@ pub fn aya::maps::PerCpuArray::get(&self, index: &u32, flags: u64) -> core pub fn aya::maps::PerCpuArray::iter(&self) -> impl core::iter::traits::iterator::Iterator, aya::maps::MapError>> + '_ pub fn aya::maps::PerCpuArray::len(&self) -> u32 impl, V: aya::Pod> aya::maps::PerCpuArray +pub fn aya::maps::PerCpuArray::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl, V: aya::Pod> aya::maps::PerCpuArray pub fn aya::maps::PerCpuArray::set(&mut self, index: u32, values: aya::maps::PerCpuValues, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::PerCpuArray<&'a aya::maps::MapData, V> pub type aya::maps::PerCpuArray<&'a aya::maps::MapData, V>::Error = aya::maps::MapError @@ -92,6 +96,8 @@ pub fn aya::maps::ProgramArray::indices(&self) -> aya::maps::MapKeys<'_, u32> impl> aya::maps::ProgramArray pub fn aya::maps::ProgramArray::clear_index(&mut self, index: &u32) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::ProgramArray::set(&mut self, index: u32, program: &aya::programs::ProgramFd, flags: u64) -> core::result::Result<(), aya::maps::MapError> +impl> aya::maps::ProgramArray +pub fn aya::maps::ProgramArray::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl core::convert::TryFrom for aya::maps::ProgramArray pub type aya::maps::ProgramArray::Error = aya::maps::MapError pub fn aya::maps::ProgramArray::try_from(map: aya::maps::Map) -> core::result::Result @@ -128,6 +134,8 @@ impl, V: aya::Pod> aya::maps::bloom_ pub fn aya::maps::bloom_filter::BloomFilter::contains(&self, value: &V, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl, V: aya::Pod> aya::maps::bloom_filter::BloomFilter pub fn aya::maps::bloom_filter::BloomFilter::insert(&mut self, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> +impl, V: aya::Pod> aya::maps::bloom_filter::BloomFilter +pub fn aya::maps::bloom_filter::BloomFilter::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::bloom_filter::BloomFilter<&'a aya::maps::MapData, V> pub type aya::maps::bloom_filter::BloomFilter<&'a aya::maps::MapData, V>::Error = aya::maps::MapError pub fn aya::maps::bloom_filter::BloomFilter<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result @@ -169,6 +177,8 @@ pub fn aya::maps::hash_map::HashMap::keys(&self) -> aya::maps::MapKeys< impl, K: aya::Pod, V: aya::Pod> aya::maps::hash_map::HashMap pub fn aya::maps::hash_map::HashMap::insert(&mut self, key: impl core::borrow::Borrow, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::hash_map::HashMap::remove(&mut self, key: &K) -> core::result::Result<(), aya::maps::MapError> +impl, K: aya::Pod, V: aya::Pod> aya::maps::hash_map::HashMap +pub fn aya::maps::hash_map::HashMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::hash_map::HashMap<&'a aya::maps::MapData, K, V> pub type aya::maps::hash_map::HashMap<&'a aya::maps::MapData, K, V>::Error = aya::maps::MapError pub fn aya::maps::hash_map::HashMap<&'a aya::maps::MapData, K, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result @@ -212,6 +222,8 @@ pub fn aya::maps::hash_map::PerCpuHashMap::keys(&self) -> aya::maps::Ma impl, K: aya::Pod, V: aya::Pod> aya::maps::hash_map::PerCpuHashMap pub fn aya::maps::hash_map::PerCpuHashMap::insert(&mut self, key: impl core::borrow::Borrow, values: aya::maps::PerCpuValues, flags: u64) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::hash_map::PerCpuHashMap::remove(&mut self, key: &K) -> core::result::Result<(), aya::maps::MapError> +impl, K: aya::Pod, V: aya::Pod> aya::maps::hash_map::PerCpuHashMap +pub fn aya::maps::hash_map::PerCpuHashMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, K, V> pub type aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, K, V>::Error = aya::maps::MapError pub fn aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, K, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result @@ -291,6 +303,8 @@ pub fn aya::maps::lpm_trie::LpmTrie::keys(&self) -> aya::maps::MapKeys< impl, K: aya::Pod, V: aya::Pod> aya::maps::lpm_trie::LpmTrie pub fn aya::maps::lpm_trie::LpmTrie::insert(&mut self, key: &aya::maps::lpm_trie::Key, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::lpm_trie::LpmTrie::remove(&mut self, key: &aya::maps::lpm_trie::Key) -> core::result::Result<(), aya::maps::MapError> +impl, K: aya::Pod, V: aya::Pod> aya::maps::lpm_trie::LpmTrie +pub fn aya::maps::lpm_trie::LpmTrie::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, K, V> pub type aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, K, V>::Error = aya::maps::MapError pub fn aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, K, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result @@ -524,6 +538,8 @@ pub struct aya::maps::queue::Queue impl, V: aya::Pod> aya::maps::queue::Queue pub fn aya::maps::queue::Queue::capacity(&self) -> u32 impl, V: aya::Pod> aya::maps::queue::Queue +pub fn aya::maps::queue::Queue::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl, V: aya::Pod> aya::maps::queue::Queue pub fn aya::maps::queue::Queue::pop(&mut self, flags: u64) -> core::result::Result pub fn aya::maps::queue::Queue::push(&mut self, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::queue::Queue<&'a aya::maps::MapData, V> @@ -566,6 +582,8 @@ pub fn aya::maps::SockHash::keys(&self) -> aya::maps::MapKeys<'_, K> impl, K: aya::Pod> aya::maps::SockHash pub fn aya::maps::SockHash::insert(&mut self, key: impl core::borrow::Borrow, value: I, flags: u64) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::SockHash::remove(&mut self, key: &K) -> core::result::Result<(), aya::maps::MapError> +impl, V: aya::Pod> aya::maps::SockHash +pub fn aya::maps::SockHash::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::SockHash<&'a aya::maps::MapData, V> pub type aya::maps::SockHash<&'a aya::maps::MapData, V>::Error = aya::maps::MapError pub fn aya::maps::SockHash<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result @@ -606,6 +624,8 @@ pub fn aya::maps::SockMap::indices(&self) -> aya::maps::MapKeys<'_, u32> impl> aya::maps::SockMap pub fn aya::maps::SockMap::clear_index(&mut self, index: &u32) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::SockMap::set(&mut self, index: u32, socket: &I, flags: u64) -> core::result::Result<(), aya::maps::MapError> +impl> aya::maps::SockMap +pub fn aya::maps::SockMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl core::convert::TryFrom for aya::maps::SockMap pub type aya::maps::SockMap::Error = aya::maps::MapError pub fn aya::maps::SockMap::try_from(map: aya::maps::Map) -> core::result::Result @@ -667,6 +687,8 @@ pub struct aya::maps::stack::Stack impl, V: aya::Pod> aya::maps::stack::Stack pub fn aya::maps::stack::Stack::capacity(&self) -> u32 impl, V: aya::Pod> aya::maps::stack::Stack +pub fn aya::maps::stack::Stack::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl, V: aya::Pod> aya::maps::stack::Stack pub fn aya::maps::stack::Stack::pop(&mut self, flags: u64) -> core::result::Result pub fn aya::maps::stack::Stack::push(&mut self, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::stack::Stack<&'a aya::maps::MapData, V> @@ -756,6 +778,8 @@ impl> aya::maps::stack_trace::StackT pub fn aya::maps::stack_trace::StackTraceMap::get(&self, stack_id: &u32, flags: u64) -> core::result::Result pub fn aya::maps::stack_trace::StackTraceMap::iter(&self) -> aya::maps::MapIter<'_, u32, aya::maps::stack_trace::StackTrace, Self> pub fn aya::maps::stack_trace::StackTraceMap::stack_ids(&self) -> aya::maps::MapKeys<'_, u32> +impl> aya::maps::stack_trace::StackTraceMap +pub fn aya::maps::stack_trace::StackTraceMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl core::convert::TryFrom for aya::maps::stack_trace::StackTraceMap pub type aya::maps::stack_trace::StackTraceMap::Error = aya::maps::MapError pub fn aya::maps::stack_trace::StackTraceMap::try_from(map: aya::maps::Map) -> core::result::Result @@ -836,6 +860,8 @@ pub fn aya::maps::CpuMap::get(&self, cpu_index: u32, flags: u64) -> core::res pub fn aya::maps::CpuMap::iter(&self) -> impl core::iter::traits::iterator::Iterator> + '_ pub fn aya::maps::CpuMap::len(&self) -> u32 impl> aya::maps::CpuMap +pub fn aya::maps::CpuMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl> aya::maps::CpuMap pub fn aya::maps::CpuMap::set(&mut self, cpu_index: u32, queue_size: u32, program: core::option::Option<&aya::programs::ProgramFd>, flags: u64) -> core::result::Result<(), aya::maps::xdp::XdpMapError> impl core::convert::TryFrom for aya::maps::CpuMap pub type aya::maps::CpuMap::Error = aya::maps::MapError @@ -873,6 +899,8 @@ pub fn aya::maps::DevMap::get(&self, index: u32, flags: u64) -> core::result: pub fn aya::maps::DevMap::iter(&self) -> impl core::iter::traits::iterator::Iterator> + '_ pub fn aya::maps::DevMap::len(&self) -> u32 impl> aya::maps::DevMap +pub fn aya::maps::DevMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl> aya::maps::DevMap pub fn aya::maps::DevMap::set(&mut self, index: u32, target_if_index: u32, program: core::option::Option<&aya::programs::ProgramFd>, flags: u64) -> core::result::Result<(), aya::maps::xdp::XdpMapError> impl core::convert::TryFrom for aya::maps::DevMap pub type aya::maps::DevMap::Error = aya::maps::MapError @@ -912,6 +940,8 @@ pub fn aya::maps::DevMapHash::keys(&self) -> aya::maps::MapKeys<'_, u32> impl> aya::maps::DevMapHash pub fn aya::maps::DevMapHash::insert(&mut self, key: u32, target_if_index: u32, program: core::option::Option<&aya::programs::ProgramFd>, flags: u64) -> core::result::Result<(), aya::maps::xdp::XdpMapError> pub fn aya::maps::DevMapHash::remove(&mut self, key: u32) -> core::result::Result<(), aya::maps::MapError> +impl> aya::maps::DevMapHash +pub fn aya::maps::DevMapHash::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl core::convert::TryFrom for aya::maps::DevMapHash pub type aya::maps::DevMapHash::Error = aya::maps::MapError pub fn aya::maps::DevMapHash::try_from(map: aya::maps::Map) -> core::result::Result @@ -946,6 +976,8 @@ pub struct aya::maps::xdp::XskMap impl> aya::maps::XskMap pub fn aya::maps::XskMap::len(&self) -> u32 impl> aya::maps::XskMap +pub fn aya::maps::XskMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl> aya::maps::XskMap pub fn aya::maps::XskMap::set(&mut self, index: u32, socket_fd: impl std::os::fd::raw::AsRawFd, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl core::convert::TryFrom for aya::maps::XskMap pub type aya::maps::XskMap::Error = aya::maps::MapError @@ -998,6 +1030,8 @@ pub aya::maps::Map::Stack(aya::maps::MapData) pub aya::maps::Map::StackTraceMap(aya::maps::MapData) pub aya::maps::Map::Unsupported(aya::maps::MapData) pub aya::maps::Map::XskMap(aya::maps::MapData) +impl aya::maps::Map +pub fn aya::maps::Map::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl core::convert::TryFrom for aya::maps::CpuMap pub type aya::maps::CpuMap::Error = aya::maps::MapError pub fn aya::maps::CpuMap::try_from(map: aya::maps::Map) -> core::result::Result @@ -1252,6 +1286,8 @@ pub fn aya::maps::array::Array::get(&self, index: &u32, flags: u64) -> cor pub fn aya::maps::array::Array::iter(&self) -> impl core::iter::traits::iterator::Iterator> + '_ pub fn aya::maps::array::Array::len(&self) -> u32 impl, V: aya::Pod> aya::maps::array::Array +pub fn aya::maps::array::Array::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl, V: aya::Pod> aya::maps::array::Array pub fn aya::maps::array::Array::set(&mut self, index: u32, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::array::Array<&'a aya::maps::MapData, V> pub type aya::maps::array::Array<&'a aya::maps::MapData, V>::Error = aya::maps::MapError @@ -1324,6 +1360,8 @@ impl, V: aya::Pod> aya::maps::bloom_ pub fn aya::maps::bloom_filter::BloomFilter::contains(&self, value: &V, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl, V: aya::Pod> aya::maps::bloom_filter::BloomFilter pub fn aya::maps::bloom_filter::BloomFilter::insert(&mut self, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> +impl, V: aya::Pod> aya::maps::bloom_filter::BloomFilter +pub fn aya::maps::bloom_filter::BloomFilter::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::bloom_filter::BloomFilter<&'a aya::maps::MapData, V> pub type aya::maps::bloom_filter::BloomFilter<&'a aya::maps::MapData, V>::Error = aya::maps::MapError pub fn aya::maps::bloom_filter::BloomFilter<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result @@ -1362,6 +1400,8 @@ pub fn aya::maps::CpuMap::get(&self, cpu_index: u32, flags: u64) -> core::res pub fn aya::maps::CpuMap::iter(&self) -> impl core::iter::traits::iterator::Iterator> + '_ pub fn aya::maps::CpuMap::len(&self) -> u32 impl> aya::maps::CpuMap +pub fn aya::maps::CpuMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl> aya::maps::CpuMap pub fn aya::maps::CpuMap::set(&mut self, cpu_index: u32, queue_size: u32, program: core::option::Option<&aya::programs::ProgramFd>, flags: u64) -> core::result::Result<(), aya::maps::xdp::XdpMapError> impl core::convert::TryFrom for aya::maps::CpuMap pub type aya::maps::CpuMap::Error = aya::maps::MapError @@ -1399,6 +1439,8 @@ pub fn aya::maps::DevMap::get(&self, index: u32, flags: u64) -> core::result: pub fn aya::maps::DevMap::iter(&self) -> impl core::iter::traits::iterator::Iterator> + '_ pub fn aya::maps::DevMap::len(&self) -> u32 impl> aya::maps::DevMap +pub fn aya::maps::DevMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl> aya::maps::DevMap pub fn aya::maps::DevMap::set(&mut self, index: u32, target_if_index: u32, program: core::option::Option<&aya::programs::ProgramFd>, flags: u64) -> core::result::Result<(), aya::maps::xdp::XdpMapError> impl core::convert::TryFrom for aya::maps::DevMap pub type aya::maps::DevMap::Error = aya::maps::MapError @@ -1438,6 +1480,8 @@ pub fn aya::maps::DevMapHash::keys(&self) -> aya::maps::MapKeys<'_, u32> impl> aya::maps::DevMapHash pub fn aya::maps::DevMapHash::insert(&mut self, key: u32, target_if_index: u32, program: core::option::Option<&aya::programs::ProgramFd>, flags: u64) -> core::result::Result<(), aya::maps::xdp::XdpMapError> pub fn aya::maps::DevMapHash::remove(&mut self, key: u32) -> core::result::Result<(), aya::maps::MapError> +impl> aya::maps::DevMapHash +pub fn aya::maps::DevMapHash::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl core::convert::TryFrom for aya::maps::DevMapHash pub type aya::maps::DevMapHash::Error = aya::maps::MapError pub fn aya::maps::DevMapHash::try_from(map: aya::maps::Map) -> core::result::Result @@ -1476,6 +1520,8 @@ pub fn aya::maps::hash_map::HashMap::keys(&self) -> aya::maps::MapKeys< impl, K: aya::Pod, V: aya::Pod> aya::maps::hash_map::HashMap pub fn aya::maps::hash_map::HashMap::insert(&mut self, key: impl core::borrow::Borrow, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::hash_map::HashMap::remove(&mut self, key: &K) -> core::result::Result<(), aya::maps::MapError> +impl, K: aya::Pod, V: aya::Pod> aya::maps::hash_map::HashMap +pub fn aya::maps::hash_map::HashMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::hash_map::HashMap<&'a aya::maps::MapData, K, V> pub type aya::maps::hash_map::HashMap<&'a aya::maps::MapData, K, V>::Error = aya::maps::MapError pub fn aya::maps::hash_map::HashMap<&'a aya::maps::MapData, K, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result @@ -1519,6 +1565,8 @@ pub fn aya::maps::lpm_trie::LpmTrie::keys(&self) -> aya::maps::MapKeys< impl, K: aya::Pod, V: aya::Pod> aya::maps::lpm_trie::LpmTrie pub fn aya::maps::lpm_trie::LpmTrie::insert(&mut self, key: &aya::maps::lpm_trie::Key, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::lpm_trie::LpmTrie::remove(&mut self, key: &aya::maps::lpm_trie::Key) -> core::result::Result<(), aya::maps::MapError> +impl, K: aya::Pod, V: aya::Pod> aya::maps::lpm_trie::LpmTrie +pub fn aya::maps::lpm_trie::LpmTrie::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, K, V> pub type aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, K, V>::Error = aya::maps::MapError pub fn aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, K, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result @@ -1674,6 +1722,8 @@ pub fn aya::maps::PerCpuArray::get(&self, index: &u32, flags: u64) -> core pub fn aya::maps::PerCpuArray::iter(&self) -> impl core::iter::traits::iterator::Iterator, aya::maps::MapError>> + '_ pub fn aya::maps::PerCpuArray::len(&self) -> u32 impl, V: aya::Pod> aya::maps::PerCpuArray +pub fn aya::maps::PerCpuArray::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl, V: aya::Pod> aya::maps::PerCpuArray pub fn aya::maps::PerCpuArray::set(&mut self, index: u32, values: aya::maps::PerCpuValues, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::PerCpuArray<&'a aya::maps::MapData, V> pub type aya::maps::PerCpuArray<&'a aya::maps::MapData, V>::Error = aya::maps::MapError @@ -1716,6 +1766,8 @@ pub fn aya::maps::hash_map::PerCpuHashMap::keys(&self) -> aya::maps::Ma impl, K: aya::Pod, V: aya::Pod> aya::maps::hash_map::PerCpuHashMap pub fn aya::maps::hash_map::PerCpuHashMap::insert(&mut self, key: impl core::borrow::Borrow, values: aya::maps::PerCpuValues, flags: u64) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::hash_map::PerCpuHashMap::remove(&mut self, key: &K) -> core::result::Result<(), aya::maps::MapError> +impl, K: aya::Pod, V: aya::Pod> aya::maps::hash_map::PerCpuHashMap +pub fn aya::maps::hash_map::PerCpuHashMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, K, V> pub type aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, K, V>::Error = aya::maps::MapError pub fn aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, K, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result @@ -1824,6 +1876,8 @@ pub fn aya::maps::ProgramArray::indices(&self) -> aya::maps::MapKeys<'_, u32> impl> aya::maps::ProgramArray pub fn aya::maps::ProgramArray::clear_index(&mut self, index: &u32) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::ProgramArray::set(&mut self, index: u32, program: &aya::programs::ProgramFd, flags: u64) -> core::result::Result<(), aya::maps::MapError> +impl> aya::maps::ProgramArray +pub fn aya::maps::ProgramArray::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl core::convert::TryFrom for aya::maps::ProgramArray pub type aya::maps::ProgramArray::Error = aya::maps::MapError pub fn aya::maps::ProgramArray::try_from(map: aya::maps::Map) -> core::result::Result @@ -1858,6 +1912,8 @@ pub struct aya::maps::Queue impl, V: aya::Pod> aya::maps::queue::Queue pub fn aya::maps::queue::Queue::capacity(&self) -> u32 impl, V: aya::Pod> aya::maps::queue::Queue +pub fn aya::maps::queue::Queue::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl, V: aya::Pod> aya::maps::queue::Queue pub fn aya::maps::queue::Queue::pop(&mut self, flags: u64) -> core::result::Result pub fn aya::maps::queue::Queue::push(&mut self, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::queue::Queue<&'a aya::maps::MapData, V> @@ -1899,6 +1955,8 @@ pub fn aya::maps::SockHash::keys(&self) -> aya::maps::MapKeys<'_, K> impl, K: aya::Pod> aya::maps::SockHash pub fn aya::maps::SockHash::insert(&mut self, key: impl core::borrow::Borrow, value: I, flags: u64) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::SockHash::remove(&mut self, key: &K) -> core::result::Result<(), aya::maps::MapError> +impl, V: aya::Pod> aya::maps::SockHash +pub fn aya::maps::SockHash::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::SockHash<&'a aya::maps::MapData, V> pub type aya::maps::SockHash<&'a aya::maps::MapData, V>::Error = aya::maps::MapError pub fn aya::maps::SockHash<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result @@ -1939,6 +1997,8 @@ pub fn aya::maps::SockMap::indices(&self) -> aya::maps::MapKeys<'_, u32> impl> aya::maps::SockMap pub fn aya::maps::SockMap::clear_index(&mut self, index: &u32) -> core::result::Result<(), aya::maps::MapError> pub fn aya::maps::SockMap::set(&mut self, index: u32, socket: &I, flags: u64) -> core::result::Result<(), aya::maps::MapError> +impl> aya::maps::SockMap +pub fn aya::maps::SockMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl core::convert::TryFrom for aya::maps::SockMap pub type aya::maps::SockMap::Error = aya::maps::MapError pub fn aya::maps::SockMap::try_from(map: aya::maps::Map) -> core::result::Result @@ -1973,6 +2033,8 @@ pub struct aya::maps::Stack impl, V: aya::Pod> aya::maps::stack::Stack pub fn aya::maps::stack::Stack::capacity(&self) -> u32 impl, V: aya::Pod> aya::maps::stack::Stack +pub fn aya::maps::stack::Stack::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl, V: aya::Pod> aya::maps::stack::Stack pub fn aya::maps::stack::Stack::pop(&mut self, flags: u64) -> core::result::Result pub fn aya::maps::stack::Stack::push(&mut self, value: impl core::borrow::Borrow, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::stack::Stack<&'a aya::maps::MapData, V> @@ -2010,6 +2072,8 @@ impl> aya::maps::stack_trace::StackT pub fn aya::maps::stack_trace::StackTraceMap::get(&self, stack_id: &u32, flags: u64) -> core::result::Result pub fn aya::maps::stack_trace::StackTraceMap::iter(&self) -> aya::maps::MapIter<'_, u32, aya::maps::stack_trace::StackTrace, Self> pub fn aya::maps::stack_trace::StackTraceMap::stack_ids(&self) -> aya::maps::MapKeys<'_, u32> +impl> aya::maps::stack_trace::StackTraceMap +pub fn aya::maps::stack_trace::StackTraceMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> impl core::convert::TryFrom for aya::maps::stack_trace::StackTraceMap pub type aya::maps::stack_trace::StackTraceMap::Error = aya::maps::MapError pub fn aya::maps::stack_trace::StackTraceMap::try_from(map: aya::maps::Map) -> core::result::Result @@ -2053,6 +2117,8 @@ pub struct aya::maps::XskMap impl> aya::maps::XskMap pub fn aya::maps::XskMap::len(&self) -> u32 impl> aya::maps::XskMap +pub fn aya::maps::XskMap::pin>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError> +impl> aya::maps::XskMap pub fn aya::maps::XskMap::set(&mut self, index: u32, socket_fd: impl std::os::fd::raw::AsRawFd, flags: u64) -> core::result::Result<(), aya::maps::MapError> impl core::convert::TryFrom for aya::maps::XskMap pub type aya::maps::XskMap::Error = aya::maps::MapError @@ -7349,7 +7415,6 @@ pub aya::BpfError::FileError::error: std::io::error::Error pub aya::BpfError::FileError::path: std::path::PathBuf pub aya::BpfError::MapError(aya::maps::MapError) pub aya::BpfError::NoBTF -pub aya::BpfError::NoPinPath pub aya::BpfError::ParseError(aya_obj::obj::ParseError) pub aya::BpfError::ProgramError(aya::programs::ProgramError) pub aya::BpfError::RelocationError(aya_obj::relocation::BpfRelocationError) @@ -7403,6 +7468,7 @@ pub fn aya::Bpf::load_file>(path: P) -> pub fn aya::Bpf::map(&self, name: &str) -> core::option::Option<&aya::maps::Map> pub fn aya::Bpf::map_mut(&mut self, name: &str) -> core::option::Option<&mut aya::maps::Map> pub fn aya::Bpf::maps(&self) -> impl core::iter::traits::iterator::Iterator +pub fn aya::Bpf::maps_mut(&mut self) -> impl core::iter::traits::iterator::Iterator pub fn aya::Bpf::program(&self, name: &str) -> core::option::Option<&aya::programs::Program> pub fn aya::Bpf::program_mut(&mut self, name: &str) -> core::option::Option<&mut aya::programs::Program> pub fn aya::Bpf::programs(&self) -> impl core::iter::traits::iterator::Iterator