From c93d2f0ab7c9af07dcdbe2341ca26a6204fd3811 Mon Sep 17 00:00:00 2001 From: Greened <108997309+GreenedDev@users.noreply.github.com> Date: Mon, 7 Oct 2024 22:37:42 +0400 Subject: [PATCH] Create greened_test.rs --- .../src/tests/greened_test.rs | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 test/integration-test/src/tests/greened_test.rs diff --git a/test/integration-test/src/tests/greened_test.rs b/test/integration-test/src/tests/greened_test.rs new file mode 100644 index 00000000..b44b6913 --- /dev/null +++ b/test/integration-test/src/tests/greened_test.rs @@ -0,0 +1,60 @@ +use anyhow::Context; +use aya::{ + include_bytes_aligned, + programs::{Xdp, XdpFlags}, + Bpf, +}; +use aya_log::BpfLogger; +use clap::Parser; +use log::warn; +use simplelog::{ColorChoice, ConfigBuilder, LevelFilter, TermLogger, TerminalMode}; +use tokio::signal::ctrl_c; + +#[derive(Debug, Parser)] +struct Opt { + #[clap(short, long, default_value = "eth0")] + //#[clap(short, long, default_value = "enp1s0")] + iface: String, +} + +#[tokio::main] +async fn main() -> Result<(), anyhow::Error> { + TermLogger::init( + LevelFilter::Debug, + ConfigBuilder::new() + .set_target_level(LevelFilter::Error) + .set_location_level(LevelFilter::Error) + .build(), + TerminalMode::Mixed, + ColorChoice::Auto, + ) + .unwrap(); + let opt = Opt::parse(); + + // env_logger::init(); + + // This will include your eBPF object file as raw bytes at compile-time and load it at + // runtime. This approach is recommended for most real-world use cases. If you would + // like to specify the eBPF program at runtime rather than at compile-time, you can + // reach for `Bpf::load_file` instead. + #[cfg(debug_assertions)] + let mut bpf = Bpf::load(include_bytes_aligned!( + "../../target/bpfel-unknown-none/debug/xdp-syncookie" + ))?; + #[cfg(not(debug_assertions))] + let mut bpf = Bpf::load(include_bytes_aligned!( + "../../target/bpfel-unknown-none/release/xdp-syncookie" + ))?; + if let Err(e) = BpfLogger::init(&mut bpf) { + // This can happen if you remove all logger statements from your eBPF program. + warn!("failed to initialize eBPF logger: {}", e); + } + let program: &mut Xdp = bpf.program_mut("xdp_syncookie").unwrap().try_into()?; + program.load()?; + program.attach(&opt.iface, XdpFlags::default()) + .context("failed to attach the XDP program with default flags - try changing XdpFlags::default() to XdpFlags::SKB_MODE")?; + ctrl_c().await?; + + // (1) + Ok(()) +}