From 8dcda393c4db27087b5e77a86c4b044b0257ce6b Mon Sep 17 00:00:00 2001 From: Kenjiro Nakayama Date: Wed, 9 Feb 2022 22:59:35 +0900 Subject: [PATCH] Add template for socket_filter program type This patch adds template for socket_filter. e.g. ```sh cargo generate --path ~/dev/aya-template \ --name my-test \ -d program_type=socket_filter ``` --- .github/workflows/ci.yml | 1 + cargo-generate.toml | 1 + {{project-name}}-ebpf/src/main.rs | 10 ++++++++++ {{project-name}}/src/main.rs | 9 +++++++++ 4 files changed, 21 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 943737c..cfa2fc8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,6 +26,7 @@ jobs: - uprobe - uretprobe - sock_ops + - sock_filter - sk_msg - xdp - classifier diff --git a/cargo-generate.toml b/cargo-generate.toml index e88d8be..fb840de 100644 --- a/cargo-generate.toml +++ b/cargo-generate.toml @@ -13,6 +13,7 @@ choices = [ "uprobe", "uretprobe", "sock_ops", + "sock_filter", "sk_msg", "xdp", "classifier", diff --git a/{{project-name}}-ebpf/src/main.rs b/{{project-name}}-ebpf/src/main.rs index f676e99..af3f009 100644 --- a/{{project-name}}-ebpf/src/main.rs +++ b/{{project-name}}-ebpf/src/main.rs @@ -245,6 +245,16 @@ pub fn {{tracepoint_name}}(ctx: BtfTracePointContext) -> i32 { unsafe fn try_{{tracepoint_name}}(_ctx: BtfTracePointContext) -> Result { Ok(0) } +{%- when "socket_filter" %} +use aya_bpf::{ + macros::socket_filter, + programs::SkBuffContext, +}; + +#[socket_filter(name="{{crate_name}}")] +pub fn {{crate_name}}(_ctx: SkBuffContext) -> i64 { + return 0 +} {%- endcase %} #[panic_handler] diff --git a/{{project-name}}/src/main.rs b/{{project-name}}/src/main.rs index 8176b85..ff2e578 100644 --- a/{{project-name}}/src/main.rs +++ b/{{project-name}}/src/main.rs @@ -28,6 +28,10 @@ use aya::programs::TracePoint; use aya::{programs::Lsm, Btf}; {%- when "tp_btf" -%} use aya::{programs::BtfTracePoint, Btf}; +{%- when "socket_filter" -%} +use std::net::TcpStream; +use std::os::unix::io::AsRawFd; +use aya::programs::SocketFilter; {%- endcase %} use log::info; use simplelog::{ColorChoice, ConfigBuilder, LevelFilter, TermLogger, TerminalMode}; @@ -131,6 +135,11 @@ async fn main() -> Result<(), anyhow::Error> { let program: &mut BtfTracePoint = bpf.program_mut("{{tracepoint_name}}").unwrap().try_into()?; program.load("{{tracepoint_name}}", &btf)?; program.attach()?; + {%- when "socket_filter" -%} + let client = TcpStream::connect("127.0.0.1:1234")?; + let prog: &mut SocketFilter = bpf.program_mut("{{crate_name}}").unwrap().try_into()?; + prog.load()?; + prog.attach(client.as_raw_fd())?; {%- endcase %} info!("Waiting for Ctrl-C...");