OSDN Git Service

libbpf: Introduce bpf_map__initial_value().
authorAlexei Starovoitov <ast@kernel.org>
Fri, 14 May 2021 00:36:18 +0000 (17:36 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 18 May 2021 22:40:56 +0000 (00:40 +0200)
Introduce bpf_map__initial_value() to read initial contents
of mmaped data/rodata/bss maps.
Note that bpf_map__set_initial_value() doesn't allow modifying
kconfig map while bpf_map__initial_value() allows reading
its values.

Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20210514003623.28033-17-alexei.starovoitov@gmail.com
tools/lib/bpf/libbpf.c
tools/lib/bpf/libbpf.h
tools/lib/bpf/libbpf.map

index a8a6bb3..dc4d5fe 100644 (file)
@@ -9755,6 +9755,14 @@ int bpf_map__set_initial_value(struct bpf_map *map,
        return 0;
 }
 
+const void *bpf_map__initial_value(struct bpf_map *map, size_t *psize)
+{
+       if (!map->mmaped)
+               return NULL;
+       *psize = map->def.value_size;
+       return map->mmaped;
+}
+
 bool bpf_map__is_offload_neutral(const struct bpf_map *map)
 {
        return map->def.type == BPF_MAP_TYPE_PERF_EVENT_ARRAY;
index 46b31c1..d985235 100644 (file)
@@ -471,6 +471,7 @@ LIBBPF_API int bpf_map__set_priv(struct bpf_map *map, void *priv,
 LIBBPF_API void *bpf_map__priv(const struct bpf_map *map);
 LIBBPF_API int bpf_map__set_initial_value(struct bpf_map *map,
                                          const void *data, size_t size);
+LIBBPF_API const void *bpf_map__initial_value(struct bpf_map *map, size_t *psize);
 LIBBPF_API bool bpf_map__is_offload_neutral(const struct bpf_map *map);
 LIBBPF_API bool bpf_map__is_internal(const struct bpf_map *map);
 LIBBPF_API int bpf_map__set_pin_path(struct bpf_map *map, const char *path);
index bc59516..2abef6f 100644 (file)
@@ -359,6 +359,7 @@ LIBBPF_0.4.0 {
                bpf_linker__finalize;
                bpf_linker__free;
                bpf_linker__new;
+               bpf_map__initial_value;
                bpf_map__inner_map;
                bpf_object__gen_loader;
                bpf_object__set_kversion;