[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