On Wed, May 27, 2020 at 12:16 PM Jakub Sitnicki <jakub@xxxxxxxxxxxxxx> wrote: > > Add bpf_program__attach_nets(), which uses LINK_CREATE subcommand to create > an FD-based kernel bpf_link, for attach types tied to network namespace, > that is BPF_FLOW_DISSECTOR for the moment. > > Signed-off-by: Jakub Sitnicki <jakub@xxxxxxxxxxxxxx> > --- > tools/lib/bpf/libbpf.c | 20 ++++++++++++++++---- > tools/lib/bpf/libbpf.h | 2 ++ > tools/lib/bpf/libbpf.map | 1 + > 3 files changed, 19 insertions(+), 4 deletions(-) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index 5d60de6fd818..a49c1eb5db64 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -7894,8 +7894,8 @@ static struct bpf_link *attach_iter(const struct bpf_sec_def *sec, > return bpf_program__attach_iter(prog, NULL); > } > > -struct bpf_link * > -bpf_program__attach_cgroup(struct bpf_program *prog, int cgroup_fd) > +static struct bpf_link * > +bpf_program__attach_fd(struct bpf_program *prog, int target_fd) > { > enum bpf_attach_type attach_type; > char errmsg[STRERR_BUFSIZE]; > @@ -7915,11 +7915,11 @@ bpf_program__attach_cgroup(struct bpf_program *prog, int cgroup_fd) > link->detach = &bpf_link__detach_fd; > > attach_type = bpf_program__get_expected_attach_type(prog); > - link_fd = bpf_link_create(prog_fd, cgroup_fd, attach_type, NULL); > + link_fd = bpf_link_create(prog_fd, target_fd, attach_type, NULL); > if (link_fd < 0) { > link_fd = -errno; > free(link); > - pr_warn("program '%s': failed to attach to cgroup: %s\n", > + pr_warn("program '%s': failed to attach to cgroup/netns: %s\n", I understand the desire to save few lines of code, but it hurts error reporting. Now it's cgroup/netns, tomorrow cgroup/netns/lirc/whatever. If you want to generalize, let's preserve clarity of error message, please. > bpf_program__title(prog, false), > libbpf_strerror_r(link_fd, errmsg, sizeof(errmsg))); > return ERR_PTR(link_fd); > @@ -7928,6 +7928,18 @@ bpf_program__attach_cgroup(struct bpf_program *prog, int cgroup_fd) > return link; > } > > +struct bpf_link * > +bpf_program__attach_cgroup(struct bpf_program *prog, int cgroup_fd) > +{ > + return bpf_program__attach_fd(prog, cgroup_fd); > +} > + > +struct bpf_link * > +bpf_program__attach_netns(struct bpf_program *prog, int netns_fd) > +{ > + return bpf_program__attach_fd(prog, netns_fd); > +} > + > struct bpf_link * > bpf_program__attach_iter(struct bpf_program *prog, > const struct bpf_iter_attach_opts *opts) > diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h > index 1e2e399a5f2c..adf6fd9b6fe8 100644 > --- a/tools/lib/bpf/libbpf.h > +++ b/tools/lib/bpf/libbpf.h > @@ -253,6 +253,8 @@ LIBBPF_API struct bpf_link * > bpf_program__attach_lsm(struct bpf_program *prog); > LIBBPF_API struct bpf_link * > bpf_program__attach_cgroup(struct bpf_program *prog, int cgroup_fd); > +LIBBPF_API struct bpf_link * > +bpf_program__attach_netns(struct bpf_program *prog, int netns_fd); > > struct bpf_map; > > diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map > index 381a7342ecfc..7ad21ba1feb6 100644 > --- a/tools/lib/bpf/libbpf.map > +++ b/tools/lib/bpf/libbpf.map > @@ -263,4 +263,5 @@ LIBBPF_0.0.9 { > bpf_link_get_next_id; > bpf_program__attach_iter; > perf_buffer__consume; > + bpf_program__attach_netns; Please keep it alphabetical. > } LIBBPF_0.0.8; > -- > 2.25.4 >