[DTrace-devel] [PATCH 3/8] bpf: introduce dt_bpf_prog_attach()

Kris Van Hees kris.van.hees at oracle.com
Wed Apr 3 15:26:49 UTC 2024


Some newer program types require an attach type and BTF id to identify
the object that the BPF program should be attached to.  This is a more
generic form of dt_bpf_prog_load().

Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 libdtrace/dt_bpf.c | 23 +++++++++++++++++++----
 libdtrace/dt_bpf.h |  4 ++++
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/libdtrace/dt_bpf.c b/libdtrace/dt_bpf.c
index 56b342e8..14ef12fc 100644
--- a/libdtrace/dt_bpf.c
+++ b/libdtrace/dt_bpf.c
@@ -73,18 +73,22 @@ dt_bpf_lockmem_error(dtrace_hdl_t *dtp, const char *msg)
 }
 
 /*
- * Load a BPF program into the kernel.
+ * Load a BPF program into the kernel (and attach it to an object by BTF id if
+ * specified).
  */
 int
-dt_bpf_prog_load(enum bpf_prog_type prog_type, const dtrace_difo_t *dp,
-		     uint32_t log_level, char *log_buf, size_t log_buf_sz)
+dt_bpf_prog_attach(enum bpf_prog_type ptype, enum bpf_attach_type atype,
+		   uint32_t btf_id, const dtrace_difo_t *dp, uint32_t log_level,
+		   char *log_buf, size_t log_buf_sz)
 {
 	union bpf_attr	attr;
 	int		fd;
 	int		i = 0;
 
 	memset(&attr, 0, sizeof(attr));
-	attr.prog_type = prog_type;
+	attr.prog_type = ptype;
+	attr.expected_attach_type = atype;
+	attr.attach_btf_id = btf_id;
 	attr.insn_cnt = dp->dtdo_len;
 	attr.insns = (uint64_t)dp->dtdo_buf;
 	attr.license = (uint64_t)BPF_CG_LICENSE;
@@ -103,6 +107,17 @@ dt_bpf_prog_load(enum bpf_prog_type prog_type, const dtrace_difo_t *dp,
 	return fd;
 }
 
+/*
+ * Load a BPF program into the kernel (and attach it to an object by BTF id if
+ * specified).
+ */
+int
+dt_bpf_prog_load(enum bpf_prog_type ptype, const dtrace_difo_t *dp,
+		 uint32_t log_lvl, char *log_buf, size_t log_bufsz)
+{
+	return dt_bpf_prog_attach(ptype, 0, 0, dp, log_lvl, log_buf, log_bufsz);
+}
+
 /*
  * Create a named BPF map.
  */
diff --git a/libdtrace/dt_bpf.h b/libdtrace/dt_bpf.h
index 9e8245be..63df043a 100644
--- a/libdtrace/dt_bpf.h
+++ b/libdtrace/dt_bpf.h
@@ -64,6 +64,10 @@ extern int dt_bpf_map_lookup_inner(int fd, const void *okey, const void *ikey,
 				   void *val);
 extern int dt_bpf_map_update_inner(int fd, const void *okey, const void *ikey,
 				   const void *val);
+extern int dt_bpf_prog_attach(enum bpf_prog_type ptype,
+			      enum bpf_attach_type atype, uint32_t btf_id,
+			      const dtrace_difo_t *dp, uint32_t log_level,
+			      char *log_buf, size_t log_buf_sz);
 extern int dt_bpf_prog_load(enum bpf_prog_type prog_type,
 			    const dtrace_difo_t *dp, uint32_t log_level,
 			    char *log_buf, size_t log_buf_sz);
-- 
2.42.0




More information about the DTrace-devel mailing list