[216] Add Support For Flow Dissector Programs

pull/802/head
Zenna Allwein 1 year ago
parent c547dd7bcc
commit 1c58716b37

@ -0,0 +1,66 @@
use proc_macro2::TokenStream;
use proc_macro_error::abort;
use quote::quote;
use syn::{ItemFn, Result};
pub(crate) struct FlowDissector {
item: ItemFn,
}
impl FlowDissector {
pub(crate) fn parse(attrs: TokenStream, item: TokenStream) -> Result<Self> {
if !attrs.is_empty() {
abort!(attrs, "unexpected attribute")
}
let item = syn::parse2(item)?;
Ok(FlowDissector { item })
}
pub(crate) fn expand(&self) -> Result<TokenStream> {
let fn_name = self.item.sig.ident.clone();
let fn_vis = &self.item.vis;
let item = &self.item;
Ok(quote! {
#[no_mangle]
#[link_section = "flow_dissector"]
#fn_vis fn #fn_name(ctx: *mut ::aya_bpf::bindings::__sk_buff) -> u32 {
return #fn_name(::aya_bpf::programs::FlowDissectorContext::new(ctx));
#item
}
})
}
}
#[cfg(test)]
mod tests {
use syn::parse_quote;
use super::*;
#[test]
fn test_flow_dissector() {
let prog = FlowDissector::parse(
parse_quote! {},
parse_quote! {
fn prog(ctx: &mut ::aya_bpf::programs::FlowDissectorContext) -> u32 {
0
}
},
)
.unwrap();
let expanded = prog.expand().unwrap();
let expected = quote! {
#[no_mangle]
#[link_section = "flow_dissector"]
fn prog(ctx: *mut ::aya_bpf::bindings::__sk_buff) -> u32 {
return prog(::aya_bpf::programs::FlowDissectorContext::new(ctx));
fn prog(ctx: &mut ::aya_bpf::programs::FlowDissectorContext) -> u32 {
0
}
}
};
assert_eq!(expected.to_string(), expanded.to_string());
}
}

@ -8,6 +8,7 @@ mod cgroup_sockopt;
mod cgroup_sysctl;
mod fentry;
mod fexit;
mod flow_dissector;
mod kprobe;
mod lsm;
mod map;
@ -32,6 +33,7 @@ use cgroup_sockopt::CgroupSockopt;
use cgroup_sysctl::CgroupSysctl;
use fentry::FEntry;
use fexit::FExit;
use flow_dissector::FlowDissector;
use kprobe::{KProbe, KProbeKind};
use lsm::Lsm;
use map::Map;
@ -605,6 +607,21 @@ pub fn fexit(attrs: TokenStream, item: TokenStream) -> TokenStream {
}
}
/// Marks a function as an eBPF Flow Dissector program that can be attached to
/// a network namespace.
///
#[proc_macro_error]
#[proc_macro_attribute]
pub fn flow_dissector(attrs: TokenStream, item: TokenStream) -> TokenStream {
match FlowDissector::parse(attrs.into(), item.into()) {
Ok(prog) => prog
.expand()
.unwrap_or_else(|err| abort!(err.span(), "{}", err))
.into(),
Err(err) => abort!(err.span(), "{}", err),
}
}
/// Marks a function as an eBPF Socket Lookup program that can be attached to
/// a network namespace.
///

@ -264,6 +264,7 @@ pub enum ProgramSection {
FExit {
sleepable: bool,
},
FlowDissector,
Extension,
SkLookup,
CgroupSock {
@ -419,6 +420,7 @@ impl FromStr for ProgramSection {
"fentry.s" => FEntry { sleepable: true },
"fexit" => FExit { sleepable: false },
"fexit.s" => FExit { sleepable: true },
"flow_dissector" => FlowDissector,
"freplace" => Extension,
"sk_lookup" => SkLookup,
_ => {

@ -31,9 +31,10 @@ use crate::{
},
programs::{
BtfTracePoint, CgroupDevice, CgroupSkb, CgroupSkbAttachType, CgroupSock, CgroupSockAddr,
CgroupSockopt, CgroupSysctl, Extension, FEntry, FExit, KProbe, LircMode2, Lsm, PerfEvent,
ProbeKind, Program, ProgramData, ProgramError, RawTracePoint, SchedClassifier, SkLookup,
SkMsg, SkSkb, SkSkbKind, SockOps, SocketFilter, TracePoint, UProbe, Xdp,
CgroupSockopt, CgroupSysctl, Extension, FEntry, FExit, FlowDissector, KProbe, LircMode2,
Lsm, PerfEvent, ProbeKind, Program, ProgramData, ProgramError, RawTracePoint,
SchedClassifier, SkLookup, SkMsg, SkSkb, SkSkbKind, SockOps, SocketFilter, TracePoint,
UProbe, Xdp,
},
sys::{
bpf_load_btf, is_bpf_cookie_supported, is_bpf_global_data_supported,
@ -434,6 +435,7 @@ impl<'a> BpfLoader<'a> {
| ProgramSection::PerfEvent
| ProgramSection::RawTracePoint
| ProgramSection::SkLookup
| ProgramSection::FlowDissector
| ProgramSection::CgroupSock { attach_type: _ }
| ProgramSection::CgroupDevice => {}
}
@ -666,6 +668,9 @@ impl<'a> BpfLoader<'a> {
}
Program::FExit(FExit { data })
}
ProgramSection::FlowDissector => Program::FlowDissector(FlowDissector {
data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level),
}),
ProgramSection::Extension => Program::Extension(Extension {
data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level),
}),

@ -0,0 +1,109 @@
//! Flow dissector programs.
use std::os::fd::AsFd;
use crate::{
generated::{bpf_attach_type::BPF_FLOW_DISSECTOR, bpf_prog_type::BPF_PROG_TYPE_FLOW_DISSECTOR},
programs::{define_link_wrapper, load_program, FdLink, FdLinkId, ProgramData, ProgramError},
sys::{bpf_link_create, LinkTarget, SyscallError},
};
/// A program that can be attached as a Flow Dissector routine
///
/// ['FlowDissector'] programs operate on an __sk_buff.
/// However, only the limited set of fields is allowed: data, data_end and flow_keys.
/// flow_keys is struct bpf_flow_keys and contains flow dissector input and output arguments.
///
/// # Minimum kernel version
///
/// The minimum kernel version required to use this feature is 4.2.
///
/// # Examples
///
/// ```no_run
/// # #[derive(Debug, thiserror::Error)]
/// # enum Error {
/// # #[error(transparent)]
/// # IO(#[from] std::io::Error),
/// # #[error(transparent)]
/// # Map(#[from] aya::maps::MapError),
/// # #[error(transparent)]
/// # Program(#[from] aya::programs::ProgramError),
/// # #[error(transparent)]
/// # Bpf(#[from] aya::BpfError)
/// # }
/// # let mut bpf = Bpf::load_file("ebpf_programs.o")?;
/// use aya::{Bpf, programs::FlowDissector};
/// use std::fs::File;
///
/// let program: &mut FlowDissector = bpf.program_mut("filename_lookup").unwrap().try_into()?;
/// program.load()?;
///
/// let net_ns = File::open("/proc/self/ns/net")?;
/// program.attach(net_ns)?;
/// # Ok::<(), Error>(())
/// ```
#[derive(Debug)]
#[doc(alias = "BPF_PROG_TYPE_FLOW_DISSECTOR")]
pub struct FlowDissector {
pub(crate) data: ProgramData<FlowDissectorLink>,
}
impl FlowDissector {
/// Loads the program inside the kernel.
pub fn load(&mut self) -> Result<(), ProgramError> {
self.data.expected_attach_type = Some(BPF_FLOW_DISSECTOR);
load_program(BPF_PROG_TYPE_FLOW_DISSECTOR, &mut self.data)
}
/// Attaches the program to the given network namespace.
///
/// The returned value can be used to detach, see [FlowDissector::detach].
pub fn attach<T: AsFd>(&mut self, netns: T) -> Result<FlowDissectorLinkId, ProgramError> {
let prog_fd = self.fd()?;
let prog_fd = prog_fd.as_fd();
let netns_fd = netns.as_fd();
let link_fd = bpf_link_create(
prog_fd,
LinkTarget::Fd(netns_fd),
BPF_FLOW_DISSECTOR,
None,
0,
)
.map_err(|(_, io_error)| SyscallError {
call: "bpf_link_create",
io_error,
})?;
self.data
.links
.insert(FlowDissectorLink::new(FdLink::new(link_fd)))
}
/// Detaches the program.
///
/// See [FlowDissector::attach].
pub fn detach(&mut self, link_id: FlowDissectorLinkId) -> Result<(), ProgramError> {
self.data.links.remove(link_id)
}
/// Takes ownership of the link referenced by the provided link_id.
///
/// The link will be detached on `Drop` and the caller is now responsible
/// for managing its lifetime.
pub fn take_link(
&mut self,
link_id: FlowDissectorLinkId,
) -> Result<FlowDissectorLink, ProgramError> {
self.data.take_link(link_id)
}
}
define_link_wrapper!(
/// The link used by [FlowDissector] programs.
FlowDissectorLink,
/// The type returned by [FlowDissector::attach]. Can be passed to [FlowDissector::detach].
FlowDissectorLinkId,
FdLink,
FdLinkId
);

@ -44,6 +44,7 @@ pub mod cgroup_sysctl;
pub mod extension;
pub mod fentry;
pub mod fexit;
pub mod flow_dissector;
pub mod kprobe;
pub mod links;
pub mod lirc_mode2;
@ -83,6 +84,7 @@ pub use cgroup_sysctl::CgroupSysctl;
pub use extension::{Extension, ExtensionError};
pub use fentry::FEntry;
pub use fexit::FExit;
pub use flow_dissector::FlowDissector;
pub use kprobe::{KProbe, KProbeError};
use libc::ENOSPC;
pub use links::Link;
@ -276,6 +278,8 @@ pub enum Program {
FEntry(FEntry),
/// A [`FExit`] program
FExit(FExit),
/// A [`FlowDissector`] program
FlowDissector(FlowDissector),
/// A [`Extension`] program
Extension(Extension),
/// A [`SkLookup`] program
@ -310,6 +314,7 @@ impl Program {
Self::BtfTracePoint(_) => BPF_PROG_TYPE_TRACING,
Self::FEntry(_) => BPF_PROG_TYPE_TRACING,
Self::FExit(_) => BPF_PROG_TYPE_TRACING,
Self::FlowDissector(_) => BPF_PROG_TYPE_FLOW_DISSECTOR,
Self::Extension(_) => BPF_PROG_TYPE_EXT,
Self::CgroupSockAddr(_) => BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
Self::SkLookup(_) => BPF_PROG_TYPE_SK_LOOKUP,
@ -340,6 +345,7 @@ impl Program {
Self::BtfTracePoint(p) => p.pin(path),
Self::FEntry(p) => p.pin(path),
Self::FExit(p) => p.pin(path),
Self::FlowDissector(p) => p.pin(path),
Self::Extension(p) => p.pin(path),
Self::CgroupSockAddr(p) => p.pin(path),
Self::SkLookup(p) => p.pin(path),
@ -370,6 +376,7 @@ impl Program {
Self::BtfTracePoint(mut p) => p.unload(),
Self::FEntry(mut p) => p.unload(),
Self::FExit(mut p) => p.unload(),
Self::FlowDissector(mut p) => p.unload(),
Self::Extension(mut p) => p.unload(),
Self::CgroupSockAddr(mut p) => p.unload(),
Self::SkLookup(mut p) => p.unload(),
@ -402,6 +409,7 @@ impl Program {
Self::BtfTracePoint(p) => p.fd(),
Self::FEntry(p) => p.fd(),
Self::FExit(p) => p.fd(),
Self::FlowDissector(p) => p.fd(),
Self::Extension(p) => p.fd(),
Self::CgroupSockAddr(p) => p.fd(),
Self::SkLookup(p) => p.fd(),
@ -435,6 +443,7 @@ impl Program {
Self::BtfTracePoint(p) => p.info(),
Self::FEntry(p) => p.info(),
Self::FExit(p) => p.info(),
Self::FlowDissector(p) => p.info(),
Self::Extension(p) => p.info(),
Self::CgroupSockAddr(p) => p.info(),
Self::SkLookup(p) => p.info(),
@ -748,6 +757,7 @@ impl_program_unload!(
BtfTracePoint,
FEntry,
FExit,
FlowDissector,
Extension,
CgroupSockAddr,
SkLookup,
@ -788,6 +798,7 @@ impl_fd!(
BtfTracePoint,
FEntry,
FExit,
FlowDissector,
Extension,
CgroupSockAddr,
SkLookup,
@ -842,6 +853,7 @@ impl_program_pin!(
BtfTracePoint,
FEntry,
FExit,
FlowDissector,
Extension,
CgroupSockAddr,
SkLookup,
@ -882,6 +894,7 @@ impl_from_pin!(
BtfTracePoint,
FEntry,
FExit,
FlowDissector,
Extension,
SkLookup,
SockOps,
@ -936,6 +949,7 @@ impl_try_from_program!(
BtfTracePoint,
FEntry,
FExit,
FlowDissector,
Extension,
CgroupSockAddr,
SkLookup,
@ -982,6 +996,7 @@ impl_info!(
BtfTracePoint,
FEntry,
FExit,
FlowDissector,
Extension,
CgroupSockAddr,
SkLookup,

@ -0,0 +1,34 @@
use aya_bpf_cty::c_void;
use crate::{bindings::__sk_buff, BpfContext};
pub struct FlowDissectorContext {
skb: *mut __sk_buff,
}
impl FlowDissectorContext {
pub fn new(skb: *mut __sk_buff) -> FlowDissectorContext {
FlowDissectorContext { skb }
}
#[inline]
pub fn data(&self) -> usize {
unsafe { (*self.skb).data as usize }
}
#[inline]
pub fn data_end(&self) -> usize {
unsafe { (*self.skb).data_end as usize }
}
#[inline]
pub fn flow_keys(&self) -> usize {
unsafe { (*self.skb).__bindgen_anon_1.flow_keys as usize }
}
}
impl BpfContext for FlowDissectorContext {
fn as_ptr(&self) -> *mut c_void {
self.skb as *mut _
}
}

@ -1,6 +1,7 @@
pub mod device;
pub mod fentry;
pub mod fexit;
pub mod flow_dissector;
pub mod lsm;
pub mod perf_event;
pub mod probe;
@ -21,6 +22,7 @@ pub mod xdp;
pub use device::DeviceContext;
pub use fentry::FEntryContext;
pub use fexit::FExitContext;
pub use flow_dissector::FlowDissectorContext;
pub use lsm::LsmContext;
pub use perf_event::PerfEventContext;
pub use probe::ProbeContext;

@ -3,8 +3,8 @@
use aya_bpf::{
bindings::xdp_action,
macros::{kprobe, tracepoint, uprobe, xdp},
programs::{ProbeContext, TracePointContext, XdpContext},
macros::{flow_dissector, kprobe, tracepoint, uprobe, xdp},
programs::{FlowDissectorContext, ProbeContext, TracePointContext, XdpContext},
};
#[xdp]
@ -34,6 +34,11 @@ pub fn test_uprobe(_ctx: ProbeContext) -> u32 {
0
}
#[flow_dissector]
pub fn test_flow(_ctx: FlowDissectorContext) -> u32 {
0
}
#[cfg(not(test))]
#[panic_handler]
fn panic(_info: &core::panic::PanicInfo) -> ! {

@ -1,5 +1,6 @@
use std::{
convert::TryInto as _,
fs::File,
thread,
time::{Duration, SystemTime},
};
@ -8,7 +9,7 @@ use aya::{
maps::Array,
programs::{
links::{FdLink, PinnedLink},
loaded_links, loaded_programs, KProbe, TracePoint, UProbe, Xdp, XdpFlags,
loaded_links, loaded_programs, FlowDissector, KProbe, TracePoint, UProbe, Xdp, XdpFlags,
},
util::KernelVersion,
Bpf,
@ -272,6 +273,34 @@ fn basic_uprobe() {
assert_unloaded("test_uprobe");
}
#[test]
fn basic_flow_dissector() {
let mut bpf = Bpf::load(crate::TEST).unwrap();
let prog: &mut FlowDissector = bpf.program_mut("test_flow").unwrap().try_into().unwrap();
prog.load().unwrap();
assert_loaded("test_flow");
let net_ns = File::open("/proc/self/ns/net").unwrap();
let link = prog.attach(net_ns.try_clone().unwrap()).unwrap();
{
let _link_owned = prog.take_link(link).unwrap();
prog.unload().unwrap();
assert_loaded_and_linked("test_flow");
};
assert_unloaded("test_flow");
prog.load().unwrap();
assert_loaded("test_flow");
prog.attach(net_ns).unwrap();
assert_loaded("test_flow");
prog.unload().unwrap();
assert_unloaded("test_flow");
}
#[test]
fn pin_link() {
let kernel_version = KernelVersion::current().unwrap();

@ -9,6 +9,7 @@ pub proc macro aya_bpf_macros::#[cgroup_sysctl]
pub proc macro aya_bpf_macros::#[classifier]
pub proc macro aya_bpf_macros::#[fentry]
pub proc macro aya_bpf_macros::#[fexit]
pub proc macro aya_bpf_macros::#[flow_dissector]
pub proc macro aya_bpf_macros::#[kprobe]
pub proc macro aya_bpf_macros::#[kretprobe]
pub proc macro aya_bpf_macros::#[lsm]

@ -1314,6 +1314,36 @@ impl<T> core::borrow::BorrowMut<T> for aya_bpf::programs::fexit::FExitContext wh
pub fn aya_bpf::programs::fexit::FExitContext::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya_bpf::programs::fexit::FExitContext
pub fn aya_bpf::programs::fexit::FExitContext::from(t: T) -> T
pub mod aya_bpf::programs::flow_dissector
pub struct aya_bpf::programs::flow_dissector::FlowDissectorContext
impl aya_bpf::programs::flow_dissector::FlowDissectorContext
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::data(&self) -> usize
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::data_end(&self) -> usize
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::flow_keys(&self) -> usize
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::new(skb: *mut aya_bpf_bindings::x86_64::bindings::__sk_buff) -> aya_bpf::programs::flow_dissector::FlowDissectorContext
impl aya_bpf::BpfContext for aya_bpf::programs::flow_dissector::FlowDissectorContext
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::as_ptr(&self) -> *mut aya_bpf_cty::c_void
impl !core::marker::Send for aya_bpf::programs::flow_dissector::FlowDissectorContext
impl !core::marker::Sync for aya_bpf::programs::flow_dissector::FlowDissectorContext
impl core::marker::Unpin for aya_bpf::programs::flow_dissector::FlowDissectorContext
impl core::panic::unwind_safe::RefUnwindSafe for aya_bpf::programs::flow_dissector::FlowDissectorContext
impl core::panic::unwind_safe::UnwindSafe for aya_bpf::programs::flow_dissector::FlowDissectorContext
impl<T, U> core::convert::Into<U> for aya_bpf::programs::flow_dissector::FlowDissectorContext where U: core::convert::From<T>
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::into(self) -> U
impl<T, U> core::convert::TryFrom<U> for aya_bpf::programs::flow_dissector::FlowDissectorContext where U: core::convert::Into<T>
pub type aya_bpf::programs::flow_dissector::FlowDissectorContext::Error = core::convert::Infallible
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
impl<T, U> core::convert::TryInto<U> for aya_bpf::programs::flow_dissector::FlowDissectorContext where U: core::convert::TryFrom<T>
pub type aya_bpf::programs::flow_dissector::FlowDissectorContext::Error = <U as core::convert::TryFrom<T>>::Error
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
impl<T> core::any::Any for aya_bpf::programs::flow_dissector::FlowDissectorContext where T: 'static + core::marker::Sized
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::type_id(&self) -> core::any::TypeId
impl<T> core::borrow::Borrow<T> for aya_bpf::programs::flow_dissector::FlowDissectorContext where T: core::marker::Sized
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::borrow(&self) -> &T
impl<T> core::borrow::BorrowMut<T> for aya_bpf::programs::flow_dissector::FlowDissectorContext where T: core::marker::Sized
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya_bpf::programs::flow_dissector::FlowDissectorContext
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::from(t: T) -> T
pub mod aya_bpf::programs::lsm
pub struct aya_bpf::programs::lsm::LsmContext
impl aya_bpf::programs::lsm::LsmContext
@ -1969,6 +1999,35 @@ impl<T> core::borrow::BorrowMut<T> for aya_bpf::programs::fexit::FExitContext wh
pub fn aya_bpf::programs::fexit::FExitContext::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya_bpf::programs::fexit::FExitContext
pub fn aya_bpf::programs::fexit::FExitContext::from(t: T) -> T
pub struct aya_bpf::programs::FlowDissectorContext
impl aya_bpf::programs::flow_dissector::FlowDissectorContext
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::data(&self) -> usize
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::data_end(&self) -> usize
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::flow_keys(&self) -> usize
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::new(skb: *mut aya_bpf_bindings::x86_64::bindings::__sk_buff) -> aya_bpf::programs::flow_dissector::FlowDissectorContext
impl aya_bpf::BpfContext for aya_bpf::programs::flow_dissector::FlowDissectorContext
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::as_ptr(&self) -> *mut aya_bpf_cty::c_void
impl !core::marker::Send for aya_bpf::programs::flow_dissector::FlowDissectorContext
impl !core::marker::Sync for aya_bpf::programs::flow_dissector::FlowDissectorContext
impl core::marker::Unpin for aya_bpf::programs::flow_dissector::FlowDissectorContext
impl core::panic::unwind_safe::RefUnwindSafe for aya_bpf::programs::flow_dissector::FlowDissectorContext
impl core::panic::unwind_safe::UnwindSafe for aya_bpf::programs::flow_dissector::FlowDissectorContext
impl<T, U> core::convert::Into<U> for aya_bpf::programs::flow_dissector::FlowDissectorContext where U: core::convert::From<T>
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::into(self) -> U
impl<T, U> core::convert::TryFrom<U> for aya_bpf::programs::flow_dissector::FlowDissectorContext where U: core::convert::Into<T>
pub type aya_bpf::programs::flow_dissector::FlowDissectorContext::Error = core::convert::Infallible
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
impl<T, U> core::convert::TryInto<U> for aya_bpf::programs::flow_dissector::FlowDissectorContext where U: core::convert::TryFrom<T>
pub type aya_bpf::programs::flow_dissector::FlowDissectorContext::Error = <U as core::convert::TryFrom<T>>::Error
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
impl<T> core::any::Any for aya_bpf::programs::flow_dissector::FlowDissectorContext where T: 'static + core::marker::Sized
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::type_id(&self) -> core::any::TypeId
impl<T> core::borrow::Borrow<T> for aya_bpf::programs::flow_dissector::FlowDissectorContext where T: core::marker::Sized
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::borrow(&self) -> &T
impl<T> core::borrow::BorrowMut<T> for aya_bpf::programs::flow_dissector::FlowDissectorContext where T: core::marker::Sized
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya_bpf::programs::flow_dissector::FlowDissectorContext
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::from(t: T) -> T
pub struct aya_bpf::programs::LsmContext
impl aya_bpf::programs::lsm::LsmContext
pub unsafe fn aya_bpf::programs::lsm::LsmContext::arg<T: FromBtfArgument>(&self, n: usize) -> T
@ -2467,6 +2526,8 @@ impl aya_bpf::BpfContext for aya_bpf::programs::fentry::FEntryContext
pub fn aya_bpf::programs::fentry::FEntryContext::as_ptr(&self) -> *mut core::ffi::c_void
impl aya_bpf::BpfContext for aya_bpf::programs::fexit::FExitContext
pub fn aya_bpf::programs::fexit::FExitContext::as_ptr(&self) -> *mut core::ffi::c_void
impl aya_bpf::BpfContext for aya_bpf::programs::flow_dissector::FlowDissectorContext
pub fn aya_bpf::programs::flow_dissector::FlowDissectorContext::as_ptr(&self) -> *mut aya_bpf_cty::c_void
impl aya_bpf::BpfContext for aya_bpf::programs::lsm::LsmContext
pub fn aya_bpf::programs::lsm::LsmContext::as_ptr(&self) -> *mut core::ffi::c_void
impl aya_bpf::BpfContext for aya_bpf::programs::perf_event::PerfEventContext

@ -5831,6 +5831,7 @@ pub aya_obj::obj::ProgramSection::FEntry
pub aya_obj::obj::ProgramSection::FEntry::sleepable: bool
pub aya_obj::obj::ProgramSection::FExit
pub aya_obj::obj::ProgramSection::FExit::sleepable: bool
pub aya_obj::obj::ProgramSection::FlowDissector
pub aya_obj::obj::ProgramSection::KProbe
pub aya_obj::obj::ProgramSection::KRetProbe
pub aya_obj::obj::ProgramSection::LircMode2
@ -6620,6 +6621,7 @@ pub aya_obj::ProgramSection::FEntry
pub aya_obj::ProgramSection::FEntry::sleepable: bool
pub aya_obj::ProgramSection::FExit
pub aya_obj::ProgramSection::FExit::sleepable: bool
pub aya_obj::ProgramSection::FlowDissector
pub aya_obj::ProgramSection::KProbe
pub aya_obj::ProgramSection::KRetProbe
pub aya_obj::ProgramSection::LircMode2

@ -3217,6 +3217,120 @@ impl<T> core::borrow::BorrowMut<T> for aya::programs::fexit::FExitLinkId where T
pub fn aya::programs::fexit::FExitLinkId::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya::programs::fexit::FExitLinkId
pub fn aya::programs::fexit::FExitLinkId::from(t: T) -> T
pub mod aya::programs::flow_dissector
pub struct aya::programs::flow_dissector::FlowDissector
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::attach<T: std::os::fd::owned::AsFd>(&mut self, netns: T) -> core::result::Result<aya::programs::flow_dissector::FlowDissectorLinkId, aya::programs::ProgramError>
pub fn aya::programs::flow_dissector::FlowDissector::detach(&mut self, link_id: aya::programs::flow_dissector::FlowDissectorLinkId) -> core::result::Result<(), aya::programs::ProgramError>
pub fn aya::programs::flow_dissector::FlowDissector::load(&mut self) -> core::result::Result<(), aya::programs::ProgramError>
pub fn aya::programs::flow_dissector::FlowDissector::take_link(&mut self, link_id: aya::programs::flow_dissector::FlowDissectorLinkId) -> core::result::Result<aya::programs::flow_dissector::FlowDissectorLink, aya::programs::ProgramError>
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::fd(&self) -> core::result::Result<&aya::programs::ProgramFd, aya::programs::ProgramError>
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::from_pin<P: core::convert::AsRef<std::path::Path>>(path: P) -> core::result::Result<Self, aya::programs::ProgramError>
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::info(&self) -> core::result::Result<aya::programs::ProgramInfo, aya::programs::ProgramError>
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::pin<P: core::convert::AsRef<std::path::Path>>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError>
pub fn aya::programs::flow_dissector::FlowDissector::unpin(self) -> core::result::Result<(), std::io::error::Error>
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::unload(&mut self) -> core::result::Result<(), aya::programs::ProgramError>
impl core::ops::drop::Drop for aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::drop(&mut self)
impl<'a> core::convert::TryFrom<&'a aya::programs::Program> for &'a aya::programs::flow_dissector::FlowDissector
pub type &'a aya::programs::flow_dissector::FlowDissector::Error = aya::programs::ProgramError
pub fn &'a aya::programs::flow_dissector::FlowDissector::try_from(program: &'a aya::programs::Program) -> core::result::Result<&'a aya::programs::flow_dissector::FlowDissector, aya::programs::ProgramError>
impl<'a> core::convert::TryFrom<&'a mut aya::programs::Program> for &'a mut aya::programs::flow_dissector::FlowDissector
pub type &'a mut aya::programs::flow_dissector::FlowDissector::Error = aya::programs::ProgramError
pub fn &'a mut aya::programs::flow_dissector::FlowDissector::try_from(program: &'a mut aya::programs::Program) -> core::result::Result<&'a mut aya::programs::flow_dissector::FlowDissector, aya::programs::ProgramError>
impl core::fmt::Debug for aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
impl core::marker::Send for aya::programs::flow_dissector::FlowDissector
impl core::marker::Sync for aya::programs::flow_dissector::FlowDissector
impl core::marker::Unpin for aya::programs::flow_dissector::FlowDissector
impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::flow_dissector::FlowDissector
impl core::panic::unwind_safe::UnwindSafe for aya::programs::flow_dissector::FlowDissector
impl<T, U> core::convert::Into<U> for aya::programs::flow_dissector::FlowDissector where U: core::convert::From<T>
pub fn aya::programs::flow_dissector::FlowDissector::into(self) -> U
impl<T, U> core::convert::TryFrom<U> for aya::programs::flow_dissector::FlowDissector where U: core::convert::Into<T>
pub type aya::programs::flow_dissector::FlowDissector::Error = core::convert::Infallible
pub fn aya::programs::flow_dissector::FlowDissector::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
impl<T, U> core::convert::TryInto<U> for aya::programs::flow_dissector::FlowDissector where U: core::convert::TryFrom<T>
pub type aya::programs::flow_dissector::FlowDissector::Error = <U as core::convert::TryFrom<T>>::Error
pub fn aya::programs::flow_dissector::FlowDissector::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
impl<T> core::any::Any for aya::programs::flow_dissector::FlowDissector where T: 'static + core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissector::type_id(&self) -> core::any::TypeId
impl<T> core::borrow::Borrow<T> for aya::programs::flow_dissector::FlowDissector where T: core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissector::borrow(&self) -> &T
impl<T> core::borrow::BorrowMut<T> for aya::programs::flow_dissector::FlowDissector where T: core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissector::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::from(t: T) -> T
pub struct aya::programs::flow_dissector::FlowDissectorLink(_)
impl aya::programs::links::Link for aya::programs::flow_dissector::FlowDissectorLink
pub type aya::programs::flow_dissector::FlowDissectorLink::Id = aya::programs::flow_dissector::FlowDissectorLinkId
pub fn aya::programs::flow_dissector::FlowDissectorLink::detach(self) -> core::result::Result<(), aya::programs::ProgramError>
pub fn aya::programs::flow_dissector::FlowDissectorLink::id(&self) -> Self::Id
impl core::convert::From<aya::programs::flow_dissector::FlowDissectorLink> for aya::programs::links::FdLink
pub fn aya::programs::links::FdLink::from(w: aya::programs::flow_dissector::FlowDissectorLink) -> aya::programs::links::FdLink
impl core::convert::From<aya::programs::links::FdLink> for aya::programs::flow_dissector::FlowDissectorLink
pub fn aya::programs::flow_dissector::FlowDissectorLink::from(b: aya::programs::links::FdLink) -> aya::programs::flow_dissector::FlowDissectorLink
impl core::ops::drop::Drop for aya::programs::flow_dissector::FlowDissectorLink
pub fn aya::programs::flow_dissector::FlowDissectorLink::drop(&mut self)
impl core::fmt::Debug for aya::programs::flow_dissector::FlowDissectorLink
pub fn aya::programs::flow_dissector::FlowDissectorLink::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
impl core::marker::Send for aya::programs::flow_dissector::FlowDissectorLink
impl core::marker::Sync for aya::programs::flow_dissector::FlowDissectorLink
impl core::marker::Unpin for aya::programs::flow_dissector::FlowDissectorLink
impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::flow_dissector::FlowDissectorLink
impl core::panic::unwind_safe::UnwindSafe for aya::programs::flow_dissector::FlowDissectorLink
impl<T, U> core::convert::Into<U> for aya::programs::flow_dissector::FlowDissectorLink where U: core::convert::From<T>
pub fn aya::programs::flow_dissector::FlowDissectorLink::into(self) -> U
impl<T, U> core::convert::TryFrom<U> for aya::programs::flow_dissector::FlowDissectorLink where U: core::convert::Into<T>
pub type aya::programs::flow_dissector::FlowDissectorLink::Error = core::convert::Infallible
pub fn aya::programs::flow_dissector::FlowDissectorLink::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
impl<T, U> core::convert::TryInto<U> for aya::programs::flow_dissector::FlowDissectorLink where U: core::convert::TryFrom<T>
pub type aya::programs::flow_dissector::FlowDissectorLink::Error = <U as core::convert::TryFrom<T>>::Error
pub fn aya::programs::flow_dissector::FlowDissectorLink::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
impl<T> core::any::Any for aya::programs::flow_dissector::FlowDissectorLink where T: 'static + core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissectorLink::type_id(&self) -> core::any::TypeId
impl<T> core::borrow::Borrow<T> for aya::programs::flow_dissector::FlowDissectorLink where T: core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissectorLink::borrow(&self) -> &T
impl<T> core::borrow::BorrowMut<T> for aya::programs::flow_dissector::FlowDissectorLink where T: core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissectorLink::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya::programs::flow_dissector::FlowDissectorLink
pub fn aya::programs::flow_dissector::FlowDissectorLink::from(t: T) -> T
pub struct aya::programs::flow_dissector::FlowDissectorLinkId(_)
impl core::cmp::Eq for aya::programs::flow_dissector::FlowDissectorLinkId
impl core::cmp::PartialEq<aya::programs::flow_dissector::FlowDissectorLinkId> for aya::programs::flow_dissector::FlowDissectorLinkId
pub fn aya::programs::flow_dissector::FlowDissectorLinkId::eq(&self, other: &aya::programs::flow_dissector::FlowDissectorLinkId) -> bool
impl core::fmt::Debug for aya::programs::flow_dissector::FlowDissectorLinkId
pub fn aya::programs::flow_dissector::FlowDissectorLinkId::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
impl core::hash::Hash for aya::programs::flow_dissector::FlowDissectorLinkId
pub fn aya::programs::flow_dissector::FlowDissectorLinkId::hash<__H: core::hash::Hasher>(&self, state: &mut __H)
impl core::marker::StructuralEq for aya::programs::flow_dissector::FlowDissectorLinkId
impl core::marker::StructuralPartialEq for aya::programs::flow_dissector::FlowDissectorLinkId
impl core::marker::Send for aya::programs::flow_dissector::FlowDissectorLinkId
impl core::marker::Sync for aya::programs::flow_dissector::FlowDissectorLinkId
impl core::marker::Unpin for aya::programs::flow_dissector::FlowDissectorLinkId
impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::flow_dissector::FlowDissectorLinkId
impl core::panic::unwind_safe::UnwindSafe for aya::programs::flow_dissector::FlowDissectorLinkId
impl<T, U> core::convert::Into<U> for aya::programs::flow_dissector::FlowDissectorLinkId where U: core::convert::From<T>
pub fn aya::programs::flow_dissector::FlowDissectorLinkId::into(self) -> U
impl<T, U> core::convert::TryFrom<U> for aya::programs::flow_dissector::FlowDissectorLinkId where U: core::convert::Into<T>
pub type aya::programs::flow_dissector::FlowDissectorLinkId::Error = core::convert::Infallible
pub fn aya::programs::flow_dissector::FlowDissectorLinkId::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
impl<T, U> core::convert::TryInto<U> for aya::programs::flow_dissector::FlowDissectorLinkId where U: core::convert::TryFrom<T>
pub type aya::programs::flow_dissector::FlowDissectorLinkId::Error = <U as core::convert::TryFrom<T>>::Error
pub fn aya::programs::flow_dissector::FlowDissectorLinkId::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
impl<T> core::any::Any for aya::programs::flow_dissector::FlowDissectorLinkId where T: 'static + core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissectorLinkId::type_id(&self) -> core::any::TypeId
impl<T> core::borrow::Borrow<T> for aya::programs::flow_dissector::FlowDissectorLinkId where T: core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissectorLinkId::borrow(&self) -> &T
impl<T> core::borrow::BorrowMut<T> for aya::programs::flow_dissector::FlowDissectorLinkId where T: core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissectorLinkId::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya::programs::flow_dissector::FlowDissectorLinkId
pub fn aya::programs::flow_dissector::FlowDissectorLinkId::from(t: T) -> T
pub mod aya::programs::kprobe
pub enum aya::programs::kprobe::KProbeError
pub aya::programs::kprobe::KProbeError::FileError
@ -3414,12 +3528,16 @@ impl core::convert::From<aya::programs::fentry::FEntryLink> for aya::programs::l
pub fn aya::programs::links::FdLink::from(w: aya::programs::fentry::FEntryLink) -> aya::programs::links::FdLink
impl core::convert::From<aya::programs::fexit::FExitLink> for aya::programs::links::FdLink
pub fn aya::programs::links::FdLink::from(w: aya::programs::fexit::FExitLink) -> aya::programs::links::FdLink
impl core::convert::From<aya::programs::flow_dissector::FlowDissectorLink> for aya::programs::links::FdLink
pub fn aya::programs::links::FdLink::from(w: aya::programs::flow_dissector::FlowDissectorLink) -> aya::programs::links::FdLink
impl core::convert::From<aya::programs::links::FdLink> for aya::programs::extension::ExtensionLink
pub fn aya::programs::extension::ExtensionLink::from(b: aya::programs::links::FdLink) -> aya::programs::extension::ExtensionLink
impl core::convert::From<aya::programs::links::FdLink> for aya::programs::fentry::FEntryLink
pub fn aya::programs::fentry::FEntryLink::from(b: aya::programs::links::FdLink) -> aya::programs::fentry::FEntryLink
impl core::convert::From<aya::programs::links::FdLink> for aya::programs::fexit::FExitLink
pub fn aya::programs::fexit::FExitLink::from(b: aya::programs::links::FdLink) -> aya::programs::fexit::FExitLink
impl core::convert::From<aya::programs::links::FdLink> for aya::programs::flow_dissector::FlowDissectorLink
pub fn aya::programs::flow_dissector::FlowDissectorLink::from(b: aya::programs::links::FdLink) -> aya::programs::flow_dissector::FlowDissectorLink
impl core::convert::From<aya::programs::links::FdLink> for aya::programs::lsm::LsmLink
pub fn aya::programs::lsm::LsmLink::from(b: aya::programs::links::FdLink) -> aya::programs::lsm::LsmLink
impl core::convert::From<aya::programs::links::FdLink> for aya::programs::tp_btf::BtfTracePointLink
@ -3642,6 +3760,10 @@ impl aya::programs::links::Link for aya::programs::fexit::FExitLink
pub type aya::programs::fexit::FExitLink::Id = aya::programs::fexit::FExitLinkId
pub fn aya::programs::fexit::FExitLink::detach(self) -> core::result::Result<(), aya::programs::ProgramError>
pub fn aya::programs::fexit::FExitLink::id(&self) -> Self::Id
impl aya::programs::links::Link for aya::programs::flow_dissector::FlowDissectorLink
pub type aya::programs::flow_dissector::FlowDissectorLink::Id = aya::programs::flow_dissector::FlowDissectorLinkId
pub fn aya::programs::flow_dissector::FlowDissectorLink::detach(self) -> core::result::Result<(), aya::programs::ProgramError>
pub fn aya::programs::flow_dissector::FlowDissectorLink::id(&self) -> Self::Id
impl aya::programs::links::Link for aya::programs::kprobe::KProbeLink
pub type aya::programs::kprobe::KProbeLink::Id = aya::programs::kprobe::KProbeLinkId
pub fn aya::programs::kprobe::KProbeLink::detach(self) -> core::result::Result<(), aya::programs::ProgramError>
@ -5328,6 +5450,7 @@ pub aya::programs::Program::CgroupSysctl(aya::programs::cgroup_sysctl::CgroupSys
pub aya::programs::Program::Extension(aya::programs::extension::Extension)
pub aya::programs::Program::FEntry(aya::programs::fentry::FEntry)
pub aya::programs::Program::FExit(aya::programs::fexit::FExit)
pub aya::programs::Program::FlowDissector(aya::programs::flow_dissector::FlowDissector)
pub aya::programs::Program::KProbe(aya::programs::kprobe::KProbe)
pub aya::programs::Program::LircMode2(aya::programs::lirc_mode2::LircMode2)
pub aya::programs::Program::Lsm(aya::programs::lsm::Lsm)
@ -5393,6 +5516,9 @@ pub fn &'a aya::programs::fentry::FEntry::try_from(program: &'a aya::programs::P
impl<'a> core::convert::TryFrom<&'a aya::programs::Program> for &'a aya::programs::fexit::FExit
pub type &'a aya::programs::fexit::FExit::Error = aya::programs::ProgramError
pub fn &'a aya::programs::fexit::FExit::try_from(program: &'a aya::programs::Program) -> core::result::Result<&'a aya::programs::fexit::FExit, aya::programs::ProgramError>
impl<'a> core::convert::TryFrom<&'a aya::programs::Program> for &'a aya::programs::flow_dissector::FlowDissector
pub type &'a aya::programs::flow_dissector::FlowDissector::Error = aya::programs::ProgramError
pub fn &'a aya::programs::flow_dissector::FlowDissector::try_from(program: &'a aya::programs::Program) -> core::result::Result<&'a aya::programs::flow_dissector::FlowDissector, aya::programs::ProgramError>
impl<'a> core::convert::TryFrom<&'a aya::programs::Program> for &'a aya::programs::kprobe::KProbe
pub type &'a aya::programs::kprobe::KProbe::Error = aya::programs::ProgramError
pub fn &'a aya::programs::kprobe::KProbe::try_from(program: &'a aya::programs::Program) -> core::result::Result<&'a aya::programs::kprobe::KProbe, aya::programs::ProgramError>
@ -5465,6 +5591,9 @@ pub fn &'a mut aya::programs::fentry::FEntry::try_from(program: &'a mut aya::pro
impl<'a> core::convert::TryFrom<&'a mut aya::programs::Program> for &'a mut aya::programs::fexit::FExit
pub type &'a mut aya::programs::fexit::FExit::Error = aya::programs::ProgramError
pub fn &'a mut aya::programs::fexit::FExit::try_from(program: &'a mut aya::programs::Program) -> core::result::Result<&'a mut aya::programs::fexit::FExit, aya::programs::ProgramError>
impl<'a> core::convert::TryFrom<&'a mut aya::programs::Program> for &'a mut aya::programs::flow_dissector::FlowDissector
pub type &'a mut aya::programs::flow_dissector::FlowDissector::Error = aya::programs::ProgramError
pub fn &'a mut aya::programs::flow_dissector::FlowDissector::try_from(program: &'a mut aya::programs::Program) -> core::result::Result<&'a mut aya::programs::flow_dissector::FlowDissector, aya::programs::ProgramError>
impl<'a> core::convert::TryFrom<&'a mut aya::programs::Program> for &'a mut aya::programs::kprobe::KProbe
pub type &'a mut aya::programs::kprobe::KProbe::Error = aya::programs::ProgramError
pub fn &'a mut aya::programs::kprobe::KProbe::try_from(program: &'a mut aya::programs::Program) -> core::result::Result<&'a mut aya::programs::kprobe::KProbe, aya::programs::ProgramError>
@ -6354,6 +6483,54 @@ impl<T> core::borrow::BorrowMut<T> for aya::programs::fexit::FExit where T: core
pub fn aya::programs::fexit::FExit::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya::programs::fexit::FExit
pub fn aya::programs::fexit::FExit::from(t: T) -> T
pub struct aya::programs::FlowDissector
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::attach<T: std::os::fd::owned::AsFd>(&mut self, netns: T) -> core::result::Result<aya::programs::flow_dissector::FlowDissectorLinkId, aya::programs::ProgramError>
pub fn aya::programs::flow_dissector::FlowDissector::detach(&mut self, link_id: aya::programs::flow_dissector::FlowDissectorLinkId) -> core::result::Result<(), aya::programs::ProgramError>
pub fn aya::programs::flow_dissector::FlowDissector::load(&mut self) -> core::result::Result<(), aya::programs::ProgramError>
pub fn aya::programs::flow_dissector::FlowDissector::take_link(&mut self, link_id: aya::programs::flow_dissector::FlowDissectorLinkId) -> core::result::Result<aya::programs::flow_dissector::FlowDissectorLink, aya::programs::ProgramError>
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::fd(&self) -> core::result::Result<&aya::programs::ProgramFd, aya::programs::ProgramError>
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::from_pin<P: core::convert::AsRef<std::path::Path>>(path: P) -> core::result::Result<Self, aya::programs::ProgramError>
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::info(&self) -> core::result::Result<aya::programs::ProgramInfo, aya::programs::ProgramError>
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::pin<P: core::convert::AsRef<std::path::Path>>(&mut self, path: P) -> core::result::Result<(), aya::pin::PinError>
pub fn aya::programs::flow_dissector::FlowDissector::unpin(self) -> core::result::Result<(), std::io::error::Error>
impl aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::unload(&mut self) -> core::result::Result<(), aya::programs::ProgramError>
impl core::ops::drop::Drop for aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::drop(&mut self)
impl<'a> core::convert::TryFrom<&'a aya::programs::Program> for &'a aya::programs::flow_dissector::FlowDissector
pub type &'a aya::programs::flow_dissector::FlowDissector::Error = aya::programs::ProgramError
pub fn &'a aya::programs::flow_dissector::FlowDissector::try_from(program: &'a aya::programs::Program) -> core::result::Result<&'a aya::programs::flow_dissector::FlowDissector, aya::programs::ProgramError>
impl<'a> core::convert::TryFrom<&'a mut aya::programs::Program> for &'a mut aya::programs::flow_dissector::FlowDissector
pub type &'a mut aya::programs::flow_dissector::FlowDissector::Error = aya::programs::ProgramError
pub fn &'a mut aya::programs::flow_dissector::FlowDissector::try_from(program: &'a mut aya::programs::Program) -> core::result::Result<&'a mut aya::programs::flow_dissector::FlowDissector, aya::programs::ProgramError>
impl core::fmt::Debug for aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
impl core::marker::Send for aya::programs::flow_dissector::FlowDissector
impl core::marker::Sync for aya::programs::flow_dissector::FlowDissector
impl core::marker::Unpin for aya::programs::flow_dissector::FlowDissector
impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::flow_dissector::FlowDissector
impl core::panic::unwind_safe::UnwindSafe for aya::programs::flow_dissector::FlowDissector
impl<T, U> core::convert::Into<U> for aya::programs::flow_dissector::FlowDissector where U: core::convert::From<T>
pub fn aya::programs::flow_dissector::FlowDissector::into(self) -> U
impl<T, U> core::convert::TryFrom<U> for aya::programs::flow_dissector::FlowDissector where U: core::convert::Into<T>
pub type aya::programs::flow_dissector::FlowDissector::Error = core::convert::Infallible
pub fn aya::programs::flow_dissector::FlowDissector::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
impl<T, U> core::convert::TryInto<U> for aya::programs::flow_dissector::FlowDissector where U: core::convert::TryFrom<T>
pub type aya::programs::flow_dissector::FlowDissector::Error = <U as core::convert::TryFrom<T>>::Error
pub fn aya::programs::flow_dissector::FlowDissector::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
impl<T> core::any::Any for aya::programs::flow_dissector::FlowDissector where T: 'static + core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissector::type_id(&self) -> core::any::TypeId
impl<T> core::borrow::Borrow<T> for aya::programs::flow_dissector::FlowDissector where T: core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissector::borrow(&self) -> &T
impl<T> core::borrow::BorrowMut<T> for aya::programs::flow_dissector::FlowDissector where T: core::marker::Sized
pub fn aya::programs::flow_dissector::FlowDissector::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya::programs::flow_dissector::FlowDissector
pub fn aya::programs::flow_dissector::FlowDissector::from(t: T) -> T
pub struct aya::programs::KProbe
impl aya::programs::kprobe::KProbe
pub fn aya::programs::kprobe::KProbe::attach<T: core::convert::AsRef<std::ffi::os_str::OsStr>>(&mut self, fn_name: T, offset: u64) -> core::result::Result<aya::programs::kprobe::KProbeLinkId, aya::programs::ProgramError>
@ -7245,6 +7422,10 @@ impl aya::programs::links::Link for aya::programs::fexit::FExitLink
pub type aya::programs::fexit::FExitLink::Id = aya::programs::fexit::FExitLinkId
pub fn aya::programs::fexit::FExitLink::detach(self) -> core::result::Result<(), aya::programs::ProgramError>
pub fn aya::programs::fexit::FExitLink::id(&self) -> Self::Id
impl aya::programs::links::Link for aya::programs::flow_dissector::FlowDissectorLink
pub type aya::programs::flow_dissector::FlowDissectorLink::Id = aya::programs::flow_dissector::FlowDissectorLinkId
pub fn aya::programs::flow_dissector::FlowDissectorLink::detach(self) -> core::result::Result<(), aya::programs::ProgramError>
pub fn aya::programs::flow_dissector::FlowDissectorLink::id(&self) -> Self::Id
impl aya::programs::links::Link for aya::programs::kprobe::KProbeLink
pub type aya::programs::kprobe::KProbeLink::Id = aya::programs::kprobe::KProbeLinkId
pub fn aya::programs::kprobe::KProbeLink::detach(self) -> core::result::Result<(), aya::programs::ProgramError>

Loading…
Cancel
Save