[DTrace-devel] [PATCH] Implement dt_bpf_map_lookup_fd()
Kris Van Hees
kris.van.hees at oracle.com
Wed Aug 31 20:28:12 UTC 2022
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_bpf.c | 20 +++++++++++++++++---
libdtrace/dt_bpf.h | 1 +
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/libdtrace/dt_bpf.c b/libdtrace/dt_bpf.c
index 81b6e6cb..504ddcb4 100644
--- a/libdtrace/dt_bpf.c
+++ b/libdtrace/dt_bpf.c
@@ -244,18 +244,32 @@ dt_bpf_map_update(int fd, const void *key, const void *val)
}
/*
- * Retrieve the value in a map-of-maps, i.e. map[okey][ikey].
+ * Retrieve the fd for a map-in-map, i.e. map[okey] which is the fd of a map.
+ *
+ * Note: the caller is responsible for closing the fd.
*/
int
-dt_bpf_map_lookup_inner(int fd, const void *okey, const void *ikey, void *val)
+dt_bpf_map_lookup_fd(int fd, const void *okey)
{
uint32_t id;
- int rc;
if (dt_bpf_map_lookup(fd, okey, &id) < 0)
return -1;
fd = dt_bpf_map_get_fd_by_id(id);
+
+ return fd;
+}
+
+/*
+ * Retrieve the value in a map-of-maps, i.e. map[okey][ikey].
+ */
+int
+dt_bpf_map_lookup_inner(int fd, const void *okey, const void *ikey, void *val)
+{
+ int rc;
+
+ fd = dt_bpf_map_lookup_fd(fd, okey);
if (fd < 0)
return -1;
diff --git a/libdtrace/dt_bpf.h b/libdtrace/dt_bpf.h
index 17761116..ab3862aa 100644
--- a/libdtrace/dt_bpf.h
+++ b/libdtrace/dt_bpf.h
@@ -51,6 +51,7 @@ extern int dt_bpf_map_next_key(int fd, const void *key, void *nxt);
extern int dt_bpf_map_update(int fd, const void *key, const void *val);
extern int dt_bpf_map_delete(int fd, const void *key);
extern int dt_bpf_map_get_fd_by_id(uint32_t id);
+extern int dt_bpf_map_lookup_fd(int fd, const void *okey);
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,
--
2.34.1
More information about the DTrace-devel
mailing list