From 3bf8e87b3eef895021c860f345b7f58277740567 Mon Sep 17 00:00:00 2001 From: Kenjiro Nakayama Date: Wed, 18 May 2022 08:28:25 +0900 Subject: [PATCH] Add cgroup_sysctl template for BPF_PROG_TYPE_CGROUP_SYSCTL Since https://github.com/aya-rs/aya/pull/256 supports `BPF_PROG_TYPE_CGROUP_SYSCTL`, this patch adds cgroup_sysctl template. --- cargo-generate.toml | 1 + {{project-name}}-ebpf/src/main.rs | 19 +++++++++++++++++++ {{project-name}}/src/main.rs | 9 ++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/cargo-generate.toml b/cargo-generate.toml index 7601e04..422f068 100644 --- a/cargo-generate.toml +++ b/cargo-generate.toml @@ -18,6 +18,7 @@ choices = [ "xdp", "classifier", "cgroup_skb", + "cgroup_sysctl", "tracepoint", "lsm", "tp_btf" diff --git a/{{project-name}}-ebpf/src/main.rs b/{{project-name}}-ebpf/src/main.rs index 637ed3a..906db02 100644 --- a/{{project-name}}-ebpf/src/main.rs +++ b/{{project-name}}-ebpf/src/main.rs @@ -284,6 +284,25 @@ use aya_bpf::{ pub fn {{crate_name}}(_ctx: SkBuffContext) -> i64 { return 0 } +{%- when "cgroup_sysctl" %} +use aya_bpf::{ + macros::cgroup_sysctl, + programs::SysctlContext, +}; +use aya_log_ebpf::info; + +#[cgroup_sysctl(name="{{crate_name}}")] +pub fn {{crate_name}}(ctx: SysctlContext) -> i32 { + match unsafe { try_{{crate_name}}(ctx) } { + Ok(ret) => ret, + Err(ret) => ret, + } +} + +unsafe fn try_{{crate_name}}(ctx: SysctlContext) -> Result { + info!(&ctx, "sysctl operation called"); + Ok(0) +} {%- endcase %} #[panic_handler] diff --git a/{{project-name}}/src/main.rs b/{{project-name}}/src/main.rs index 31155a3..f0eaab6 100644 --- a/{{project-name}}/src/main.rs +++ b/{{project-name}}/src/main.rs @@ -21,6 +21,8 @@ use aya::programs::{Xdp, XdpFlags}; use aya::programs::{tc, SchedClassifier, TcAttachType}; {%- when "cgroup_skb" -%} use aya::programs::{CgroupSkb, CgroupSkbAttachType}; +{%- when "cgroup_sysctl" -%} +use aya::programs::{CgroupSysctl}; {%- when "tracepoint" -%} use aya::programs::TracePoint; {%- when "lsm" -%} @@ -43,7 +45,7 @@ struct Opt { {% if program_type == "xdp" or program_type == "classifier" -%} #[clap(short, long, default_value = "eth0")] iface: String, - {%- elsif program_type == "sock_ops" or program_type == "cgroup_skb" -%} + {%- elsif program_type == "sock_ops" or program_type == "cgroup_skb" or program_type == "cgroup_sysctl" -%} #[clap(short, long, default_value = "/sys/fs/cgroup/unified")] cgroup_path: String, {%- elsif program_type == "uprobe" or program_type == "uretprobe" -%} @@ -145,6 +147,11 @@ async fn main() -> Result<(), anyhow::Error> { let prog: &mut SocketFilter = bpf.program_mut("{{crate_name}}").unwrap().try_into()?; prog.load()?; prog.attach(client.as_raw_fd())?; + {%- when "cgroup_sysctl" -%} + let program: &mut CgroupSysctl = bpf.program_mut("{{crate_name}}").unwrap().try_into()?; + let cgroup = std::fs::File::open(opt.cgroup_path)?; + program.load()?; + program.attach(cgroup)?; {%- endcase %} info!("Waiting for Ctrl-C...");