diff options
author | Jiong Wang <jiong.wang@netronome.com> | 2019-05-24 18:25:19 -0400 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2019-05-24 21:58:37 -0400 |
commit | 046561981b948e07df096a8402f9efc80bc784d9 (patch) | |
tree | f98a6321e327d3bb2649b2f8854d7106778b9f03 | |
parent | d6c2308c742a655f4598364ab331959639aae166 (diff) |
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>
-rw-r--r-- | tools/lib/bpf/bpf.c | 1 | ||||
-rw-r--r-- | tools/lib/bpf/bpf.h | 1 | ||||
-rw-r--r-- | tools/lib/bpf/libbpf.c | 3 | ||||
-rw-r--r-- | tools/lib/bpf/libbpf.h | 1 |
4 files changed, 6 insertions, 0 deletions
diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c index c4a48086dc9a..0d4b4fe10a84 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, | |||
256 | if (load_attr->name) | 256 | if (load_attr->name) |
257 | memcpy(attr.prog_name, load_attr->name, | 257 | memcpy(attr.prog_name, load_attr->name, |
258 | min(strlen(load_attr->name), BPF_OBJ_NAME_LEN - 1)); | 258 | min(strlen(load_attr->name), BPF_OBJ_NAME_LEN - 1)); |
259 | attr.prog_flags = load_attr->prog_flags; | ||
259 | 260 | ||
260 | fd = sys_bpf_prog_load(&attr, sizeof(attr)); | 261 | fd = sys_bpf_prog_load(&attr, sizeof(attr)); |
261 | if (fd >= 0) | 262 | if (fd >= 0) |
diff --git a/tools/lib/bpf/bpf.h b/tools/lib/bpf/bpf.h index 9593fec75652..ff42ca043dc8 100644 --- a/tools/lib/bpf/bpf.h +++ b/tools/lib/bpf/bpf.h | |||
@@ -87,6 +87,7 @@ struct bpf_load_program_attr { | |||
87 | const void *line_info; | 87 | const void *line_info; |
88 | __u32 line_info_cnt; | 88 | __u32 line_info_cnt; |
89 | __u32 log_level; | 89 | __u32 log_level; |
90 | __u32 prog_flags; | ||
90 | }; | 91 | }; |
91 | 92 | ||
92 | /* Flags to direct loading requirements */ | 93 | /* Flags to direct loading requirements */ |
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 197b574406b3..ff149372b3c0 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c | |||
@@ -188,6 +188,7 @@ struct bpf_program { | |||
188 | void *line_info; | 188 | void *line_info; |
189 | __u32 line_info_rec_size; | 189 | __u32 line_info_rec_size; |
190 | __u32 line_info_cnt; | 190 | __u32 line_info_cnt; |
191 | __u32 prog_flags; | ||
191 | }; | 192 | }; |
192 | 193 | ||
193 | enum libbpf_map_type { | 194 | enum libbpf_map_type { |
@@ -2076,6 +2077,7 @@ load_program(struct bpf_program *prog, struct bpf_insn *insns, int insns_cnt, | |||
2076 | load_attr.line_info_rec_size = prog->line_info_rec_size; | 2077 | load_attr.line_info_rec_size = prog->line_info_rec_size; |
2077 | load_attr.line_info_cnt = prog->line_info_cnt; | 2078 | load_attr.line_info_cnt = prog->line_info_cnt; |
2078 | load_attr.log_level = prog->log_level; | 2079 | load_attr.log_level = prog->log_level; |
2080 | load_attr.prog_flags = prog->prog_flags; | ||
2079 | if (!load_attr.insns || !load_attr.insns_cnt) | 2081 | if (!load_attr.insns || !load_attr.insns_cnt) |
2080 | return -EINVAL; | 2082 | return -EINVAL; |
2081 | 2083 | ||
@@ -3521,6 +3523,7 @@ int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr, | |||
3521 | expected_attach_type); | 3523 | expected_attach_type); |
3522 | 3524 | ||
3523 | prog->log_level = attr->log_level; | 3525 | prog->log_level = attr->log_level; |
3526 | prog->prog_flags = attr->prog_flags; | ||
3524 | if (!first_prog) | 3527 | if (!first_prog) |
3525 | first_prog = prog; | 3528 | first_prog = prog; |
3526 | } | 3529 | } |
diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index c5ff00515ce7..5abc2375defd 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h | |||
@@ -320,6 +320,7 @@ struct bpf_prog_load_attr { | |||
320 | enum bpf_attach_type expected_attach_type; | 320 | enum bpf_attach_type expected_attach_type; |
321 | int ifindex; | 321 | int ifindex; |
322 | int log_level; | 322 | int log_level; |
323 | int prog_flags; | ||
323 | }; | 324 | }; |
324 | 325 | ||
325 | LIBBPF_API int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr, | 326 | LIBBPF_API int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr, |