libbpf: add "prog_flags" to bpf_program/bpf_prog_load_attr/bpf_load_program_attr
authorJiong Wang <jiong.wang@netronome.com>
Fri, 24 May 2019 22:25:19 +0000 (23:25 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Sat, 25 May 2019 01:58:37 +0000 (18:58 -0700)
libbpf doesn't allow passing "prog_flags" during bpf program load in a
couple of load related APIs, "bpf_load_program_xattr", "load_program" and
"bpf_prog_load_xattr".

It makes sense to allow passing "prog_flags" which is useful for
customizing program loading.

Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/lib/bpf/bpf.c
tools/lib/bpf/bpf.h
tools/lib/bpf/libbpf.c
tools/lib/bpf/libbpf.h

index c4a48086dc9a5a6f926367dc1b05a4a25e62e41b..0d4b4fe10a84dc903005bd1a39bc77e319120044 100644 (file)
@@ -256,6 +256,7 @@ int bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr,
        if (load_attr->name)
                memcpy(attr.prog_name, load_attr->name,
                       min(strlen(load_attr->name), BPF_OBJ_NAME_LEN - 1));
+       attr.prog_flags = load_attr->prog_flags;
 
        fd = sys_bpf_prog_load(&attr, sizeof(attr));
        if (fd >= 0)
index 9593fec75652e571b6c5447d3c3aa47786fadcaf..ff42ca043dc8fc1e0e94eaf1334367ec4585b543 100644 (file)
@@ -87,6 +87,7 @@ struct bpf_load_program_attr {
        const void *line_info;
        __u32 line_info_cnt;
        __u32 log_level;
+       __u32 prog_flags;
 };
 
 /* Flags to direct loading requirements */
index 197b574406b3ac6599bb81e395ff88d9c0374661..ff149372b3c07050f2fb7d9f8c442619db7cbc33 100644 (file)
@@ -188,6 +188,7 @@ struct bpf_program {
        void *line_info;
        __u32 line_info_rec_size;
        __u32 line_info_cnt;
+       __u32 prog_flags;
 };
 
 enum libbpf_map_type {
@@ -2076,6 +2077,7 @@ load_program(struct bpf_program *prog, struct bpf_insn *insns, int insns_cnt,
        load_attr.line_info_rec_size = prog->line_info_rec_size;
        load_attr.line_info_cnt = prog->line_info_cnt;
        load_attr.log_level = prog->log_level;
+       load_attr.prog_flags = prog->prog_flags;
        if (!load_attr.insns || !load_attr.insns_cnt)
                return -EINVAL;
 
@@ -3521,6 +3523,7 @@ int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr,
                                                      expected_attach_type);
 
                prog->log_level = attr->log_level;
+               prog->prog_flags = attr->prog_flags;
                if (!first_prog)
                        first_prog = prog;
        }
index c5ff00515ce7d606a1c68ba119cdc091a3731e00..5abc2375defd6f4fe1a47e647102d80e3f5d4074 100644 (file)
@@ -320,6 +320,7 @@ struct bpf_prog_load_attr {
        enum bpf_attach_type expected_attach_type;
        int ifindex;
        int log_level;
+       int prog_flags;
 };
 
 LIBBPF_API int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr,