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

Download history 1335/week @ 2024-04-23 1554/week @ 2024-04-30 1009/week @ 2024-05-07 1046/week @ 2024-05-14 1361/week @ 2024-05-21 1074/week @ 2024-05-28 1344/week @ 2024-06-04 1989/week @ 2024-06-11 1819/week @ 2024-06-18 1258/week @ 2024-06-25 1266/week @ 2024-07-02 1039/week @ 2024-07-09 1210/week @ 2024-07-16 1153/week @ 2024-07-23 803/week @ 2024-07-30 773/week @ 2024-08-06

4,124 每月下载量
用于 14 个crate(直接使用11个)

MIT/Apache

1MB
27K SLoC

Aya

Crates.io License Build status Book

API文档

Unreleased Documentation Documentaiton

社区

Discord Awesome

加入 Discord上的讨论,讨论与aya相关的一切,或发现并贡献到Awesome Aya项目的列表。

概述

eBPF是一种允许在Linux内核中运行用户提供的程序的技术。更多信息请参阅什么是eBBF

Aya是一个专注于可操作性和开发体验的eBPF库。它不依赖于libbpfbcc - 它完全使用Rust从头构建,仅使用libc crate来执行系统调用。当支持BTF并与musl链接时,它提供真正的一次编译,到处运行的解决方案,其中单个自包含的二进制文件可以部署在许多Linux发行版和内核版本上。

它提供的一些主要功能包括

  • BPF类型格式(BTF)的支持,当目标内核支持时可以透明启用。这允许针对一个内核版本编译的eBPF程序在没有重新编译的情况下运行在不同的内核版本上。
  • 支持函数调用重定位和全局数据映射,允许eBPF程序进行函数调用并使用全局变量和初始化器
  • 异步支持,包括tokioasync-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