From cee0265b5291acb747cf3a9532cfbf61c455f398 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Tue, 29 Aug 2023 17:38:55 -0400 Subject: [PATCH 1/6] netlink: use OwnedFd Updates #612. --- aya/src/programs/xdp.rs | 8 +++++-- aya/src/sys/netlink.rs | 51 ++++++++++++++++++++++++++++------------- 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/aya/src/programs/xdp.rs b/aya/src/programs/xdp.rs index 499b2b38..89574328 100644 --- a/aya/src/programs/xdp.rs +++ b/aya/src/programs/xdp.rs @@ -11,7 +11,7 @@ use std::{ ffi::CString, hash::Hash, io, - os::fd::{AsFd as _, AsRawFd as _, RawFd}, + os::fd::{AsFd as _, AsRawFd as _, BorrowedFd, RawFd}, }; use thiserror::Error; @@ -201,6 +201,8 @@ impl Xdp { XdpLinkInner::NlLink(nl_link) => { let if_index = nl_link.if_index; let old_prog_fd = nl_link.prog_fd; + // SAFETY: TODO(https://github.com/aya-rs/aya/issues/612): make this safe by not holding `RawFd`s. + let old_prog_fd = unsafe { BorrowedFd::borrow_raw(old_prog_fd) }; let flags = nl_link.flags; let replace_flags = flags | XdpFlags::REPLACE; unsafe { @@ -246,7 +248,9 @@ impl Link for NlLink { } else { self.flags.bits() }; - let _ = unsafe { netlink_set_xdp_fd(self.if_index, None, Some(self.prog_fd), flags) }; + // SAFETY: TODO(https://github.com/aya-rs/aya/issues/612): make this safe by not holding `RawFd`s. + let prog_fd = unsafe { BorrowedFd::borrow_raw(self.prog_fd) }; + let _ = unsafe { netlink_set_xdp_fd(self.if_index, None, Some(prog_fd), flags) }; Ok(()) } } diff --git a/aya/src/sys/netlink.rs b/aya/src/sys/netlink.rs index 3643e95b..c4679aab 100644 --- a/aya/src/sys/netlink.rs +++ b/aya/src/sys/netlink.rs @@ -2,13 +2,13 @@ use std::{ collections::HashMap, ffi::CStr, io, mem, - os::fd::{AsRawFd as _, BorrowedFd, RawFd}, + os::fd::{AsRawFd as _, BorrowedFd, FromRawFd as _, OwnedFd}, ptr, slice, }; use thiserror::Error; use libc::{ - close, getsockname, nlattr, nlmsgerr, nlmsghdr, recv, send, setsockopt, sockaddr_nl, socket, + getsockname, nlattr, nlmsgerr, nlmsghdr, recv, send, setsockopt, sockaddr_nl, socket, AF_NETLINK, AF_UNSPEC, ETH_P_ALL, IFF_UP, IFLA_XDP, NETLINK_EXT_ACK, NETLINK_ROUTE, NLA_ALIGNTO, NLA_F_NESTED, NLA_TYPE_MASK, NLMSG_DONE, NLMSG_ERROR, NLM_F_ACK, NLM_F_CREATE, NLM_F_DUMP, NLM_F_ECHO, NLM_F_EXCL, NLM_F_MULTI, NLM_F_REQUEST, RTM_DELTFILTER, RTM_GETTFILTER, @@ -32,7 +32,7 @@ const NLA_HDR_LEN: usize = align_to(mem::size_of::(), NLA_ALIGNTO as usi pub(crate) unsafe fn netlink_set_xdp_fd( if_index: i32, fd: Option>, - old_fd: Option, + old_fd: Option>, flags: u32, ) -> Result<(), io::Error> { let sock = NetlinkSocket::open()?; @@ -64,7 +64,10 @@ pub(crate) unsafe fn netlink_set_xdp_fd( } if flags & XDP_FLAGS_REPLACE != 0 { - attrs.write_attr(IFLA_XDP_EXPECTED_FD as u16, old_fd.unwrap())?; + attrs.write_attr( + IFLA_XDP_EXPECTED_FD as u16, + old_fd.map(|fd| fd.as_raw_fd()).unwrap(), + )?; } let nla_len = attrs.finish()?; @@ -290,7 +293,7 @@ struct TcRequest { } struct NetlinkSocket { - sock: RawFd, + sock: OwnedFd, _nl_pid: u32, } @@ -301,12 +304,14 @@ impl NetlinkSocket { if sock < 0 { return Err(io::Error::last_os_error()); } + // SAFETY: `socket` returns a file descriptor. + let sock = unsafe { OwnedFd::from_raw_fd(sock) }; let enable = 1i32; // Safety: libc wrapper unsafe { setsockopt( - sock, + sock.as_raw_fd(), SOL_NETLINK, NETLINK_EXT_ACK, &enable as *const _ as *const _, @@ -319,7 +324,13 @@ impl NetlinkSocket { addr.nl_family = AF_NETLINK as u16; let mut addr_len = mem::size_of::() as u32; // Safety: libc wrapper - if unsafe { getsockname(sock, &mut addr as *mut _ as *mut _, &mut addr_len as *mut _) } < 0 + if unsafe { + getsockname( + sock.as_raw_fd(), + &mut addr as *mut _ as *mut _, + &mut addr_len as *mut _, + ) + } < 0 { return Err(io::Error::last_os_error()); } @@ -331,7 +342,15 @@ impl NetlinkSocket { } fn send(&self, msg: &[u8]) -> Result<(), io::Error> { - if unsafe { send(self.sock, msg.as_ptr() as *const _, msg.len(), 0) } < 0 { + if unsafe { + send( + self.sock.as_raw_fd(), + msg.as_ptr() as *const _, + msg.len(), + 0, + ) + } < 0 + { return Err(io::Error::last_os_error()); } Ok(()) @@ -344,7 +363,14 @@ impl NetlinkSocket { 'out: while multipart { multipart = false; // Safety: libc wrapper - let len = unsafe { recv(self.sock, buf.as_mut_ptr() as *mut _, buf.len(), 0) }; + let len = unsafe { + recv( + self.sock.as_raw_fd(), + buf.as_mut_ptr() as *mut _, + buf.len(), + 0, + ) + }; if len < 0 { return Err(io::Error::last_os_error()); } @@ -430,13 +456,6 @@ impl NetlinkMessage { } } -impl Drop for NetlinkSocket { - fn drop(&mut self) { - // Safety: libc wrapper - unsafe { close(self.sock) }; - } -} - const fn align_to(v: usize, align: usize) -> usize { (v + (align - 1)) & !(align - 1) } From 204d02022a94dab441029855e5d39d5143444204 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Tue, 29 Aug 2023 17:52:58 -0400 Subject: [PATCH 2/6] programs: ProgAttachLink and LircLink hold owned FDs Updates #612. --- aya/src/programs/links.rs | 33 +++++++++++++------------- aya/src/programs/lirc_mode2.rs | 42 +++++++++++++--------------------- aya/src/sys/bpf.rs | 28 ++++++++++++++++++----- 3 files changed, 55 insertions(+), 48 deletions(-) diff --git a/aya/src/programs/links.rs b/aya/src/programs/links.rs index 619ebef6..d06a62e4 100644 --- a/aya/src/programs/links.rs +++ b/aya/src/programs/links.rs @@ -12,10 +12,8 @@ use std::{ use crate::{ generated::bpf_attach_type, pin::PinError, - programs::ProgramError, - sys::{ - bpf_get_object, bpf_pin_object, bpf_prog_attach, bpf_prog_detach, SysResult, SyscallError, - }, + programs::{ProgramError, ProgramFd}, + sys::{bpf_get_object, bpf_pin_object, bpf_prog_attach, bpf_prog_detach, SyscallError}, }; /// A Link. @@ -234,7 +232,7 @@ pub struct ProgAttachLinkId(RawFd, RawFd, bpf_attach_type); /// The Link type used by programs that are attached with `bpf_prog_attach`. #[derive(Debug)] pub struct ProgAttachLink { - prog_fd: RawFd, + prog_fd: ProgramFd, target_fd: OwnedFd, attach_type: bpf_attach_type, } @@ -249,15 +247,11 @@ impl ProgAttachLink { // going to need a duplicate whose lifetime we manage. Let's // duplicate it prior to attaching it so the new file // descriptor is closed at drop in case it fails to attach. + let prog_fd = prog_fd.try_clone_to_owned()?; let target_fd = target_fd.try_clone_to_owned()?; - bpf_prog_attach(prog_fd, target_fd.as_fd(), attach_type).map_err(|(_, io_error)| { - SyscallError { - call: "bpf_prog_attach", - io_error, - } - })?; + bpf_prog_attach(prog_fd.as_fd(), target_fd.as_fd(), attach_type)?; - let prog_fd = prog_fd.as_raw_fd(); + let prog_fd = ProgramFd(prog_fd); Ok(Self { prog_fd, target_fd, @@ -270,13 +264,20 @@ impl Link for ProgAttachLink { type Id = ProgAttachLinkId; fn id(&self) -> Self::Id { - ProgAttachLinkId(self.prog_fd, self.target_fd.as_raw_fd(), self.attach_type) + ProgAttachLinkId( + self.prog_fd.as_fd().as_raw_fd(), + self.target_fd.as_raw_fd(), + self.attach_type, + ) } fn detach(self) -> Result<(), ProgramError> { - let _: SysResult<_> = - bpf_prog_detach(self.prog_fd, self.target_fd.as_fd(), self.attach_type); - Ok(()) + bpf_prog_detach( + self.prog_fd.as_fd(), + self.target_fd.as_fd(), + self.attach_type, + ) + .map_err(Into::into) } } diff --git a/aya/src/programs/lirc_mode2.rs b/aya/src/programs/lirc_mode2.rs index 7b0d886f..6e62ce60 100644 --- a/aya/src/programs/lirc_mode2.rs +++ b/aya/src/programs/lirc_mode2.rs @@ -1,10 +1,10 @@ //! Lirc programs. -use std::os::fd::{AsFd, AsRawFd, BorrowedFd, IntoRawFd as _, OwnedFd, RawFd}; +use std::os::fd::{AsFd, AsRawFd as _, OwnedFd, RawFd}; use crate::{ generated::{bpf_attach_type::BPF_LIRC_MODE2, bpf_prog_type::BPF_PROG_TYPE_LIRC_MODE2}, - programs::{load_program, query, Link, ProgramData, ProgramError, ProgramInfo}, - sys::{bpf_prog_attach, bpf_prog_detach, bpf_prog_get_fd_by_id, SysResult, SyscallError}, + programs::{load_program, query, Link, ProgramData, ProgramError, ProgramFd, ProgramInfo}, + sys::{bpf_prog_attach, bpf_prog_detach, bpf_prog_get_fd_by_id}, }; /// A program used to decode IR into key events for a lirc device. @@ -60,20 +60,15 @@ impl LircMode2 { /// The returned value can be used to detach, see [LircMode2::detach]. pub fn attach(&mut self, lircdev: T) -> Result { let prog_fd = self.fd()?; - let prog_fd = prog_fd.as_fd(); // The link is going to own this new file descriptor so we are // going to need a duplicate whose lifetime we manage. Let's // duplicate it prior to attaching it so the new file // descriptor is closed at drop in case it fails to attach. + let prog_fd = prog_fd.try_clone()?; let lircdev_fd = lircdev.as_fd().try_clone_to_owned()?; - bpf_prog_attach(prog_fd, lircdev_fd.as_fd(), BPF_LIRC_MODE2).map_err(|(_, io_error)| { - SyscallError { - call: "bpf_prog_attach", - io_error, - } - })?; + bpf_prog_attach(prog_fd.as_fd(), lircdev_fd.as_fd(), BPF_LIRC_MODE2)?; self.data.links.insert(LircLink::new(prog_fd, lircdev_fd)) } @@ -103,13 +98,7 @@ impl LircMode2 { .map(|prog_id| { let prog_fd = bpf_prog_get_fd_by_id(prog_id)?; let target_fd = target_fd.try_clone_to_owned()?; - // SAFETY: The file descriptor will stay valid because - // we are leaking it. We cannot use `OwnedFd` in here - // because LircMode2::attach also uses LircLink::new - // but with a borrowed file descriptor (of the loaded - // program) without duplicating. TODO(#612): Fix API - // or internals so this file descriptor isn't leaked - let prog_fd = unsafe { BorrowedFd::borrow_raw(prog_fd.into_raw_fd()) }; + let prog_fd = ProgramFd(prog_fd); Ok(LircLink::new(prog_fd, target_fd)) }) .collect() @@ -123,21 +112,22 @@ pub struct LircLinkId(RawFd, RawFd); #[derive(Debug)] /// An LircMode2 Link pub struct LircLink { - prog_fd: RawFd, + prog_fd: ProgramFd, target_fd: OwnedFd, } impl LircLink { - pub(crate) fn new(prog_fd: BorrowedFd<'_>, target_fd: OwnedFd) -> Self { - let prog_fd = prog_fd.as_raw_fd(); + pub(crate) fn new(prog_fd: ProgramFd, target_fd: OwnedFd) -> Self { Self { prog_fd, target_fd } } /// Get ProgramInfo from this link pub fn info(&self) -> Result { - // SAFETY: TODO(https://github.com/aya-rs/aya/issues/612): make this safe by not holding `RawFd`s. - let prog_fd = unsafe { BorrowedFd::borrow_raw(self.prog_fd) }; - ProgramInfo::new_from_fd(prog_fd) + let Self { + prog_fd, + target_fd: _, + } = self; + ProgramInfo::new_from_fd(prog_fd.as_fd()) } } @@ -145,11 +135,11 @@ impl Link for LircLink { type Id = LircLinkId; fn id(&self) -> Self::Id { - LircLinkId(self.prog_fd, self.target_fd.as_raw_fd()) + LircLinkId(self.prog_fd.as_fd().as_raw_fd(), self.target_fd.as_raw_fd()) } fn detach(self) -> Result<(), ProgramError> { - let _: SysResult<_> = bpf_prog_detach(self.prog_fd, self.target_fd.as_fd(), BPF_LIRC_MODE2); - Ok(()) + bpf_prog_detach(self.prog_fd.as_fd(), self.target_fd.as_fd(), BPF_LIRC_MODE2) + .map_err(Into::into) } } diff --git a/aya/src/sys/bpf.rs b/aya/src/sys/bpf.rs index 41f6fd6f..801ea48d 100644 --- a/aya/src/sys/bpf.rs +++ b/aya/src/sys/bpf.rs @@ -425,28 +425,44 @@ pub(crate) fn bpf_prog_attach( prog_fd: BorrowedFd<'_>, target_fd: BorrowedFd<'_>, attach_type: bpf_attach_type, -) -> SysResult { +) -> Result<(), SyscallError> { let mut attr = unsafe { mem::zeroed::() }; attr.__bindgen_anon_5.attach_bpf_fd = prog_fd.as_raw_fd() as u32; attr.__bindgen_anon_5.target_fd = target_fd.as_raw_fd() as u32; attr.__bindgen_anon_5.attach_type = attach_type as u32; - sys_bpf(bpf_cmd::BPF_PROG_ATTACH, &mut attr) + let ret = sys_bpf(bpf_cmd::BPF_PROG_ATTACH, &mut attr).map_err(|(code, io_error)| { + assert_eq!(code, -1); + SyscallError { + call: "bpf_prog_attach", + io_error, + } + })?; + assert_eq!(ret, 0); + Ok(()) } pub(crate) fn bpf_prog_detach( - prog_fd: RawFd, + prog_fd: BorrowedFd<'_>, target_fd: BorrowedFd<'_>, attach_type: bpf_attach_type, -) -> SysResult { +) -> Result<(), SyscallError> { let mut attr = unsafe { mem::zeroed::() }; - attr.__bindgen_anon_5.attach_bpf_fd = prog_fd as u32; + attr.__bindgen_anon_5.attach_bpf_fd = prog_fd.as_raw_fd() as u32; attr.__bindgen_anon_5.target_fd = target_fd.as_raw_fd() as u32; attr.__bindgen_anon_5.attach_type = attach_type as u32; - sys_bpf(bpf_cmd::BPF_PROG_DETACH, &mut attr) + let ret = sys_bpf(bpf_cmd::BPF_PROG_DETACH, &mut attr).map_err(|(code, io_error)| { + assert_eq!(code, -1); + SyscallError { + call: "bpf_prog_detach", + io_error, + } + })?; + assert_eq!(ret, 0); + Ok(()) } pub(crate) fn bpf_prog_query( From 8b0c7f12046c2ebadcee5e7ab813d5a34ddc08c6 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Thu, 31 Aug 2023 12:21:49 -0400 Subject: [PATCH 3/6] async_perf_event_array: access inner through async Avoid holding onto raw file descriptors. Remove some implied bounds (BorrowMut implies Borrow). --- aya/src/maps/perf/async_perf_event_array.rs | 52 +++++++++------------ aya/src/maps/perf/perf_event_array.rs | 7 ++- xtask/public-api/aya.txt | 16 +++---- 3 files changed, 33 insertions(+), 42 deletions(-) diff --git a/aya/src/maps/perf/async_perf_event_array.rs b/aya/src/maps/perf/async_perf_event_array.rs index 7c942e26..83e9484a 100644 --- a/aya/src/maps/perf/async_perf_event_array.rs +++ b/aya/src/maps/perf/async_perf_event_array.rs @@ -1,8 +1,5 @@ use bytes::BytesMut; -use std::{ - borrow::{Borrow, BorrowMut}, - os::fd::{AsRawFd as _, RawFd}, -}; +use std::borrow::{Borrow, BorrowMut}; // See https://doc.rust-lang.org/cargo/reference/features.html#mutually-exclusive-features. // @@ -92,7 +89,7 @@ pub struct AsyncPerfEventArray { perf_map: PerfEventArray, } -impl + Borrow> AsyncPerfEventArray { +impl> AsyncPerfEventArray { /// Opens the perf buffer at the given index. /// /// The returned buffer will receive all the events eBPF programs send at the given index. @@ -103,16 +100,11 @@ impl + Borrow> AsyncPerfEventArray { ) -> Result, PerfBufferError> { let Self { perf_map } = self; let buf = perf_map.open(index, page_count)?; - let fd = buf.as_raw_fd(); - Ok(AsyncPerfEventArrayBuffer { - buf, - - #[cfg(feature = "async_tokio")] - async_tokio_fd: AsyncFd::new(fd)?, - - #[cfg(all(not(feature = "async_tokio"), feature = "async_std"))] - async_std_fd: Async::new(fd)?, - }) + #[cfg(feature = "async_tokio")] + let buf = AsyncFd::new(buf)?; + #[cfg(all(not(feature = "async_tokio"), feature = "async_std"))] + let buf = Async::new(buf)?; + Ok(AsyncPerfEventArrayBuffer { buf }) } } @@ -131,17 +123,18 @@ impl> AsyncPerfEventArray { /// /// See the [`AsyncPerfEventArray` documentation](AsyncPerfEventArray) for an overview of how to /// use perf buffers. -pub struct AsyncPerfEventArrayBuffer { +pub struct AsyncPerfEventArrayBuffer> { + #[cfg(not(any(feature = "async_tokio", feature = "async_std")))] buf: PerfEventArrayBuffer, #[cfg(feature = "async_tokio")] - async_tokio_fd: AsyncFd, + buf: AsyncFd>, #[cfg(all(not(feature = "async_tokio"), feature = "async_std"))] - async_std_fd: Async, + buf: Async>, } -impl + Borrow> AsyncPerfEventArrayBuffer { +impl> AsyncPerfEventArrayBuffer { /// Reads events from the buffer. /// /// This method reads events into the provided slice of buffers, filling @@ -155,21 +148,20 @@ impl + Borrow> AsyncPerfEventArrayBuffer { &mut self, buffers: &mut [BytesMut], ) -> Result { - let Self { - buf, - #[cfg(feature = "async_tokio")] - async_tokio_fd, - #[cfg(all(not(feature = "async_tokio"), feature = "async_std"))] - async_std_fd, - } = self; + let Self { buf } = self; loop { #[cfg(feature = "async_tokio")] - let mut guard = async_tokio_fd.readable_mut().await?; + let mut guard = buf.readable_mut().await?; + #[cfg(feature = "async_tokio")] + let buf = guard.get_inner_mut(); #[cfg(all(not(feature = "async_tokio"), feature = "async_std"))] - if !buf.readable() { - async_std_fd.readable().await?; - } + let buf = { + if !buf.get_ref().readable() { + buf.readable().await?; + } + buf.get_mut() + }; let events = buf.read_events(buffers)?; const EMPTY: Events = Events { read: 0, lost: 0 }; diff --git a/aya/src/maps/perf/perf_event_array.rs b/aya/src/maps/perf/perf_event_array.rs index bde255ed..1d19d373 100644 --- a/aya/src/maps/perf/perf_event_array.rs +++ b/aya/src/maps/perf/perf_event_array.rs @@ -31,7 +31,7 @@ pub struct PerfEventArrayBuffer { buf: PerfBuffer, } -impl + Borrow> PerfEventArrayBuffer { +impl> PerfEventArrayBuffer { /// Returns true if the buffer contains events that haven't been read. pub fn readable(&self) -> bool { self.buf.readable() @@ -55,7 +55,7 @@ impl + Borrow> PerfEventArrayBuffer { } } -impl + Borrow> AsRawFd for PerfEventArrayBuffer { +impl> AsRawFd for PerfEventArrayBuffer { fn as_raw_fd(&self) -> RawFd { self.buf.as_raw_fd() } @@ -169,7 +169,7 @@ impl> PerfEventArray { } } -impl + Borrow> PerfEventArray { +impl> PerfEventArray { /// Opens the perf buffer at the given index. /// /// The returned buffer will receive all the events eBPF programs send at the given index. @@ -180,7 +180,6 @@ impl + Borrow> PerfEventArray { ) -> Result, PerfBufferError> { // FIXME: keep track of open buffers - // this cannot fail as new() checks that the fd is open let map_data: &MapData = self.map.deref().borrow(); let map_fd = map_data.fd; let buf = PerfBuffer::open(index, self.page_size, page_count.unwrap_or(2))?; diff --git a/xtask/public-api/aya.txt b/xtask/public-api/aya.txt index 388024ce..ae3c865a 100644 --- a/xtask/public-api/aya.txt +++ b/xtask/public-api/aya.txt @@ -372,7 +372,7 @@ pub fn aya::maps::perf::PerfBufferError::borrow_mut(&mut self) -> &mut T impl core::convert::From for aya::maps::perf::PerfBufferError pub fn aya::maps::perf::PerfBufferError::from(t: T) -> T pub struct aya::maps::perf::AsyncPerfEventArray -impl + core::borrow::Borrow> aya::maps::perf::AsyncPerfEventArray +impl> aya::maps::perf::AsyncPerfEventArray pub fn aya::maps::perf::AsyncPerfEventArray::open(&mut self, index: u32, page_count: core::option::Option) -> core::result::Result, aya::maps::perf::PerfBufferError> impl core::convert::TryFrom for aya::maps::perf::AsyncPerfEventArray pub type aya::maps::perf::AsyncPerfEventArray::Error = aya::maps::MapError @@ -404,8 +404,8 @@ impl core::borrow::BorrowMut for aya::maps::perf::AsyncPerfEventArray w pub fn aya::maps::perf::AsyncPerfEventArray::borrow_mut(&mut self) -> &mut T impl core::convert::From for aya::maps::perf::AsyncPerfEventArray pub fn aya::maps::perf::AsyncPerfEventArray::from(t: T) -> T -pub struct aya::maps::perf::AsyncPerfEventArrayBuffer -impl + core::borrow::Borrow> aya::maps::perf::AsyncPerfEventArrayBuffer +pub struct aya::maps::perf::AsyncPerfEventArrayBuffer> +impl> aya::maps::perf::AsyncPerfEventArrayBuffer pub async fn aya::maps::perf::AsyncPerfEventArrayBuffer::read_events(&mut self, buffers: &mut [bytes::bytes_mut::BytesMut]) -> core::result::Result impl core::marker::Send for aya::maps::perf::AsyncPerfEventArrayBuffer where T: core::marker::Send + core::marker::Sync impl core::marker::Sync for aya::maps::perf::AsyncPerfEventArrayBuffer where T: core::marker::Send + core::marker::Sync @@ -460,7 +460,7 @@ pub fn aya::maps::perf::Events::borrow_mut(&mut self) -> &mut T impl core::convert::From for aya::maps::perf::Events pub fn aya::maps::perf::Events::from(t: T) -> T pub struct aya::maps::perf::PerfEventArray -impl + core::borrow::Borrow> aya::maps::perf::PerfEventArray +impl> aya::maps::perf::PerfEventArray pub fn aya::maps::perf::PerfEventArray::open(&mut self, index: u32, page_count: core::option::Option) -> core::result::Result, aya::maps::perf::PerfBufferError> impl core::convert::TryFrom for aya::maps::perf::PerfEventArray pub type aya::maps::perf::PerfEventArray::Error = aya::maps::MapError @@ -493,10 +493,10 @@ pub fn aya::maps::perf::PerfEventArray::borrow_mut(&mut self) -> &mut T impl core::convert::From for aya::maps::perf::PerfEventArray pub fn aya::maps::perf::PerfEventArray::from(t: T) -> T pub struct aya::maps::perf::PerfEventArrayBuffer -impl + core::borrow::Borrow> aya::maps::perf::PerfEventArrayBuffer +impl> aya::maps::perf::PerfEventArrayBuffer pub fn aya::maps::perf::PerfEventArrayBuffer::read_events(&mut self, out_bufs: &mut [bytes::bytes_mut::BytesMut]) -> core::result::Result pub fn aya::maps::perf::PerfEventArrayBuffer::readable(&self) -> bool -impl + core::borrow::Borrow> std::os::fd::raw::AsRawFd for aya::maps::perf::PerfEventArrayBuffer +impl> std::os::fd::raw::AsRawFd for aya::maps::perf::PerfEventArrayBuffer pub fn aya::maps::perf::PerfEventArrayBuffer::as_raw_fd(&self) -> std::os::fd::raw::RawFd impl core::marker::Send for aya::maps::perf::PerfEventArrayBuffer where T: core::marker::Send + core::marker::Sync impl core::marker::Sync for aya::maps::perf::PerfEventArrayBuffer where T: core::marker::Send + core::marker::Sync @@ -1067,7 +1067,7 @@ pub fn aya::maps::array::Array::borrow_mut(&mut self) -> &mut T impl core::convert::From for aya::maps::array::Array pub fn aya::maps::array::Array::from(t: T) -> T pub struct aya::maps::AsyncPerfEventArray -impl + core::borrow::Borrow> aya::maps::perf::AsyncPerfEventArray +impl> aya::maps::perf::AsyncPerfEventArray pub fn aya::maps::perf::AsyncPerfEventArray::open(&mut self, index: u32, page_count: core::option::Option) -> core::result::Result, aya::maps::perf::PerfBufferError> impl core::convert::TryFrom for aya::maps::perf::AsyncPerfEventArray pub type aya::maps::perf::AsyncPerfEventArray::Error = aya::maps::MapError @@ -1460,7 +1460,7 @@ pub fn aya::maps::PerCpuValues::borrow_mut(&mut self) -> &mut T impl core::convert::From for aya::maps::PerCpuValues pub fn aya::maps::PerCpuValues::from(t: T) -> T pub struct aya::maps::PerfEventArray -impl + core::borrow::Borrow> aya::maps::perf::PerfEventArray +impl> aya::maps::perf::PerfEventArray pub fn aya::maps::perf::PerfEventArray::open(&mut self, index: u32, page_count: core::option::Option) -> core::result::Result, aya::maps::perf::PerfBufferError> impl core::convert::TryFrom for aya::maps::perf::PerfEventArray pub type aya::maps::perf::PerfEventArray::Error = aya::maps::MapError From 2a1bf609b2b1239c9a789f1a1c814dfa888dfd1d Mon Sep 17 00:00:00 2001 From: Andrew Werner Date: Thu, 31 Aug 2023 21:32:56 -0400 Subject: [PATCH 4/6] aya/maps: rework TryFrom macros The old macros were repetitive and inflexible. This unifies the various macros used to generate TryFrom implementations for map implementations from the relevant map enum variants. Cleanup in anticipation of fixing #636. The API changes are just about renaming the return to Self and Self::Error; they are not real changes. --- aya/src/maps/mod.rs | 209 ++++++++--------------- xtask/public-api/aya.txt | 360 +++++++++++++++++++-------------------- 2 files changed, 248 insertions(+), 321 deletions(-) diff --git a/aya/src/maps/mod.rs b/aya/src/maps/mod.rs index dfa0949c..cd082530 100644 --- a/aya/src/maps/mod.rs +++ b/aya/src/maps/mod.rs @@ -281,155 +281,82 @@ impl Map { } } +// 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). macro_rules! impl_try_from_map { - ($($tx:ident from Map::$ty:ident),+ $(,)?) => { - $( - impl<'a> TryFrom<&'a Map> for $tx<&'a MapData> { - type Error = MapError; - - fn try_from(map: &'a Map) -> Result<$tx<&'a MapData>, MapError> { - match map { - Map::$ty(m) => { - $tx::new(m) - }, - _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), - } - } - } - - impl<'a,> TryFrom<&'a mut Map> for $tx<&'a mut MapData> { - type Error = MapError; - - fn try_from(map: &'a mut Map) -> Result<$tx<&'a mut MapData>, MapError> { - match map { - Map::$ty(m) => { - $tx::new(m) - }, - _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), - } - } - } - - impl TryFrom for $tx { - type Error = MapError; - - fn try_from(map: Map) -> Result<$tx, MapError> { - match map { - Map::$ty(m) => { - $tx::new(m) - }, - _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), - } + // At the root the type parameters are marked as a single token tree which will be pasted into + // the invocation for each type. Note that the later patterns require that the token tree be + // zero or more comma separated idents wrapped in parens. Note that the tt metavar is used here + // rather than the repeated idents used later because the macro language does not allow one + // repetition to be pasted inside another. + ($ty_param:tt { + $($ty:ident $(from $variant:ident)?),+ $(,)? + }) => { + $(impl_try_from_map!(<$ty_param> $ty $(from $variant)?);)+ + }; + // Add the "from $variant" using $ty as the default if it is missing. + (<$ty_param:tt> $ty:ident) => { + impl_try_from_map!(<$ty_param> $ty from $ty); + }; + // Dispatch for each of the lifetimes. + ( + <($($ty_param:ident),*)> $ty:ident from $variant:ident + ) => { + impl_try_from_map!(<'a> ($($ty_param),*) $ty from $variant); + impl_try_from_map!(<'a mut> ($($ty_param),*) $ty from $variant); + impl_try_from_map!(<> ($($ty_param),*) $ty from $variant); + }; + // An individual impl. + ( + <$($l:lifetime $($m:ident)?)?> + ($($ty_param:ident),*) + $ty:ident from $variant:ident + ) => { + impl<$($l,)? $($ty_param: Pod),*> TryFrom<$(&$l $($m)?)? Map> + for $ty<$(&$l $($m)?)? MapData, $($ty_param),*> + { + type Error = MapError; + + fn try_from(map: $(&$l $($m)?)? Map) -> Result { + match map { + Map::$variant(map_data) => Self::new(map_data), + map => Err(MapError::InvalidMapType { + map_type: map.map_type() + }), } } - )+ - } + } + }; } -impl_try_from_map!( - ProgramArray from Map::ProgramArray, - SockMap from Map::SockMap, - PerfEventArray from Map::PerfEventArray, - StackTraceMap from Map::StackTraceMap, -); +impl_try_from_map!(() { + ProgramArray, + SockMap, + PerfEventArray, + StackTraceMap, +}); #[cfg(any(feature = "async_tokio", feature = "async_std"))] #[cfg_attr(docsrs, doc(cfg(any(feature = "async_tokio", feature = "async_std"))))] -impl_try_from_map!( - AsyncPerfEventArray from Map::PerfEventArray, -); - -macro_rules! impl_try_from_map_generic_key_or_value { - ($($ty:ident),+ $(,)?) => { - $( - impl<'a, V:Pod> TryFrom<&'a Map> for $ty<&'a MapData, V> { - type Error = MapError; - - fn try_from(map: &'a Map) -> Result<$ty<&'a MapData , V>, MapError> { - match map { - Map::$ty(m) => { - $ty::new(m) - }, - _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), - } - } - } - - impl<'a,V: Pod> TryFrom<&'a mut Map> for $ty<&'a mut MapData, V> { - type Error = MapError; - - fn try_from(map: &'a mut Map) -> Result<$ty<&'a mut MapData, V>, MapError> { - match map { - Map::$ty(m) => { - $ty::new(m) - }, - _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), - } - } - } - - impl TryFrom for $ty { - type Error = MapError; - - fn try_from(map: Map) -> Result<$ty, MapError> { - match map { - Map::$ty(m) => { - $ty::new(m) - }, - _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), - } - } - } - )+ - } -} - -impl_try_from_map_generic_key_or_value!(Array, PerCpuArray, SockHash, BloomFilter, Queue, Stack,); - -macro_rules! impl_try_from_map_generic_key_and_value { - ($($ty:ident),+ $(,)?) => { - $( - impl<'a, V: Pod, K: Pod> TryFrom<&'a Map> for $ty<&'a MapData, V, K> { - type Error = MapError; - - fn try_from(map: &'a Map) -> Result<$ty<&'a MapData,V,K>, MapError> { - match map { - Map::$ty(m) => { - $ty::new(m) - }, - _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), - } - } - } - - impl<'a,V: Pod,K: Pod> TryFrom<&'a mut Map> for $ty<&'a mut MapData, V, K> { - type Error = MapError; - - fn try_from(map: &'a mut Map) -> Result<$ty<&'a mut MapData, V, K>, MapError> { - match map { - Map::$ty(m) => { - $ty::new(m) - }, - _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), - } - } - } - - impl TryFrom for $ty { - type Error = MapError; - - fn try_from(map: Map) -> Result<$ty, MapError> { - match map { - Map::$ty(m) => $ty::new(m), - _ => Err(MapError::InvalidMapType { map_type: map.map_type() }), - } - } - } - )+ - } -} - -impl_try_from_map_generic_key_and_value!(HashMap, PerCpuHashMap, LpmTrie); +impl_try_from_map!(() { + AsyncPerfEventArray from PerfEventArray, +}); + +impl_try_from_map!((V) { + Array, + PerCpuArray, + SockHash, + BloomFilter, + Queue, + Stack, +}); + +impl_try_from_map!((K, V) { + HashMap, + PerCpuHashMap, + LpmTrie, +}); pub(crate) fn check_bounds(map: &MapData, index: u32) -> Result<(), MapError> { let max_entries = map.obj.max_entries(); diff --git a/xtask/public-api/aya.txt b/xtask/public-api/aya.txt index 388024ce..9991dd35 100644 --- a/xtask/public-api/aya.txt +++ b/xtask/public-api/aya.txt @@ -15,16 +15,16 @@ impl, V: aya::Pod> aya::maps::arr 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 -pub fn aya::maps::array::Array<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::array::Array<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::array::Array<&'a mut aya::maps::MapData, V> pub type aya::maps::array::Array<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::array::Array<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::array::Array<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl, V: aya::Pod> aya::maps::IterableMap for aya::maps::array::Array pub fn aya::maps::array::Array::get(&self, index: &u32) -> core::result::Result pub fn aya::maps::array::Array::map(&self) -> &aya::maps::MapData impl core::convert::TryFrom for aya::maps::array::Array pub type aya::maps::array::Array::Error = aya::maps::MapError -pub fn aya::maps::array::Array::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::array::Array::try_from(map: aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::array::Array where T: core::marker::Send, V: core::marker::Send impl core::marker::Sync for aya::maps::array::Array where T: core::marker::Sync, V: core::marker::Sync impl core::marker::Unpin for aya::maps::array::Array where T: core::marker::Unpin, V: core::marker::Unpin @@ -55,16 +55,16 @@ impl, V: aya::Pod> aya::maps::Per 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 -pub fn aya::maps::PerCpuArray<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::PerCpuArray<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V> pub type aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl, V: aya::Pod> aya::maps::IterableMap> for aya::maps::PerCpuArray pub fn aya::maps::PerCpuArray::get(&self, index: &u32) -> core::result::Result, aya::maps::MapError> pub fn aya::maps::PerCpuArray::map(&self) -> &aya::maps::MapData impl core::convert::TryFrom for aya::maps::PerCpuArray pub type aya::maps::PerCpuArray::Error = aya::maps::MapError -pub fn aya::maps::PerCpuArray::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::PerCpuArray::try_from(map: aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::PerCpuArray where T: core::marker::Send, V: core::marker::Send impl core::marker::Sync for aya::maps::PerCpuArray where T: core::marker::Sync, V: core::marker::Sync impl core::marker::Unpin for aya::maps::PerCpuArray where T: core::marker::Unpin, V: core::marker::Unpin @@ -94,13 +94,13 @@ pub fn aya::maps::ProgramArray::clear_index(&mut self, index: &u32) -> core:: pub fn aya::maps::ProgramArray::set(&mut self, index: u32, program: &aya::programs::ProgramFd, flags: u64) -> core::result::Result<(), aya::maps::MapError> 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, aya::maps::MapError> +pub fn aya::maps::ProgramArray::try_from(map: aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::ProgramArray<&'a aya::maps::MapData> pub type aya::maps::ProgramArray<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::ProgramArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::ProgramArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::ProgramArray<&'a mut aya::maps::MapData> pub type aya::maps::ProgramArray<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::ProgramArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::ProgramArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::ProgramArray where T: core::marker::Send impl core::marker::Sync for aya::maps::ProgramArray where T: core::marker::Sync impl core::marker::Unpin for aya::maps::ProgramArray where T: core::marker::Unpin @@ -130,13 +130,13 @@ impl, V: aya::Pod> aya::maps::blo pub fn aya::maps::bloom_filter::BloomFilter::insert(&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::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, 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 impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V> pub type aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::bloom_filter::BloomFilter pub type aya::maps::bloom_filter::BloomFilter::Error = aya::maps::MapError -pub fn aya::maps::bloom_filter::BloomFilter::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::bloom_filter::BloomFilter::try_from(map: aya::maps::Map) -> core::result::Result impl core::fmt::Debug for aya::maps::bloom_filter::BloomFilter pub fn aya::maps::bloom_filter::BloomFilter::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result impl core::marker::Send for aya::maps::bloom_filter::BloomFilter where T: core::marker::Send, V: core::marker::Send @@ -169,18 +169,18 @@ 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<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::hash_map::HashMap<&'a aya::maps::MapData, V, K> -pub type aya::maps::hash_map::HashMap<&'a aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::HashMap<&'a aya::maps::MapData, V, K>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, V, K> -pub type aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, V, K>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +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 +impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, K, V> +pub type aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, K, V>::Error = aya::maps::MapError +pub fn aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, K, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result +impl core::convert::TryFrom for aya::maps::hash_map::HashMap +pub type aya::maps::hash_map::HashMap::Error = aya::maps::MapError +pub fn aya::maps::hash_map::HashMap::try_from(map: aya::maps::Map) -> core::result::Result impl, K: aya::Pod, V: aya::Pod> aya::maps::IterableMap for aya::maps::hash_map::HashMap pub fn aya::maps::hash_map::HashMap::get(&self, key: &K) -> core::result::Result pub fn aya::maps::hash_map::HashMap::map(&self) -> &aya::maps::MapData -impl core::convert::TryFrom for aya::maps::hash_map::HashMap -pub type aya::maps::hash_map::HashMap::Error = aya::maps::MapError -pub fn aya::maps::hash_map::HashMap::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> impl core::fmt::Debug for aya::maps::hash_map::HashMap pub fn aya::maps::hash_map::HashMap::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result impl core::marker::Send for aya::maps::hash_map::HashMap where K: core::marker::Send, T: core::marker::Send, V: core::marker::Send @@ -212,18 +212,18 @@ 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<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, V, K> -pub type aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, V, K>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, V, K> -pub type aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, V, K>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +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 +impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, K, V> +pub type aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, K, V>::Error = aya::maps::MapError +pub fn aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, K, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result +impl core::convert::TryFrom for aya::maps::hash_map::PerCpuHashMap +pub type aya::maps::hash_map::PerCpuHashMap::Error = aya::maps::MapError +pub fn aya::maps::hash_map::PerCpuHashMap::try_from(map: aya::maps::Map) -> core::result::Result impl, K: aya::Pod, V: aya::Pod> aya::maps::IterableMap> for aya::maps::hash_map::PerCpuHashMap pub fn aya::maps::hash_map::PerCpuHashMap::get(&self, key: &K) -> core::result::Result, aya::maps::MapError> pub fn aya::maps::hash_map::PerCpuHashMap::map(&self) -> &aya::maps::MapData -impl core::convert::TryFrom for aya::maps::hash_map::PerCpuHashMap -pub type aya::maps::hash_map::PerCpuHashMap::Error = aya::maps::MapError -pub fn aya::maps::hash_map::PerCpuHashMap::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> impl core::marker::Send for aya::maps::hash_map::PerCpuHashMap where K: core::marker::Send, T: core::marker::Send, V: core::marker::Send impl core::marker::Sync for aya::maps::hash_map::PerCpuHashMap where K: core::marker::Sync, T: core::marker::Sync, V: core::marker::Sync impl core::marker::Unpin for aya::maps::hash_map::PerCpuHashMap where K: core::marker::Unpin, T: core::marker::Unpin, V: core::marker::Unpin @@ -291,18 +291,18 @@ 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<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, V, K> -pub type aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, V, K>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, V, K> -pub type aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, V, K>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +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 +impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, K, V> +pub type aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, K, V>::Error = aya::maps::MapError +pub fn aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, K, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result +impl core::convert::TryFrom for aya::maps::lpm_trie::LpmTrie +pub type aya::maps::lpm_trie::LpmTrie::Error = aya::maps::MapError +pub fn aya::maps::lpm_trie::LpmTrie::try_from(map: aya::maps::Map) -> core::result::Result impl, K: aya::Pod, V: aya::Pod> aya::maps::IterableMap, V> for aya::maps::lpm_trie::LpmTrie pub fn aya::maps::lpm_trie::LpmTrie::get(&self, key: &aya::maps::lpm_trie::Key) -> core::result::Result pub fn aya::maps::lpm_trie::LpmTrie::map(&self) -> &aya::maps::MapData -impl core::convert::TryFrom for aya::maps::lpm_trie::LpmTrie -pub type aya::maps::lpm_trie::LpmTrie::Error = aya::maps::MapError -pub fn aya::maps::lpm_trie::LpmTrie::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> impl core::fmt::Debug for aya::maps::lpm_trie::LpmTrie pub fn aya::maps::lpm_trie::LpmTrie::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result impl core::marker::Send for aya::maps::lpm_trie::LpmTrie where K: core::marker::Send, T: core::marker::Send, V: core::marker::Send @@ -376,13 +376,13 @@ impl + core::borrow::Borrow::open(&mut self, index: u32, page_count: core::option::Option) -> core::result::Result, aya::maps::perf::PerfBufferError> impl core::convert::TryFrom for aya::maps::perf::AsyncPerfEventArray pub type aya::maps::perf::AsyncPerfEventArray::Error = aya::maps::MapError -pub fn aya::maps::perf::AsyncPerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::AsyncPerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData> pub type aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData> pub type aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::perf::AsyncPerfEventArray where T: core::marker::Send + core::marker::Sync impl core::marker::Sync for aya::maps::perf::AsyncPerfEventArray where T: core::marker::Send + core::marker::Sync impl core::marker::Unpin for aya::maps::perf::AsyncPerfEventArray @@ -464,13 +464,13 @@ impl + core::borrow::Borrow::open(&mut self, index: u32, page_count: core::option::Option) -> core::result::Result, aya::maps::perf::PerfBufferError> impl core::convert::TryFrom for aya::maps::perf::PerfEventArray pub type aya::maps::perf::PerfEventArray::Error = aya::maps::MapError -pub fn aya::maps::perf::PerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::PerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::perf::PerfEventArray<&'a aya::maps::MapData> pub type aya::maps::perf::PerfEventArray<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::PerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::PerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData> pub type aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::perf::PerfEventArray where T: core::marker::Send + core::marker::Sync impl core::marker::Sync for aya::maps::perf::PerfEventArray where T: core::marker::Send + core::marker::Sync impl core::marker::Unpin for aya::maps::perf::PerfEventArray @@ -528,13 +528,13 @@ pub fn aya::maps::queue::Queue::pop(&mut self, flags: u64) -> core::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> pub type aya::maps::queue::Queue<&'a aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::queue::Queue<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::queue::Queue<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::queue::Queue<&'a mut aya::maps::MapData, V> pub type aya::maps::queue::Queue<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::queue::Queue<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::queue::Queue<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::queue::Queue pub type aya::maps::queue::Queue::Error = aya::maps::MapError -pub fn aya::maps::queue::Queue::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::queue::Queue::try_from(map: aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::queue::Queue where T: core::marker::Send, V: core::marker::Send impl core::marker::Sync for aya::maps::queue::Queue where T: core::marker::Sync, V: core::marker::Sync impl core::marker::Unpin for aya::maps::queue::Queue where T: core::marker::Unpin, V: core::marker::Unpin @@ -568,16 +568,16 @@ pub fn aya::maps::SockHash::insert(&mut self pub fn aya::maps::SockHash::remove(&mut self, key: &K) -> core::result::Result<(), aya::maps::MapError> 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, aya::maps::MapError> +pub fn aya::maps::SockHash<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::SockHash<&'a mut aya::maps::MapData, V> pub type aya::maps::SockHash<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::SockHash<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockHash<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl, K: aya::Pod> aya::maps::IterableMap for aya::maps::SockHash pub fn aya::maps::SockHash::get(&self, key: &K) -> core::result::Result pub fn aya::maps::SockHash::map(&self) -> &aya::maps::MapData impl core::convert::TryFrom for aya::maps::SockHash pub type aya::maps::SockHash::Error = aya::maps::MapError -pub fn aya::maps::SockHash::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockHash::try_from(map: aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::SockHash where K: core::marker::Send, T: core::marker::Send impl core::marker::Sync for aya::maps::SockHash where K: core::marker::Sync, T: core::marker::Sync impl core::marker::Unpin for aya::maps::SockHash where K: core::marker::Unpin, T: core::marker::Unpin @@ -608,13 +608,13 @@ pub fn aya::maps::SockMap::clear_index(&mut self, index: &u32) -> core::resul pub fn aya::maps::SockMap::set(&mut self, index: u32, socket: &I, flags: u64) -> core::result::Result<(), aya::maps::MapError> 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, aya::maps::MapError> +pub fn aya::maps::SockMap::try_from(map: aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::SockMap<&'a aya::maps::MapData> pub type aya::maps::SockMap<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::SockMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::SockMap<&'a mut aya::maps::MapData> pub type aya::maps::SockMap<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::SockMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::SockMap where T: core::marker::Send impl core::marker::Sync for aya::maps::SockMap where T: core::marker::Sync impl core::marker::Unpin for aya::maps::SockMap where T: core::marker::Unpin @@ -676,13 +676,13 @@ pub fn aya::maps::stack::Stack::pop(&mut self, flags: u64) -> core::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> pub type aya::maps::stack::Stack<&'a aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::stack::Stack<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack::Stack<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::stack::Stack<&'a mut aya::maps::MapData, V> pub type aya::maps::stack::Stack<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::stack::Stack<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack::Stack<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::stack::Stack pub type aya::maps::stack::Stack::Error = aya::maps::MapError -pub fn aya::maps::stack::Stack::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack::Stack::try_from(map: aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::stack::Stack where T: core::marker::Send, V: core::marker::Send impl core::marker::Sync for aya::maps::stack::Stack where T: core::marker::Sync, V: core::marker::Sync impl core::marker::Unpin for aya::maps::stack::Stack where T: core::marker::Unpin, V: core::marker::Unpin @@ -763,17 +763,17 @@ pub fn aya::maps::stack_trace::StackTraceMap::iter(&self) -> aya::maps::MapIt pub fn aya::maps::stack_trace::StackTraceMap::stack_ids(&self) -> aya::maps::MapKeys<'_, u32> 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, aya::maps::MapError> +pub fn aya::maps::stack_trace::StackTraceMap::try_from(map: aya::maps::Map) -> core::result::Result impl<'a, T: core::borrow::Borrow> core::iter::traits::collect::IntoIterator for &'a aya::maps::stack_trace::StackTraceMap pub type &'a aya::maps::stack_trace::StackTraceMap::IntoIter = aya::maps::MapIter<'a, u32, aya::maps::stack_trace::StackTrace, aya::maps::stack_trace::StackTraceMap> pub type &'a aya::maps::stack_trace::StackTraceMap::Item = core::result::Result<(u32, aya::maps::stack_trace::StackTrace), aya::maps::MapError> pub fn &'a aya::maps::stack_trace::StackTraceMap::into_iter(self) -> Self::IntoIter impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData> pub type aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData> pub type aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl> aya::maps::IterableMap for aya::maps::stack_trace::StackTraceMap pub fn aya::maps::stack_trace::StackTraceMap::get(&self, index: &u32) -> core::result::Result pub fn aya::maps::stack_trace::StackTraceMap::map(&self) -> &aya::maps::MapData @@ -819,130 +819,130 @@ pub aya::maps::Map::StackTraceMap(aya::maps::MapData) pub aya::maps::Map::Unsupported(aya::maps::MapData) 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, aya::maps::MapError> +pub fn aya::maps::ProgramArray::try_from(map: aya::maps::Map) -> core::result::Result 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, aya::maps::MapError> +pub fn aya::maps::SockMap::try_from(map: aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::perf::AsyncPerfEventArray pub type aya::maps::perf::AsyncPerfEventArray::Error = aya::maps::MapError -pub fn aya::maps::perf::AsyncPerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::AsyncPerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::perf::PerfEventArray pub type aya::maps::perf::PerfEventArray::Error = aya::maps::MapError -pub fn aya::maps::perf::PerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::PerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result 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, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::hash_map::HashMap<&'a aya::maps::MapData, V, K> -pub type aya::maps::hash_map::HashMap<&'a aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::HashMap<&'a aya::maps::MapData, V, K>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, V, K> -pub type aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, V, K>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, V, K> -pub type aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, V, K>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, V, K> -pub type aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, V, K>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, V, K> -pub type aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, V, K>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, V, K> -pub type aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, V, K>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack_trace::StackTraceMap::try_from(map: aya::maps::Map) -> core::result::Result +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 +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 +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 +impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, K, V> +pub type aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, K, V>::Error = aya::maps::MapError +pub fn aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, K, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result +impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, K, V> +pub type aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, K, V>::Error = aya::maps::MapError +pub fn aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, K, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result +impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, K, V> +pub type aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, K, V>::Error = aya::maps::MapError +pub fn aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, K, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result 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 -pub fn aya::maps::PerCpuArray<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::PerCpuArray<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result 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, aya::maps::MapError> +pub fn aya::maps::SockHash<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result 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 -pub fn aya::maps::array::Array<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::array::Array<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result 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, 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 impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::queue::Queue<&'a aya::maps::MapData, V> pub type aya::maps::queue::Queue<&'a aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::queue::Queue<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::queue::Queue<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::stack::Stack<&'a aya::maps::MapData, V> pub type aya::maps::stack::Stack<&'a aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::stack::Stack<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack::Stack<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V> pub type aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::SockHash<&'a mut aya::maps::MapData, V> pub type aya::maps::SockHash<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::SockHash<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockHash<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::array::Array<&'a mut aya::maps::MapData, V> pub type aya::maps::array::Array<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::array::Array<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::array::Array<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V> pub type aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::queue::Queue<&'a mut aya::maps::MapData, V> pub type aya::maps::queue::Queue<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::queue::Queue<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::queue::Queue<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::stack::Stack<&'a mut aya::maps::MapData, V> pub type aya::maps::stack::Stack<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::stack::Stack<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack::Stack<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::ProgramArray<&'a aya::maps::MapData> pub type aya::maps::ProgramArray<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::ProgramArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::ProgramArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::SockMap<&'a aya::maps::MapData> pub type aya::maps::SockMap<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::SockMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData> pub type aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::perf::PerfEventArray<&'a aya::maps::MapData> pub type aya::maps::perf::PerfEventArray<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::PerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::PerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData> pub type aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::ProgramArray<&'a mut aya::maps::MapData> pub type aya::maps::ProgramArray<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::ProgramArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::ProgramArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::SockMap<&'a mut aya::maps::MapData> pub type aya::maps::SockMap<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::SockMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData> pub type aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData> pub type aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData> pub type aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl core::convert::TryFrom for aya::maps::hash_map::HashMap -pub type aya::maps::hash_map::HashMap::Error = aya::maps::MapError -pub fn aya::maps::hash_map::HashMap::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl core::convert::TryFrom for aya::maps::hash_map::PerCpuHashMap -pub type aya::maps::hash_map::PerCpuHashMap::Error = aya::maps::MapError -pub fn aya::maps::hash_map::PerCpuHashMap::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl core::convert::TryFrom for aya::maps::lpm_trie::LpmTrie -pub type aya::maps::lpm_trie::LpmTrie::Error = aya::maps::MapError -pub fn aya::maps::lpm_trie::LpmTrie::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result +impl core::convert::TryFrom for aya::maps::hash_map::HashMap +pub type aya::maps::hash_map::HashMap::Error = aya::maps::MapError +pub fn aya::maps::hash_map::HashMap::try_from(map: aya::maps::Map) -> core::result::Result +impl core::convert::TryFrom for aya::maps::hash_map::PerCpuHashMap +pub type aya::maps::hash_map::PerCpuHashMap::Error = aya::maps::MapError +pub fn aya::maps::hash_map::PerCpuHashMap::try_from(map: aya::maps::Map) -> core::result::Result +impl core::convert::TryFrom for aya::maps::lpm_trie::LpmTrie +pub type aya::maps::lpm_trie::LpmTrie::Error = aya::maps::MapError +pub fn aya::maps::lpm_trie::LpmTrie::try_from(map: aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::PerCpuArray pub type aya::maps::PerCpuArray::Error = aya::maps::MapError -pub fn aya::maps::PerCpuArray::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::PerCpuArray::try_from(map: aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::SockHash pub type aya::maps::SockHash::Error = aya::maps::MapError -pub fn aya::maps::SockHash::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockHash::try_from(map: aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::array::Array pub type aya::maps::array::Array::Error = aya::maps::MapError -pub fn aya::maps::array::Array::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::array::Array::try_from(map: aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::bloom_filter::BloomFilter pub type aya::maps::bloom_filter::BloomFilter::Error = aya::maps::MapError -pub fn aya::maps::bloom_filter::BloomFilter::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::bloom_filter::BloomFilter::try_from(map: aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::queue::Queue pub type aya::maps::queue::Queue::Error = aya::maps::MapError -pub fn aya::maps::queue::Queue::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::queue::Queue::try_from(map: aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::stack::Stack pub type aya::maps::stack::Stack::Error = aya::maps::MapError -pub fn aya::maps::stack::Stack::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack::Stack::try_from(map: aya::maps::Map) -> core::result::Result impl core::fmt::Debug for aya::maps::Map pub fn aya::maps::Map::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result impl core::marker::Send for aya::maps::Map @@ -1035,16 +1035,16 @@ impl, V: aya::Pod> aya::maps::arr 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 -pub fn aya::maps::array::Array<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::array::Array<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::array::Array<&'a mut aya::maps::MapData, V> pub type aya::maps::array::Array<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::array::Array<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::array::Array<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl, V: aya::Pod> aya::maps::IterableMap for aya::maps::array::Array pub fn aya::maps::array::Array::get(&self, index: &u32) -> core::result::Result pub fn aya::maps::array::Array::map(&self) -> &aya::maps::MapData impl core::convert::TryFrom for aya::maps::array::Array pub type aya::maps::array::Array::Error = aya::maps::MapError -pub fn aya::maps::array::Array::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::array::Array::try_from(map: aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::array::Array where T: core::marker::Send, V: core::marker::Send impl core::marker::Sync for aya::maps::array::Array where T: core::marker::Sync, V: core::marker::Sync impl core::marker::Unpin for aya::maps::array::Array where T: core::marker::Unpin, V: core::marker::Unpin @@ -1071,13 +1071,13 @@ impl + core::borrow::Borrow::open(&mut self, index: u32, page_count: core::option::Option) -> core::result::Result, aya::maps::perf::PerfBufferError> impl core::convert::TryFrom for aya::maps::perf::AsyncPerfEventArray pub type aya::maps::perf::AsyncPerfEventArray::Error = aya::maps::MapError -pub fn aya::maps::perf::AsyncPerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::AsyncPerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData> pub type aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::AsyncPerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData> pub type aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::AsyncPerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::perf::AsyncPerfEventArray where T: core::marker::Send + core::marker::Sync impl core::marker::Sync for aya::maps::perf::AsyncPerfEventArray where T: core::marker::Send + core::marker::Sync impl core::marker::Unpin for aya::maps::perf::AsyncPerfEventArray @@ -1106,13 +1106,13 @@ impl, V: aya::Pod> aya::maps::blo pub fn aya::maps::bloom_filter::BloomFilter::insert(&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::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, 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 impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V> pub type aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::bloom_filter::BloomFilter<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::bloom_filter::BloomFilter pub type aya::maps::bloom_filter::BloomFilter::Error = aya::maps::MapError -pub fn aya::maps::bloom_filter::BloomFilter::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::bloom_filter::BloomFilter::try_from(map: aya::maps::Map) -> core::result::Result impl core::fmt::Debug for aya::maps::bloom_filter::BloomFilter pub fn aya::maps::bloom_filter::BloomFilter::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result impl core::marker::Send for aya::maps::bloom_filter::BloomFilter where T: core::marker::Send, V: core::marker::Send @@ -1144,18 +1144,18 @@ 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<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::hash_map::HashMap<&'a aya::maps::MapData, V, K> -pub type aya::maps::hash_map::HashMap<&'a aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::HashMap<&'a aya::maps::MapData, V, K>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, V, K> -pub type aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, V, K>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +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 +impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, K, V> +pub type aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, K, V>::Error = aya::maps::MapError +pub fn aya::maps::hash_map::HashMap<&'a mut aya::maps::MapData, K, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result +impl core::convert::TryFrom for aya::maps::hash_map::HashMap +pub type aya::maps::hash_map::HashMap::Error = aya::maps::MapError +pub fn aya::maps::hash_map::HashMap::try_from(map: aya::maps::Map) -> core::result::Result impl, K: aya::Pod, V: aya::Pod> aya::maps::IterableMap for aya::maps::hash_map::HashMap pub fn aya::maps::hash_map::HashMap::get(&self, key: &K) -> core::result::Result pub fn aya::maps::hash_map::HashMap::map(&self) -> &aya::maps::MapData -impl core::convert::TryFrom for aya::maps::hash_map::HashMap -pub type aya::maps::hash_map::HashMap::Error = aya::maps::MapError -pub fn aya::maps::hash_map::HashMap::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> impl core::fmt::Debug for aya::maps::hash_map::HashMap pub fn aya::maps::hash_map::HashMap::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result impl core::marker::Send for aya::maps::hash_map::HashMap where K: core::marker::Send, T: core::marker::Send, V: core::marker::Send @@ -1187,18 +1187,18 @@ 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<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, V, K> -pub type aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::lpm_trie::LpmTrie<&'a aya::maps::MapData, V, K>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, V, K> -pub type aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, V, K>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +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 +impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, K, V> +pub type aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, K, V>::Error = aya::maps::MapError +pub fn aya::maps::lpm_trie::LpmTrie<&'a mut aya::maps::MapData, K, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result +impl core::convert::TryFrom for aya::maps::lpm_trie::LpmTrie +pub type aya::maps::lpm_trie::LpmTrie::Error = aya::maps::MapError +pub fn aya::maps::lpm_trie::LpmTrie::try_from(map: aya::maps::Map) -> core::result::Result impl, K: aya::Pod, V: aya::Pod> aya::maps::IterableMap, V> for aya::maps::lpm_trie::LpmTrie pub fn aya::maps::lpm_trie::LpmTrie::get(&self, key: &aya::maps::lpm_trie::Key) -> core::result::Result pub fn aya::maps::lpm_trie::LpmTrie::map(&self) -> &aya::maps::MapData -impl core::convert::TryFrom for aya::maps::lpm_trie::LpmTrie -pub type aya::maps::lpm_trie::LpmTrie::Error = aya::maps::MapError -pub fn aya::maps::lpm_trie::LpmTrie::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> impl core::fmt::Debug for aya::maps::lpm_trie::LpmTrie pub fn aya::maps::lpm_trie::LpmTrie::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result impl core::marker::Send for aya::maps::lpm_trie::LpmTrie where K: core::marker::Send, T: core::marker::Send, V: core::marker::Send @@ -1351,16 +1351,16 @@ impl, V: aya::Pod> aya::maps::Per 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 -pub fn aya::maps::PerCpuArray<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::PerCpuArray<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V> pub type aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::PerCpuArray<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl, V: aya::Pod> aya::maps::IterableMap> for aya::maps::PerCpuArray pub fn aya::maps::PerCpuArray::get(&self, index: &u32) -> core::result::Result, aya::maps::MapError> pub fn aya::maps::PerCpuArray::map(&self) -> &aya::maps::MapData impl core::convert::TryFrom for aya::maps::PerCpuArray pub type aya::maps::PerCpuArray::Error = aya::maps::MapError -pub fn aya::maps::PerCpuArray::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::PerCpuArray::try_from(map: aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::PerCpuArray where T: core::marker::Send, V: core::marker::Send impl core::marker::Sync for aya::maps::PerCpuArray where T: core::marker::Sync, V: core::marker::Sync impl core::marker::Unpin for aya::maps::PerCpuArray where T: core::marker::Unpin, V: core::marker::Unpin @@ -1390,18 +1390,18 @@ 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<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, V, K> -pub type aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::PerCpuHashMap<&'a aya::maps::MapData, V, K>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> -impl<'a, V: aya::Pod, K: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, V, K> -pub type aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, V, K>::Error = aya::maps::MapError -pub fn aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, V, K>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +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 +impl<'a, K: aya::Pod, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, K, V> +pub type aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, K, V>::Error = aya::maps::MapError +pub fn aya::maps::hash_map::PerCpuHashMap<&'a mut aya::maps::MapData, K, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result +impl core::convert::TryFrom for aya::maps::hash_map::PerCpuHashMap +pub type aya::maps::hash_map::PerCpuHashMap::Error = aya::maps::MapError +pub fn aya::maps::hash_map::PerCpuHashMap::try_from(map: aya::maps::Map) -> core::result::Result impl, K: aya::Pod, V: aya::Pod> aya::maps::IterableMap> for aya::maps::hash_map::PerCpuHashMap pub fn aya::maps::hash_map::PerCpuHashMap::get(&self, key: &K) -> core::result::Result, aya::maps::MapError> pub fn aya::maps::hash_map::PerCpuHashMap::map(&self) -> &aya::maps::MapData -impl core::convert::TryFrom for aya::maps::hash_map::PerCpuHashMap -pub type aya::maps::hash_map::PerCpuHashMap::Error = aya::maps::MapError -pub fn aya::maps::hash_map::PerCpuHashMap::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> impl core::marker::Send for aya::maps::hash_map::PerCpuHashMap where K: core::marker::Send, T: core::marker::Send, V: core::marker::Send impl core::marker::Sync for aya::maps::hash_map::PerCpuHashMap where K: core::marker::Sync, T: core::marker::Sync, V: core::marker::Sync impl core::marker::Unpin for aya::maps::hash_map::PerCpuHashMap where K: core::marker::Unpin, T: core::marker::Unpin, V: core::marker::Unpin @@ -1464,13 +1464,13 @@ impl + core::borrow::Borrow::open(&mut self, index: u32, page_count: core::option::Option) -> core::result::Result, aya::maps::perf::PerfBufferError> impl core::convert::TryFrom for aya::maps::perf::PerfEventArray pub type aya::maps::perf::PerfEventArray::Error = aya::maps::MapError -pub fn aya::maps::perf::PerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::PerfEventArray::try_from(map: aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::perf::PerfEventArray<&'a aya::maps::MapData> pub type aya::maps::perf::PerfEventArray<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::PerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::PerfEventArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData> pub type aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::perf::PerfEventArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::perf::PerfEventArray where T: core::marker::Send + core::marker::Sync impl core::marker::Sync for aya::maps::perf::PerfEventArray where T: core::marker::Send + core::marker::Sync impl core::marker::Unpin for aya::maps::perf::PerfEventArray @@ -1500,13 +1500,13 @@ pub fn aya::maps::ProgramArray::clear_index(&mut self, index: &u32) -> core:: pub fn aya::maps::ProgramArray::set(&mut self, index: u32, program: &aya::programs::ProgramFd, flags: u64) -> core::result::Result<(), aya::maps::MapError> 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, aya::maps::MapError> +pub fn aya::maps::ProgramArray::try_from(map: aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::ProgramArray<&'a aya::maps::MapData> pub type aya::maps::ProgramArray<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::ProgramArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::ProgramArray<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::ProgramArray<&'a mut aya::maps::MapData> pub type aya::maps::ProgramArray<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::ProgramArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::ProgramArray<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::ProgramArray where T: core::marker::Send impl core::marker::Sync for aya::maps::ProgramArray where T: core::marker::Sync impl core::marker::Unpin for aya::maps::ProgramArray where T: core::marker::Unpin @@ -1536,13 +1536,13 @@ pub fn aya::maps::queue::Queue::pop(&mut self, flags: u64) -> core::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> pub type aya::maps::queue::Queue<&'a aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::queue::Queue<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::queue::Queue<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::queue::Queue<&'a mut aya::maps::MapData, V> pub type aya::maps::queue::Queue<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::queue::Queue<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::queue::Queue<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::queue::Queue pub type aya::maps::queue::Queue::Error = aya::maps::MapError -pub fn aya::maps::queue::Queue::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::queue::Queue::try_from(map: aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::queue::Queue where T: core::marker::Send, V: core::marker::Send impl core::marker::Sync for aya::maps::queue::Queue where T: core::marker::Sync, V: core::marker::Sync impl core::marker::Unpin for aya::maps::queue::Queue where T: core::marker::Unpin, V: core::marker::Unpin @@ -1575,16 +1575,16 @@ pub fn aya::maps::SockHash::insert(&mut self pub fn aya::maps::SockHash::remove(&mut self, key: &K) -> core::result::Result<(), aya::maps::MapError> 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, aya::maps::MapError> +pub fn aya::maps::SockHash<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::SockHash<&'a mut aya::maps::MapData, V> pub type aya::maps::SockHash<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::SockHash<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockHash<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl, K: aya::Pod> aya::maps::IterableMap for aya::maps::SockHash pub fn aya::maps::SockHash::get(&self, key: &K) -> core::result::Result pub fn aya::maps::SockHash::map(&self) -> &aya::maps::MapData impl core::convert::TryFrom for aya::maps::SockHash pub type aya::maps::SockHash::Error = aya::maps::MapError -pub fn aya::maps::SockHash::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockHash::try_from(map: aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::SockHash where K: core::marker::Send, T: core::marker::Send impl core::marker::Sync for aya::maps::SockHash where K: core::marker::Sync, T: core::marker::Sync impl core::marker::Unpin for aya::maps::SockHash where K: core::marker::Unpin, T: core::marker::Unpin @@ -1615,13 +1615,13 @@ pub fn aya::maps::SockMap::clear_index(&mut self, index: &u32) -> core::resul pub fn aya::maps::SockMap::set(&mut self, index: u32, socket: &I, flags: u64) -> core::result::Result<(), aya::maps::MapError> 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, aya::maps::MapError> +pub fn aya::maps::SockMap::try_from(map: aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::SockMap<&'a aya::maps::MapData> pub type aya::maps::SockMap<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::SockMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::SockMap<&'a mut aya::maps::MapData> pub type aya::maps::SockMap<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::SockMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::SockMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::SockMap where T: core::marker::Send impl core::marker::Sync for aya::maps::SockMap where T: core::marker::Sync impl core::marker::Unpin for aya::maps::SockMap where T: core::marker::Unpin @@ -1651,13 +1651,13 @@ pub fn aya::maps::stack::Stack::pop(&mut self, flags: u64) -> core::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> pub type aya::maps::stack::Stack<&'a aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::stack::Stack<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack::Stack<&'a aya::maps::MapData, V>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a, V: aya::Pod> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::stack::Stack<&'a mut aya::maps::MapData, V> pub type aya::maps::stack::Stack<&'a mut aya::maps::MapData, V>::Error = aya::maps::MapError -pub fn aya::maps::stack::Stack<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack::Stack<&'a mut aya::maps::MapData, V>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl core::convert::TryFrom for aya::maps::stack::Stack pub type aya::maps::stack::Stack::Error = aya::maps::MapError -pub fn aya::maps::stack::Stack::try_from(map: aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack::Stack::try_from(map: aya::maps::Map) -> core::result::Result impl core::marker::Send for aya::maps::stack::Stack where T: core::marker::Send, V: core::marker::Send impl core::marker::Sync for aya::maps::stack::Stack where T: core::marker::Sync, V: core::marker::Sync impl core::marker::Unpin for aya::maps::stack::Stack where T: core::marker::Unpin, V: core::marker::Unpin @@ -1686,17 +1686,17 @@ pub fn aya::maps::stack_trace::StackTraceMap::iter(&self) -> aya::maps::MapIt pub fn aya::maps::stack_trace::StackTraceMap::stack_ids(&self) -> aya::maps::MapKeys<'_, u32> 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, aya::maps::MapError> +pub fn aya::maps::stack_trace::StackTraceMap::try_from(map: aya::maps::Map) -> core::result::Result impl<'a, T: core::borrow::Borrow> core::iter::traits::collect::IntoIterator for &'a aya::maps::stack_trace::StackTraceMap pub type &'a aya::maps::stack_trace::StackTraceMap::IntoIter = aya::maps::MapIter<'a, u32, aya::maps::stack_trace::StackTrace, aya::maps::stack_trace::StackTraceMap> pub type &'a aya::maps::stack_trace::StackTraceMap::Item = core::result::Result<(u32, aya::maps::stack_trace::StackTrace), aya::maps::MapError> pub fn &'a aya::maps::stack_trace::StackTraceMap::into_iter(self) -> Self::IntoIter impl<'a> core::convert::TryFrom<&'a aya::maps::Map> for aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData> pub type aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack_trace::StackTraceMap<&'a aya::maps::MapData>::try_from(map: &'a aya::maps::Map) -> core::result::Result impl<'a> core::convert::TryFrom<&'a mut aya::maps::Map> for aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData> pub type aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData>::Error = aya::maps::MapError -pub fn aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result, aya::maps::MapError> +pub fn aya::maps::stack_trace::StackTraceMap<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl> aya::maps::IterableMap for aya::maps::stack_trace::StackTraceMap pub fn aya::maps::stack_trace::StackTraceMap::get(&self, index: &u32) -> core::result::Result pub fn aya::maps::stack_trace::StackTraceMap::map(&self) -> &aya::maps::MapData From 172859c66b25fbfa0d6d2af38ba7dd3f8e99d999 Mon Sep 17 00:00:00 2001 From: Andrew Werner Date: Fri, 1 Sep 2023 10:40:36 -0400 Subject: [PATCH 5/6] aya/maps: support TryFrom for LRU hash maps The macro to implement TryFrom for MapData didn't have the ability to specify that more than one variant of MapData can be valid for a single map implementation. Support for new syntax was added to the macro so that the implementation can succeed for both valid variants in the HashMap and PerCpuHashMap impl. Fixes #636 --- aya/src/maps/hash_map/hash_map.rs | 54 +++++------------------ aya/src/maps/hash_map/mod.rs | 38 ++++++++++++++++ aya/src/maps/hash_map/per_cpu_hash_map.rs | 27 ++++++++++++ aya/src/maps/mod.rs | 20 ++++----- 4 files changed, 86 insertions(+), 53 deletions(-) diff --git a/aya/src/maps/hash_map/hash_map.rs b/aya/src/maps/hash_map/hash_map.rs index 1f8a2f9c..8d091582 100644 --- a/aya/src/maps/hash_map/hash_map.rs +++ b/aya/src/maps/hash_map/hash_map.rs @@ -108,43 +108,22 @@ mod tests { use libc::{EFAULT, ENOENT}; use crate::{ - bpf_map_def, generated::{ bpf_attr, bpf_cmd, bpf_map_type::{BPF_MAP_TYPE_HASH, BPF_MAP_TYPE_LRU_HASH}, }, - maps::{Map, MapData}, - obj::{self, maps::LegacyMap, BpfSectionKind}, + maps::Map, + obj, sys::{override_syscall, SysResult, Syscall}, }; - use super::*; + use super::{ + super::test_utils::{self, new_map}, + *, + }; fn new_obj_map() -> obj::Map { - obj::Map::Legacy(LegacyMap { - def: bpf_map_def { - map_type: BPF_MAP_TYPE_HASH as u32, - key_size: 4, - value_size: 4, - max_entries: 1024, - ..Default::default() - }, - section_index: 0, - section_kind: BpfSectionKind::Maps, - data: Vec::new(), - symbol_index: None, - }) - } - - fn new_map(obj: obj::Map) -> MapData { - override_syscall(|call| match call { - Syscall::Bpf { - cmd: bpf_cmd::BPF_MAP_CREATE, - .. - } => Ok(1337), - call => panic!("unexpected syscall {:?}", call), - }); - MapData::create(obj, "foo", None).unwrap() + test_utils::new_obj_map(BPF_MAP_TYPE_HASH) } fn sys_error(value: i32) -> SysResult { @@ -213,21 +192,10 @@ mod tests { #[test] fn test_try_from_ok_lru() { - let map = new_map(obj::Map::Legacy(LegacyMap { - def: bpf_map_def { - map_type: BPF_MAP_TYPE_LRU_HASH as u32, - key_size: 4, - value_size: 4, - max_entries: 1024, - ..Default::default() - }, - section_index: 0, - section_kind: BpfSectionKind::Maps, - symbol_index: None, - data: Vec::new(), - })); - let map = Map::HashMap(map); - + let map_data = || new_map(test_utils::new_obj_map(BPF_MAP_TYPE_LRU_HASH)); + let map = Map::HashMap(map_data()); + assert!(HashMap::<_, u32, u32>::try_from(&map).is_ok()); + let map = Map::LruHashMap(map_data()); assert!(HashMap::<_, u32, u32>::try_from(&map).is_ok()) } diff --git a/aya/src/maps/hash_map/mod.rs b/aya/src/maps/hash_map/mod.rs index 87fc0d70..5e18cb19 100644 --- a/aya/src/maps/hash_map/mod.rs +++ b/aya/src/maps/hash_map/mod.rs @@ -41,3 +41,41 @@ pub(crate) fn remove(map: &MapData, key: &K) -> Result<(), MapError> { .into() }) } + +#[cfg(test)] +mod test_utils { + use crate::{ + bpf_map_def, + generated::{bpf_cmd, bpf_map_type}, + maps::MapData, + obj::{self, maps::LegacyMap, BpfSectionKind}, + sys::{override_syscall, Syscall}, + }; + + pub(super) fn new_map(obj: obj::Map) -> MapData { + override_syscall(|call| match call { + Syscall::Bpf { + cmd: bpf_cmd::BPF_MAP_CREATE, + .. + } => Ok(1337), + call => panic!("unexpected syscall {:?}", call), + }); + MapData::create(obj, "foo", None).unwrap() + } + + pub(super) fn new_obj_map(map_type: bpf_map_type) -> obj::Map { + obj::Map::Legacy(LegacyMap { + def: bpf_map_def { + map_type: map_type as u32, + key_size: 4, + value_size: 4, + max_entries: 1024, + ..Default::default() + }, + section_index: 0, + section_kind: BpfSectionKind::Maps, + data: Vec::new(), + symbol_index: None, + }) + } +} 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 5ae177f2..aabc71f6 100644 --- a/aya/src/maps/hash_map/per_cpu_hash_map.rs +++ b/aya/src/maps/hash_map/per_cpu_hash_map.rs @@ -146,3 +146,30 @@ impl, K: Pod, V: Pod> IterableMap> Self::get(self, key, 0) } } + +#[cfg(test)] +mod tests { + use crate::{ + generated::bpf_map_type::{BPF_MAP_TYPE_LRU_PERCPU_HASH, BPF_MAP_TYPE_PERCPU_HASH}, + maps::Map, + }; + + use super::{super::test_utils, *}; + + #[test] + fn test_try_from_ok() { + let map = Map::PerCpuHashMap(test_utils::new_map(test_utils::new_obj_map( + BPF_MAP_TYPE_PERCPU_HASH, + ))); + assert!(PerCpuHashMap::<_, u32, u32>::try_from(&map).is_ok()) + } + #[test] + fn test_try_from_ok_lru() { + let map_data = + || test_utils::new_map(test_utils::new_obj_map(BPF_MAP_TYPE_LRU_PERCPU_HASH)); + let map = Map::PerCpuHashMap(map_data()); + assert!(PerCpuHashMap::<_, u32, u32>::try_from(&map).is_ok()); + let map = Map::PerCpuLruHashMap(map_data()); + assert!(PerCpuHashMap::<_, u32, u32>::try_from(&map).is_ok()) + } +} diff --git a/aya/src/maps/mod.rs b/aya/src/maps/mod.rs index cd082530..4d8183e9 100644 --- a/aya/src/maps/mod.rs +++ b/aya/src/maps/mod.rs @@ -291,9 +291,9 @@ macro_rules! impl_try_from_map { // rather than the repeated idents used later because the macro language does not allow one // repetition to be pasted inside another. ($ty_param:tt { - $($ty:ident $(from $variant:ident)?),+ $(,)? + $($ty:ident $(from $($variant:ident)|+)?),+ $(,)? }) => { - $(impl_try_from_map!(<$ty_param> $ty $(from $variant)?);)+ + $(impl_try_from_map!(<$ty_param> $ty $(from $($variant)|+)?);)+ }; // Add the "from $variant" using $ty as the default if it is missing. (<$ty_param:tt> $ty:ident) => { @@ -301,17 +301,17 @@ macro_rules! impl_try_from_map { }; // Dispatch for each of the lifetimes. ( - <($($ty_param:ident),*)> $ty:ident from $variant:ident + <($($ty_param:ident),*)> $ty:ident from $($variant:ident)|+ ) => { - impl_try_from_map!(<'a> ($($ty_param),*) $ty from $variant); - impl_try_from_map!(<'a mut> ($($ty_param),*) $ty from $variant); - impl_try_from_map!(<> ($($ty_param),*) $ty from $variant); + impl_try_from_map!(<'a> ($($ty_param),*) $ty from $($variant)|+); + impl_try_from_map!(<'a mut> ($($ty_param),*) $ty from $($variant)|+); + impl_try_from_map!(<> ($($ty_param),*) $ty from $($variant)|+); }; // An individual impl. ( <$($l:lifetime $($m:ident)?)?> ($($ty_param:ident),*) - $ty:ident from $variant:ident + $ty:ident from $($variant:ident)|+ ) => { impl<$($l,)? $($ty_param: Pod),*> TryFrom<$(&$l $($m)?)? Map> for $ty<$(&$l $($m)?)? MapData, $($ty_param),*> @@ -320,7 +320,7 @@ macro_rules! impl_try_from_map { fn try_from(map: $(&$l $($m)?)? Map) -> Result { match map { - Map::$variant(map_data) => Self::new(map_data), + $(Map::$variant(map_data) => Self::new(map_data),)+ map => Err(MapError::InvalidMapType { map_type: map.map_type() }), @@ -353,8 +353,8 @@ impl_try_from_map!((V) { }); impl_try_from_map!((K, V) { - HashMap, - PerCpuHashMap, + HashMap from HashMap|LruHashMap, + PerCpuHashMap from PerCpuHashMap|PerCpuLruHashMap, LpmTrie, }); From 385b04c12be47ff5afbb7275f8e0648d1286c43b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 14:05:17 +0000 Subject: [PATCH 6/6] build(deps): bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 8 ++++---- .github/workflows/gen.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 23fda7fa..281a0d82 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@master with: @@ -66,7 +66,7 @@ jobs: - riscv64gc-unknown-linux-gnu runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@master with: @@ -119,7 +119,7 @@ jobs: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@master with: @@ -151,7 +151,7 @@ jobs: - ubuntu-22.04 runs-on: ${{ matrix.runner }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: recursive diff --git a/.github/workflows/gen.yml b/.github/workflows/gen.yml index 37506c6a..30763c41 100644 --- a/.github/workflows/gen.yml +++ b/.github/workflows/gen.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: recursive diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 096442cf..6cea2982 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,7 @@ jobs: if: startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0