This allows consumers of libbpf to iterate trough the insns of a program without loading it first directly after the ELF parsing. Being able to do that is useful to create tooling that can show the structure of a BPF program using libbpf without having to parse the ELF separately. Usage: struct bpf_insn *insn; insn = bpf_program__insns(prog); Signed-off-by: Lorenzo Fontana <fontanalorenz@xxxxxxxxx> --- tools/lib/bpf/libbpf.c | 5 +++++ tools/lib/bpf/libbpf.h | 1 + 2 files changed, 6 insertions(+) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 1e04ce724240..67d51531f6b6 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -8866,6 +8866,11 @@ void *bpf_program__priv(const struct bpf_program *prog) return prog ? prog->priv : libbpf_err_ptr(-EINVAL); } +struct bpf_insn *bpf_program__insns(const struct bpf_program *prog) +{ + return prog ? prog->insns : libbpf_err_ptr(-EINVAL); +} + void bpf_program__set_ifindex(struct bpf_program *prog, __u32 ifindex) { prog->prog_ifindex = ifindex; diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index 6e61342ba56c..e4a1c98ae6d9 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -195,6 +195,7 @@ typedef void (*bpf_program_clear_priv_t)(struct bpf_program *, void *); LIBBPF_API int bpf_program__set_priv(struct bpf_program *prog, void *priv, bpf_program_clear_priv_t clear_priv); +LIBBPF_API struct bpf_insn *bpf_program__insns(const struct bpf_program *prog); LIBBPF_API void *bpf_program__priv(const struct bpf_program *prog); LIBBPF_API void bpf_program__set_ifindex(struct bpf_program *prog, __u32 ifindex); -- 2.32.0