From 5df853cfb030c3a37a066b892623546a77c97db2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alessandro=C2=A0Decina?= Date: Mon, 20 Sep 2021 01:27:43 +0000 Subject: [PATCH] Update readme --- aya-log/README.md | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 aya-log/README.md diff --git a/aya-log/README.md b/aya-log/README.md new file mode 100644 index 00000000..850590ed --- /dev/null +++ b/aya-log/README.md @@ -0,0 +1,72 @@ +# 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`: + +```toml +[dependencies] +aya-log = { git = "https://github.com/aya-rs/aya-log", branch = "main" } +``` + +### eBPF side + +Add `aya-log-ebpf` to `Cargo.toml`: + +```toml +[dependencies] +aya-log-ebpf = { git = "https://github.com/aya-rs/aya-log", branch = "main" } +``` + +## Example + +Here's an example that uses `aya-log` in conjunction with the [simplelog] crate +to log eBPF messages to the terminal. + +### User space code + +```rust +use aya_log::BpfLogger; +use simplelog::{ColorChoice, ConfigBuilder, LevelFilter, TermLogger, TerminalMode}; + +BpfLogger::init( + &mut bpf, + TermLogger::new( + LevelFilter::Trace, + ConfigBuilder::new() + .set_target_level(LevelFilter::Error) + .set_location_level(LevelFilter::Error) + .build(), + TerminalMode::Mixed, + ColorChoice::Auto, + ), +).unwrap(); +``` + +### eBPF code + +```rust +use aya_log_ebpf::info; + +fn try_xdp_firewall(ctx: XdpContext) -> Result { + 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) +} +``` + +[aya]: https://github.com/aya-rs/aya +[log]: https://docs.rs/log +[simplelog]: https://docs.rs/simplelog \ No newline at end of file