1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/unistd.h>
10 #include <arpa/inet.h>
18 char bpf_log_buf
[BPF_LOG_BUF_SIZE
];
20 static void stars(char *str
, long val
, long max
, int width
)
24 for (i
= 0; i
< (width
* val
/ max
) - 1 && i
< width
- 1; i
++)
31 int main(int argc
, char **argv
)
33 unsigned int nr_cpus
= bpf_num_possible_cpus();
34 const char *map_filename
= "/sys/fs/bpf/tc/globals/lwt_len_hist_map";
35 uint64_t values
[nr_cpus
], sum
, max_value
= 0, data
[MAX_INDEX
] = {};
36 uint64_t key
= 0, next_key
, max_key
= 0;
37 char starstr
[MAX_STARS
];
40 map_fd
= bpf_obj_get(map_filename
);
42 fprintf(stderr
, "bpf_obj_get(%s): %s(%d)\n",
43 map_filename
, strerror(errno
), errno
);
47 while (bpf_map_get_next_key(map_fd
, &key
, &next_key
) == 0) {
48 if (next_key
>= MAX_INDEX
) {
49 fprintf(stderr
, "Key %lu out of bounds\n", next_key
);
53 bpf_map_lookup_elem(map_fd
, &next_key
, values
);
56 for (i
= 0; i
< nr_cpus
; i
++)
60 if (sum
&& next_key
> max_key
)
69 for (i
= 1; i
<= max_key
+ 1; i
++) {
70 stars(starstr
, data
[i
- 1], max_value
, MAX_STARS
);
71 printf("%8ld -> %-8ld : %-8ld |%-*s|\n",
72 (1l << i
) >> 1, (1l << i
) - 1, data
[i
- 1],