10个版本
0.12.0 | 2024年2月28日 |
---|---|
0.11.0 | 2022年6月6日 |
0.10.7 | 2022年3月19日 |
0.10.6 | 2021年11月13日 |
0.10.2 | 2021年6月17日 |
#55 in Unix API
4,124 每月下载量
用于 14 个crate(直接使用11个)
1MB
27K SLoC
API文档
社区
加入 Discord上的讨论,讨论与aya相关的一切,或发现并贡献到Awesome Aya项目的列表。
概述
eBPF是一种允许在Linux内核中运行用户提供的程序的技术。更多信息请参阅什么是eBBF。
Aya是一个专注于可操作性和开发体验的eBPF库。它不依赖于libbpf或bcc - 它完全使用Rust从头构建,仅使用libc crate来执行系统调用。当支持BTF并与musl链接时,它提供真正的一次编译,到处运行的解决方案,其中单个自包含的二进制文件可以部署在许多Linux发行版和内核版本上。
它提供的一些主要功能包括
- BPF类型格式(BTF)的支持,当目标内核支持时可以透明启用。这允许针对一个内核版本编译的eBPF程序在没有重新编译的情况下运行在不同的内核版本上。
- 支持函数调用重定位和全局数据映射,允许eBPF程序进行函数调用并使用全局变量和初始化器。
- 异步支持,包括tokio和async-std。
- 易于部署和快速构建:aya不需要内核构建或编译的头部,甚至不需要C工具链;发布构建只需几秒钟即可完成。
示例
Aya支持大部分eBPF API。以下示例显示了如何使用aya中的BPF_PROG_TYPE_CGROUP_SKB
程序
use std::fs::File;
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.program_mut("ingress_filter")?.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)?;
贡献
请参阅贡献指南。
许可
Aya遵循MIT许可协议或Apache许可证(版本2.0)中的条款,具体选择由您决定。
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在此crate中的任何贡献,将按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~4–15MB
~177K SLoC