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:
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 the 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)?;
```
Join the conversation on Discord to discuss anything related to aya.
Please see the contributing guide.
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.