|
|
@ -118,6 +118,40 @@ pub fn cgroup_skb(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
|
|
.into()
|
|
|
|
.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<i32, i64> {
|
|
|
|
|
|
|
|
/// Ok(0)
|
|
|
|
|
|
|
|
/// }
|
|
|
|
|
|
|
|
/// ```
|
|
|
|
#[proc_macro_attribute]
|
|
|
|
#[proc_macro_attribute]
|
|
|
|
pub fn cgroup_sock_addr(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
|
|
pub fn cgroup_sock_addr(attrs: TokenStream, item: TokenStream) -> TokenStream {
|
|
|
|
let args = parse_macro_input!(attrs as SockAddrArgs);
|
|
|
|
let args = parse_macro_input!(attrs as SockAddrArgs);
|
|
|
|