libbpf: Add bpf_link detach APIs
Add low-level bpf_link_detach() API. Also add higher-level bpf_link__detach() one. Signed-off-by: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Song Liu <songliubraving@fb.com> Acked-by: John Fastabend <john.fastabend@gmail.com> Link: https://lore.kernel.org/bpf/20200731182830.286260-3-andriin@fb.com
This commit is contained in:
committed by
Alexei Starovoitov
parent
73b11c2ab0
commit
2e49527e52
@@ -117,6 +117,7 @@ enum bpf_cmd {
|
|||||||
BPF_LINK_GET_NEXT_ID,
|
BPF_LINK_GET_NEXT_ID,
|
||||||
BPF_ENABLE_STATS,
|
BPF_ENABLE_STATS,
|
||||||
BPF_ITER_CREATE,
|
BPF_ITER_CREATE,
|
||||||
|
BPF_LINK_DETACH,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum bpf_map_type {
|
enum bpf_map_type {
|
||||||
@@ -634,6 +635,10 @@ union bpf_attr {
|
|||||||
__u32 old_prog_fd;
|
__u32 old_prog_fd;
|
||||||
} link_update;
|
} link_update;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
__u32 link_fd;
|
||||||
|
} link_detach;
|
||||||
|
|
||||||
struct { /* struct used by BPF_ENABLE_STATS command */
|
struct { /* struct used by BPF_ENABLE_STATS command */
|
||||||
__u32 type;
|
__u32 type;
|
||||||
} enable_stats;
|
} enable_stats;
|
||||||
|
|||||||
@@ -603,6 +603,16 @@ int bpf_link_create(int prog_fd, int target_fd,
|
|||||||
return sys_bpf(BPF_LINK_CREATE, &attr, sizeof(attr));
|
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,
|
int bpf_link_update(int link_fd, int new_prog_fd,
|
||||||
const struct bpf_link_update_opts *opts)
|
const struct bpf_link_update_opts *opts)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -178,6 +178,8 @@ LIBBPF_API int bpf_link_create(int prog_fd, int target_fd,
|
|||||||
enum bpf_attach_type attach_type,
|
enum bpf_attach_type attach_type,
|
||||||
const struct bpf_link_create_opts *opts);
|
const struct bpf_link_create_opts *opts);
|
||||||
|
|
||||||
|
LIBBPF_API int bpf_link_detach(int link_fd);
|
||||||
|
|
||||||
struct bpf_link_update_opts {
|
struct bpf_link_update_opts {
|
||||||
size_t sz; /* size of this struct for forward/backward compatibility */
|
size_t sz; /* size of this struct for forward/backward compatibility */
|
||||||
__u32 flags; /* extra flags */
|
__u32 flags; /* extra flags */
|
||||||
|
|||||||
@@ -7748,6 +7748,11 @@ struct bpf_link *bpf_link__open(const char *path)
|
|||||||
return link;
|
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 bpf_link__pin(struct bpf_link *link, const char *path)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|||||||
@@ -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,
|
LIBBPF_API int bpf_link__update_program(struct bpf_link *link,
|
||||||
struct bpf_program *prog);
|
struct bpf_program *prog);
|
||||||
LIBBPF_API void bpf_link__disconnect(struct bpf_link *link);
|
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 int bpf_link__destroy(struct bpf_link *link);
|
||||||
|
|
||||||
LIBBPF_API struct bpf_link *
|
LIBBPF_API struct bpf_link *
|
||||||
|
|||||||
@@ -273,6 +273,8 @@ LIBBPF_0.0.9 {
|
|||||||
|
|
||||||
LIBBPF_0.1.0 {
|
LIBBPF_0.1.0 {
|
||||||
global:
|
global:
|
||||||
|
bpf_link__detach;
|
||||||
|
bpf_link_detach;
|
||||||
bpf_map__ifindex;
|
bpf_map__ifindex;
|
||||||
bpf_map__key_size;
|
bpf_map__key_size;
|
||||||
bpf_map__map_flags;
|
bpf_map__map_flags;
|
||||||
|
|||||||
Reference in New Issue
Block a user