libbpf: add bpf_object__load_xattr() API function to pass log_level
libbpf was recently made aware of the log_level attribute for programs, used to specify the level of information expected to be dumped by the verifier. Function bpf_prog_load_xattr() got support for this log_level parameter. But some applications using libbpf rely on another function to load programs, bpf_object__load(), which does accept any parameter for log level. Create an API function based on bpf_object__load(), but accepting an "attr" object as a parameter. Then add a log_level field to that object, so that applications calling the new bpf_object__load_xattr() can pick the desired log level. v3: - Rewrite commit log. v2: - We are in a new cycle, bump libbpf extraversion number. Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:

committed by
Daniel Borkmann

parent
775bc8ada8
commit
60276f9849
@@ -2224,7 +2224,7 @@ static bool bpf_program__is_function_storage(struct bpf_program *prog,
|
||||
}
|
||||
|
||||
static int
|
||||
bpf_object__load_progs(struct bpf_object *obj)
|
||||
bpf_object__load_progs(struct bpf_object *obj, int log_level)
|
||||
{
|
||||
size_t i;
|
||||
int err;
|
||||
@@ -2232,6 +2232,7 @@ bpf_object__load_progs(struct bpf_object *obj)
|
||||
for (i = 0; i < obj->nr_programs; i++) {
|
||||
if (bpf_program__is_function_storage(&obj->programs[i], obj))
|
||||
continue;
|
||||
obj->programs[i].log_level = log_level;
|
||||
err = bpf_program__load(&obj->programs[i],
|
||||
obj->license,
|
||||
obj->kern_version);
|
||||
@@ -2383,10 +2384,14 @@ int bpf_object__unload(struct bpf_object *obj)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bpf_object__load(struct bpf_object *obj)
|
||||
int bpf_object__load_xattr(struct bpf_object_load_attr *attr)
|
||||
{
|
||||
struct bpf_object *obj;
|
||||
int err;
|
||||
|
||||
if (!attr)
|
||||
return -EINVAL;
|
||||
obj = attr->obj;
|
||||
if (!obj)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -2399,7 +2404,7 @@ int bpf_object__load(struct bpf_object *obj)
|
||||
|
||||
CHECK_ERR(bpf_object__create_maps(obj), err, out);
|
||||
CHECK_ERR(bpf_object__relocate(obj), err, out);
|
||||
CHECK_ERR(bpf_object__load_progs(obj), err, out);
|
||||
CHECK_ERR(bpf_object__load_progs(obj, attr->log_level), err, out);
|
||||
|
||||
return 0;
|
||||
out:
|
||||
@@ -2408,6 +2413,15 @@ out:
|
||||
return err;
|
||||
}
|
||||
|
||||
int bpf_object__load(struct bpf_object *obj)
|
||||
{
|
||||
struct bpf_object_load_attr attr = {
|
||||
.obj = obj,
|
||||
};
|
||||
|
||||
return bpf_object__load_xattr(&attr);
|
||||
}
|
||||
|
||||
static int check_path(const char *path)
|
||||
{
|
||||
char *cp, errmsg[STRERR_BUFSIZE];
|
||||
|
Reference in New Issue
Block a user