Lines Matching defs:link

2855 		pr_debug("elf: section(%d) %s, size %ld, link %d, flags %lx, type=%d\n",
9140 int (*detach)(struct bpf_link *link);
9141 int (*destroy)(struct bpf_link *link);
9147 /* Replace link's underlying BPF program with the new one */
9148 int bpf_link__update_program(struct bpf_link *link, struct bpf_program *prog)
9150 return bpf_link_update(bpf_link__fd(link), bpf_program__fd(prog), NULL);
9155 * link, when destructed through bpf_link__destroy() call won't attempt to
9163 void bpf_link__disconnect(struct bpf_link *link)
9165 link->disconnected = true;
9168 int bpf_link__destroy(struct bpf_link *link)
9172 if (IS_ERR_OR_NULL(link))
9175 if (!link->disconnected && link->detach)
9176 err = link->detach(link);
9177 if (link->destroy)
9178 link->destroy(link);
9179 if (link->pin_path)
9180 free(link->pin_path);
9181 free(link);
9186 int bpf_link__fd(const struct bpf_link *link)
9188 return link->fd;
9191 const char *bpf_link__pin_path(const struct bpf_link *link)
9193 return link->pin_path;
9196 static int bpf_link__detach_fd(struct bpf_link *link)
9198 return close(link->fd);
9203 struct bpf_link *link;
9209 pr_warn("failed to open link at %s: %d\n", path, fd);
9213 link = calloc(1, sizeof(*link));
9214 if (!link) {
9218 link->detach = &bpf_link__detach_fd;
9219 link->fd = fd;
9221 link->pin_path = strdup(path);
9222 if (!link->pin_path) {
9223 bpf_link__destroy(link);
9227 return link;
9230 int bpf_link__detach(struct bpf_link *link)
9232 return bpf_link_detach(link->fd) ? -errno : 0;
9235 int bpf_link__pin(struct bpf_link *link, const char *path)
9239 if (link->pin_path)
9248 link->pin_path = strdup(path);
9249 if (!link->pin_path)
9252 if (bpf_obj_pin(link->fd, link->pin_path)) {
9254 zfree(&link->pin_path);
9258 pr_debug("link fd=%d: pinned at %s\n", link->fd, link->pin_path);
9262 int bpf_link__unpin(struct bpf_link *link)
9266 if (!link->pin_path)
9269 err = unlink(link->pin_path);
9273 pr_debug("link fd=%d: unpinned from %s\n", link->fd, link->pin_path);
9274 zfree(&link->pin_path);
9278 static int bpf_link__detach_perf_event(struct bpf_link *link)
9282 err = ioctl(link->fd, PERF_EVENT_IOC_DISABLE, 0);
9286 close(link->fd);
9294 struct bpf_link *link;
9309 link = calloc(1, sizeof(*link));
9310 if (!link)
9312 link->detach = &bpf_link__detach_perf_event;
9313 link->fd = pfd;
9317 free(link);
9327 free(link);
9332 return link;
9445 struct bpf_link *link;
9456 link = bpf_program__attach_perf_event(prog, pfd);
9457 if (IS_ERR(link)) {
9459 err = PTR_ERR(link);
9463 return link;
9465 return link;
9486 struct bpf_link *link;
9498 link = bpf_program__attach_perf_event(prog, pfd);
9499 if (IS_ERR(link)) {
9501 err = PTR_ERR(link);
9506 return link;
9508 return link;
9566 struct bpf_link *link;
9576 link = bpf_program__attach_perf_event(prog, pfd);
9577 if (IS_ERR(link)) {
9579 err = PTR_ERR(link);
9583 return link;
9585 return link;
9592 struct bpf_link *link;
9602 link = ERR_PTR(-EINVAL);
9608 link = bpf_program__attach_tracepoint(prog, tp_cat, tp_name);
9611 return link;
9618 struct bpf_link *link;
9627 link = calloc(1, sizeof(*link));
9628 if (!link)
9630 link->detach = &bpf_link__detach_fd;
9635 free(link);
9640 link->fd = pfd;
9641 return link;
9656 struct bpf_link *link;
9665 link = calloc(1, sizeof(*link));
9666 if (!link)
9668 link->detach = &bpf_link__detach_fd;
9673 free(link);
9678 link->fd = pfd;
9679 return (struct bpf_link *)link;
9718 struct bpf_link *link;
9727 link = calloc(1, sizeof(*link));
9728 if (!link)
9730 link->detach = &bpf_link__detach_fd;
9736 free(link);
9742 link->fd = link_fd;
9743 return link;
9802 struct bpf_link *link;
9818 link = calloc(1, sizeof(*link));
9819 if (!link)
9821 link->detach = &bpf_link__detach_fd;
9827 free(link);
9832 link->fd = link_fd;
9833 return link;
9847 static int bpf_link__detach_struct_ops(struct bpf_link *link)
9851 if (bpf_map_delete_elem(link->fd, &zero))
9860 struct bpf_link *link;
9867 link = calloc(1, sizeof(*link));
9868 if (!link)
9888 free(link);
9892 link->detach = bpf_link__detach_struct_ops;
9893 link->fd = map->fd;
9895 return link;
10907 struct bpf_link **link = s->progs[i].link;
10917 *link = sec_def->attach_fn(sec_def, prog);
10918 if (IS_ERR(*link)) {
10920 bpf_program__name(prog), PTR_ERR(*link));
10921 return PTR_ERR(*link);
10933 struct bpf_link **link = s->progs[i].link;
10935 bpf_link__destroy(*link);
10936 *link = NULL;