libbpf: add "prog_flags" to bpf_program/bpf_prog_load_attr/bpf_load_program_attr [Linux 5.3]

This Linux kernel change "libbpf: add “prog_flags” to bpf_program/bpf_prog_load_attr/bpf_load_program_attr" is included in the Linux 5.3 release. This change is authored by Jiong Wang <jiong.wang [at] netronome.com> on Fri May 24 23:25:19 2019 +0100. The commit for this change in Linux stable tree is 0465619 (patch).

libbpf: add "prog_flags" to bpf_program/bpf_prog_load_attr/bpf_load_program_attr

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>

There are 6 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 tools/lib/bpf/bpf.c    | 1 +
 tools/lib/bpf/bpf.h    | 1 +
 tools/lib/bpf/libbpf.c | 3 +++
 tools/lib/bpf/libbpf.h | 1 +
 4 files changed, 6 insertions(+)

diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
index c4a4808..0d4b4fe 100644
--- a/tools/lib/bpf/bpf.c
+++ b/tools/lib/bpf/bpf.c
@@ -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)
diff --git a/tools/lib/bpf/bpf.h b/tools/lib/bpf/bpf.h
index 9593fec..ff42ca0 100644
--- a/tools/lib/bpf/bpf.h
+++ b/tools/lib/bpf/bpf.h
@@ -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 */
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 197b574..ff14937 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -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 @@ static int bpf_object__collect_reloc(struct bpf_object *obj)
    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;
    }
diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h
index c5ff005..5abc237 100644
--- a/tools/lib/bpf/libbpf.h
+++ b/tools/lib/bpf/libbpf.h
@@ -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,

Leave a Reply

Your email address will not be published. Required fields are marked *