Aya

Crates.io License Build status Documentaiton

API docs | Chat

Overview

eBPF is a technology that allows running user-supplied programs inside the Linux kernel. For more info see https://ebpf.io/what-is-ebpf.

Aya is an eBPF library built with a focus on operability and developer experience. It does not rely on [libbpf] nor [bcc] - it's built from the ground up purely in Rust, using only the [libc] crate to execute syscalls. With BTF support and when linked with musl, it offers a true compile once, run everywhere solution, where a single self-contained binary can be deployed on many linux distributions and kernel versions.

Some of the major features provided include:

Example

Aya supports a large chunk of the eBPF API. The following example shows how to use a BPF_PROG_TYPE_CGROUP_SKB program with aya:

```rust use std::fs::File; use std::convert::TryInto; use aya::Bpf; use aya::programs::{CgroupSkb, CgroupSkbAttachType};

// load the BPF code let mut bpf = Bpf::load_file("bpf.o")?;

// get the ingress_filter program compiled into bpf.o. let ingress: &mut CgroupSkb = bpf.programmut("ingressfilter")?.try_into()?;

// load the program into the kernel ingress.load()?;

// attach th program to the root cgroup. ingress_filter will be called for all // incoming packets. let cgroup = File::open("/sys/fs/cgroup/unified")?; ingress.attach(cgroup, CgroupSkbAttachType::Ingress)?; ```

Community

Join the conversation on Discord to discuss anything related to aya.

Contributing

Please see the contributing guide.

License

Aya is distributed under the terms of either the [MIT license] or the [Apache License] (version 2.0), at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.