1 // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
3 #include "util/bpf_map.h"
5 #include <bpf/libbpf.h>
7 #include <linux/kernel.h>
12 static bool bpf_map_def__is_per_cpu(const struct bpf_map_def
*def
)
14 return def
->type
== BPF_MAP_TYPE_PERCPU_HASH
||
15 def
->type
== BPF_MAP_TYPE_PERCPU_ARRAY
||
16 def
->type
== BPF_MAP_TYPE_LRU_PERCPU_HASH
||
17 def
->type
== BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE
;
20 static void *bpf_map_def__alloc_value(const struct bpf_map_def
*def
)
22 if (bpf_map_def__is_per_cpu(def
))
23 return malloc(round_up(def
->value_size
, 8) * sysconf(_SC_NPROCESSORS_CONF
));
25 return malloc(def
->value_size
);
28 int bpf_map__fprintf(struct bpf_map
*map
, FILE *fp
)
30 const struct bpf_map_def
*def
= bpf_map__def(map
);
31 void *prev_key
= NULL
, *key
, *value
;
32 int fd
= bpf_map__fd(map
), err
;
42 key
= malloc(def
->key_size
);
46 value
= bpf_map_def__alloc_value(def
);
50 while ((err
= bpf_map_get_next_key(fd
, prev_key
, key
) == 0)) {
51 int intkey
= *(int *)key
;
53 if (!bpf_map_lookup_elem(fd
, key
, value
)) {
54 bool boolval
= *(bool *)value
;
56 printed
+= fprintf(fp
, "[%d] = %d,\n", intkey
, boolval
);
58 printed
+= fprintf(fp
, "[%d] = ERROR,\n", intkey
);