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__is_per_cpu(enum bpf_map_type type
)
14 return type
== BPF_MAP_TYPE_PERCPU_HASH
||
15 type
== BPF_MAP_TYPE_PERCPU_ARRAY
||
16 type
== BPF_MAP_TYPE_LRU_PERCPU_HASH
||
17 type
== BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE
;
20 static void *bpf_map__alloc_value(const struct bpf_map
*map
)
22 if (bpf_map__is_per_cpu(bpf_map__type(map
)))
23 return malloc(round_up(bpf_map__value_size(map
), 8) *
24 sysconf(_SC_NPROCESSORS_CONF
));
26 return malloc(bpf_map__value_size(map
));
29 int bpf_map__fprintf(struct bpf_map
*map
, FILE *fp
)
31 void *prev_key
= NULL
, *key
, *value
;
32 int fd
= bpf_map__fd(map
), err
;
39 key
= malloc(bpf_map__key_size(map
));
43 value
= bpf_map__alloc_value(map
);
47 while ((err
= bpf_map_get_next_key(fd
, prev_key
, key
) == 0)) {
48 int intkey
= *(int *)key
;
50 if (!bpf_map_lookup_elem(fd
, key
, value
)) {
51 bool boolval
= *(bool *)value
;
53 printed
+= fprintf(fp
, "[%d] = %d,\n", intkey
, boolval
);
55 printed
+= fprintf(fp
, "[%d] = ERROR,\n", intkey
);