diff --git a/aya-bpf-macros/src/lib.rs b/aya-bpf-macros/src/lib.rs index 6c3c0699..182a2fcd 100644 --- a/aya-bpf-macros/src/lib.rs +++ b/aya-bpf-macros/src/lib.rs @@ -118,6 +118,40 @@ pub fn cgroup_skb(attrs: TokenStream, item: TokenStream) -> TokenStream { .into() } +/// Marks a function as a [`CgroupSockAddr`] eBPF program. +/// +/// [`CgroupSockAddr`] programs can be used to inspect or modify socket addresses passed to +/// various syscalls within a [cgroup]. The `attach_type` argument specifies a place to attach +/// the eBPF program to. See [`CgroupSockAddrAttachType`] for more details. +/// +/// [cgroup]: https://man7.org/linux/man-pages/man7/cgroups.7.html +/// [`CgroupSockAddrAttachType`]: ../aya/programs/cgroup_sock_addr/enum.CgroupSockAddrAttachType.html +/// [`CgroupSockAddr`]: ../aya/programs/cgroup_sock_addr/struct.CgroupSockAddr.html +/// +/// # Minimum kernel version +/// +/// The minimum kernel version required to use this feature is 4.17. +/// +/// # Examples +/// +/// ```no_run +/// use aya_bpf::{macros::cgroup_sock_addr, programs::SockAddrContext}; +/// +/// #[cgroup_sock_addr(connect4)] +/// pub fn connect4(ctx: SockAddrContext) -> i32 { +/// match try_connect4(ctx) { +/// Ok(ret) => ret, +/// Err(ret) => match ret.try_into() { +/// Ok(rt) => rt, +/// Err(_) => 1, +/// }, +/// } +/// } +/// +/// fn try_connect4(ctx: SockAddrContext) -> Result { +/// Ok(0) +/// } +/// ``` #[proc_macro_attribute] pub fn cgroup_sock_addr(attrs: TokenStream, item: TokenStream) -> TokenStream { let args = parse_macro_input!(attrs as SockAddrArgs);