Re: [PATCH 3/3] samples: bpf: refactor BPF map in map test with libbpf
From: Andrii Nakryiko <hidden>
Date: 2020-06-26 20:30:51
Also in:
bpf
On Fri, Jun 26, 2020 at 1:18 AM Daniel T. Lee [off-list ref] wrote:
From commit 646f02ffdd49 ("libbpf: Add BTF-defined map-in-map
support"), a way to define internal map in BTF-defined map has been
added.
Instead of using previous 'inner_map_idx' definition, the structure to
be used for the inner map can be directly defined using array directive.
__array(values, struct inner_map)
This commit refactors map in map test program with libbpf by explicitly
defining inner map with BTF-defined format.
Signed-off-by: Daniel T. Lee <redacted>
---Thanks for the clean up, looks good except that prog NULL check. It also seems like this is the last use of bpf_map_def_legacy, do you mind removing it as well?
samples/bpf/Makefile | 2 +- samples/bpf/test_map_in_map_kern.c | 85 +++++++++++++++--------------- samples/bpf/test_map_in_map_user.c | 53 +++++++++++++++++-- 3 files changed, 91 insertions(+), 49 deletions(-)
[...]
snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
+ obj = bpf_object__open_file(filename, NULL);
+ if (libbpf_get_error(obj)) {this is right, but...
+ fprintf(stderr, "ERROR: opening BPF object file failed\n");
+ return 0;
+ }
- if (load_bpf_file(filename)) {
- printf("%s", bpf_log_buf);
- return 1;
+ prog = bpf_object__find_program_by_name(obj, "trace_sys_connect");
+ if (libbpf_get_error(prog)) {this is wrong. Just NULL check. libbpf APIs are not very consistent with what they return, unfortunately.
+ printf("finding a prog in obj file failed\n");
+ goto cleanup;
+ }
+[...]