mirror of https://github.com/aya-rs/aya
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5603d7248a
Keeping the `Pod` implementations and optional dependency on aya in aya-log-common breaks the clippy checks (which are made on the entire workspace). The reason is that when different crates inside the workspace have the same dependency with different features, that dependency is built only once with the sum of features needed by all crates. It's **not** being built separately with different feature sets. That's why, before this change, aya-log-common was built once for the entire workspace with `userspace` feature enabled. That made importing aya-log-ebpf inside integration-ebpf impossible. The aya-log-common build, with `userspace` feature enabled, was pulling std as a dependency. Therefore, importing aya-log-ebpf inside integration-ebpf resulted in including std and errors like: ``` error[E0152]: found duplicate lang item `panic_impl` --> test/integration-ebpf/src/log.rs:23:1 | 23 | fn panic(_info: &core::panic::PanicInfo) -> ! { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: the lang item is first defined in crate `std` (which `aya` depends on) ``` This change fixes the problem by removing the `userspace` feature from aya-log-common and moving the `Pod` implementations to aya-log. |
2 years ago | |
---|---|---|
.. | ||
src | 2 years ago | |
Cargo.toml | 2 years ago | |
README.md | 2 years ago | |
release.toml | 2 years ago |
README.md
aya-log - a logging library for eBPF programs
Overview
aya-log
is a logging library for eBPF programs written using aya. Think of
it as the log crate for eBPF.
Installation
User space
Add aya-log
to Cargo.toml
:
[dependencies]
aya-log = { git = "https://github.com/aya-rs/aya", branch = "main" }
eBPF side
Add aya-log-ebpf
to Cargo.toml
:
[dependencies]
aya-log-ebpf = { git = "https://github.com/aya-rs/aya", branch = "main" }
Example
Here's an example that uses aya-log
in conjunction with the env_logger crate
to log eBPF messages to the terminal.
User space code
use aya_log::BpfLogger;
env_logger::init();
// Will log using the default logger, which is TermLogger in this case
BpfLogger::init(&mut bpf).unwrap();
eBPF code
use aya_log_ebpf::info;
fn try_xdp_firewall(ctx: XdpContext) -> Result<u32, ()> {
if let Some(port) = tcp_dest_port(&ctx)? {
if block_port(port) {
info!(&ctx, "❌ blocked incoming connection on port: {}", port);
return Ok(XDP_DROP);
}
}
Ok(XDP_PASS)
}