On Sat, Apr 6, 2024 at 9:04 AM Yonghong Song <yonghong.song@xxxxxxxxx> wrote: > > Introduce a libbpf API function bpf_program__attach_sockmap() > which allow user to get a bpf_link for their corresponding programs. > > Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > Acked-by: Eduard Zingerman <eddyz87@xxxxxxxxx> > Reviewed-by: John Fastabend <john.fastabend@xxxxxxxxx> > Signed-off-by: Yonghong Song <yonghong.song@xxxxxxxxx> > --- > tools/lib/bpf/libbpf.c | 7 +++++++ > tools/lib/bpf/libbpf.h | 2 ++ > tools/lib/bpf/libbpf.map | 5 +++++ > tools/lib/bpf/libbpf_version.h | 2 +- > 4 files changed, 15 insertions(+), 1 deletion(-) > I feel like I mentioned this before, but maybe not. Besides there high-level attach APIs, please also add bpf_link_create() support, it should be very straightforward, just follow the pattern for other link types. You'll also get a conflict in libbpf.map given I just applied another libbpf patches (ring_buffer__consume_n). So please rebase. pw-bot: cr > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index b091154bc5b5..97eb6e5dd7c8 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -149,6 +149,7 @@ static const char * const link_type_name[] = { > [BPF_LINK_TYPE_TCX] = "tcx", > [BPF_LINK_TYPE_UPROBE_MULTI] = "uprobe_multi", > [BPF_LINK_TYPE_NETKIT] = "netkit", > + [BPF_LINK_TYPE_SOCKMAP] = "sockmap", > }; > > static const char * const map_type_name[] = { > @@ -12533,6 +12534,12 @@ bpf_program__attach_netns(const struct bpf_program *prog, int netns_fd) > return bpf_program_attach_fd(prog, netns_fd, "netns", NULL); > } > > +struct bpf_link * > +bpf_program__attach_sockmap(const struct bpf_program *prog, int map_fd) > +{ > + return bpf_program_attach_fd(prog, map_fd, "sockmap", NULL); > +} > + > struct bpf_link *bpf_program__attach_xdp(const struct bpf_program *prog, int ifindex) > { > /* target_fd/target_ifindex use the same field in LINK_CREATE */ > diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h > index f88ab50c0229..4c7ada03bf4f 100644 > --- a/tools/lib/bpf/libbpf.h > +++ b/tools/lib/bpf/libbpf.h > @@ -795,6 +795,8 @@ bpf_program__attach_cgroup(const struct bpf_program *prog, int cgroup_fd); > LIBBPF_API struct bpf_link * > bpf_program__attach_netns(const struct bpf_program *prog, int netns_fd); > LIBBPF_API struct bpf_link * > +bpf_program__attach_sockmap(const struct bpf_program *prog, int map_fd); > +LIBBPF_API struct bpf_link * > bpf_program__attach_xdp(const struct bpf_program *prog, int ifindex); > LIBBPF_API struct bpf_link * > bpf_program__attach_freplace(const struct bpf_program *prog, > diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map > index 51732ecb1385..2d0ca3e8ec18 100644 > --- a/tools/lib/bpf/libbpf.map > +++ b/tools/lib/bpf/libbpf.map > @@ -416,3 +416,8 @@ LIBBPF_1.4.0 { > btf__new_split; > btf_ext__raw_data; > } LIBBPF_1.3.0; > + > +LIBBPF_1.5.0 { > + global: > + bpf_program__attach_sockmap; > +} LIBBPF_1.4.0; > diff --git a/tools/lib/bpf/libbpf_version.h b/tools/lib/bpf/libbpf_version.h > index e783a47da815..d6e5eff967cb 100644 > --- a/tools/lib/bpf/libbpf_version.h > +++ b/tools/lib/bpf/libbpf_version.h > @@ -4,6 +4,6 @@ > #define __LIBBPF_VERSION_H > > #define LIBBPF_MAJOR_VERSION 1 > -#define LIBBPF_MINOR_VERSION 4 > +#define LIBBPF_MINOR_VERSION 5 > > #endif /* __LIBBPF_VERSION_H */ > -- > 2.43.0 >