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.
aya/aya-log
Sherlock Holo 29b5eef4b7
make async feature mutual exclusivity
In previous version, user can enable async_tokio and async_std features,
however when both of them are enabled, tokio will be ignored.

After add async_compio feature, when two or three async features are enabled,
user may confuse which one will be used. IMO the better way is make
these async features are mutual exclusivity, user should only enable
one, if more than async feautres are enabled, will compile fail with
compile_error! macro. Also if none of the async feature is enabled in
aya-log, will compile fail too
5 days ago
..
src make async feature mutual exclusivity 5 days ago
CHANGELOG.md Release aya-log v0.2.1 8 months ago
Cargo.toml make async feature mutual exclusivity 5 days ago
README.md feat(aya-log): Rename BpfLogger to EbpfLogger 1 year ago
release.toml Re-organize into a single workspace 3 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::EbpfLogger;

env_logger::init();

// Will log using the default logger, which is TermLogger in this case
EbpfLogger::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)
}