Commit 2e49527e authored by Andrii Nakryiko's avatar Andrii Nakryiko Committed by Alexei Starovoitov
Browse files

libbpf: Add bpf_link detach APIs



Add low-level bpf_link_detach() API. Also add higher-level bpf_link__detach()
one.

Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Acked-by: default avatarSong Liu <songliubraving@fb.com>
Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/bpf/20200731182830.286260-3-andriin@fb.com
parent 73b11c2a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -117,6 +117,7 @@ enum bpf_cmd {
	BPF_LINK_GET_NEXT_ID,
	BPF_ENABLE_STATS,
	BPF_ITER_CREATE,
	BPF_LINK_DETACH,
};

enum bpf_map_type {
@@ -634,6 +635,10 @@ union bpf_attr {
		__u32		old_prog_fd;
	} link_update;

	struct {
		__u32		link_fd;
	} link_detach;

	struct { /* struct used by BPF_ENABLE_STATS command */
		__u32		type;
	} enable_stats;
+10 −0
Original line number Diff line number Diff line
@@ -603,6 +603,16 @@ int bpf_link_create(int prog_fd, int target_fd,
	return sys_bpf(BPF_LINK_CREATE, &attr, sizeof(attr));
}

int bpf_link_detach(int link_fd)
{
	union bpf_attr attr;

	memset(&attr, 0, sizeof(attr));
	attr.link_detach.link_fd = link_fd;

	return sys_bpf(BPF_LINK_DETACH, &attr, sizeof(attr));
}

int bpf_link_update(int link_fd, int new_prog_fd,
		    const struct bpf_link_update_opts *opts)
{
+2 −0
Original line number Diff line number Diff line
@@ -178,6 +178,8 @@ LIBBPF_API int bpf_link_create(int prog_fd, int target_fd,
			       enum bpf_attach_type attach_type,
			       const struct bpf_link_create_opts *opts);

LIBBPF_API int bpf_link_detach(int link_fd);

struct bpf_link_update_opts {
	size_t sz; /* size of this struct for forward/backward compatibility */
	__u32 flags;	   /* extra flags */
+5 −0
Original line number Diff line number Diff line
@@ -7748,6 +7748,11 @@ struct bpf_link *bpf_link__open(const char *path)
	return link;
}

int bpf_link__detach(struct bpf_link *link)
{
	return bpf_link_detach(link->fd) ? -errno : 0;
}

int bpf_link__pin(struct bpf_link *link, const char *path)
{
	int err;
+1 −0
Original line number Diff line number Diff line
@@ -229,6 +229,7 @@ LIBBPF_API int bpf_link__unpin(struct bpf_link *link);
LIBBPF_API int bpf_link__update_program(struct bpf_link *link,
					struct bpf_program *prog);
LIBBPF_API void bpf_link__disconnect(struct bpf_link *link);
LIBBPF_API int bpf_link__detach(struct bpf_link *link);
LIBBPF_API int bpf_link__destroy(struct bpf_link *link);

LIBBPF_API struct bpf_link *
Loading