Message ID | 20200729230520.693207-5-andriin@fb.com |
---|---|
State | Changes Requested |
Delegated to: | BPF Maintainers |
Headers | show |
Series | BPF link force-detach support | expand |
> On Jul 29, 2020, at 4:05 PM, Andrii Nakryiko <andriin@fb.com> wrote: > > Add ability to force-detach BPF link. Also add missing error message, if > specified link ID is wrong. > > Signed-off-by: Andrii Nakryiko <andriin@fb.com> Acked-by: Song Liu <songliubraving@fb.com> With two nitpicks below. [...] > static int link_parse_fd(int *argc, char ***argv) > { > + int fd; > + > if (is_prefix(**argv, "id")) { > unsigned int id; > char *endptr; > @@ -35,7 +37,10 @@ static int link_parse_fd(int *argc, char ***argv) > } > NEXT_ARGP(); > > - return bpf_link_get_fd_by_id(id); > + fd = bpf_link_get_fd_by_id(id); > + if (fd < 0) > + p_err("failed to get link with ID %d: %d", id, -errno); How about we print strerror(errno) to match the rest of link.c? [...] > +static int do_detach(int argc, char **argv) > +{ > + int err, fd; > + > + if (argc != 2) > + return BAD_ARG(); > + > + fd = link_parse_fd(&argc, &argv); > + if (fd < 0) > + return 1; > + > + err = bpf_link_detach(fd); > + if (err) > + err = -errno; > + close(fd); > + if (err) { > + p_err("failed link detach: %d", err); And strerror(err) here.
On Thu, Jul 30, 2020 at 2:02 PM Song Liu <songliubraving@fb.com> wrote: > > > > > On Jul 29, 2020, at 4:05 PM, Andrii Nakryiko <andriin@fb.com> wrote: > > > > Add ability to force-detach BPF link. Also add missing error message, if > > specified link ID is wrong. > > > > Signed-off-by: Andrii Nakryiko <andriin@fb.com> > > Acked-by: Song Liu <songliubraving@fb.com> > > With two nitpicks below. > > [...] > > > static int link_parse_fd(int *argc, char ***argv) > > { > > + int fd; > > + > > if (is_prefix(**argv, "id")) { > > unsigned int id; > > char *endptr; > > @@ -35,7 +37,10 @@ static int link_parse_fd(int *argc, char ***argv) > > } > > NEXT_ARGP(); > > > > - return bpf_link_get_fd_by_id(id); > > + fd = bpf_link_get_fd_by_id(id); > > + if (fd < 0) > > + p_err("failed to get link with ID %d: %d", id, -errno); > > How about we print strerror(errno) to match the rest of link.c? sure, will do, was lazy :) > > [...] > > > +static int do_detach(int argc, char **argv) > > +{ > > + int err, fd; > > + > > + if (argc != 2) > > + return BAD_ARG(); > > + > > + fd = link_parse_fd(&argc, &argv); > > + if (fd < 0) > > + return 1; > > + > > + err = bpf_link_detach(fd); > > + if (err) > > + err = -errno; > > + close(fd); > > + if (err) { > > + p_err("failed link detach: %d", err); > > And strerror(err) here. > >
diff --git a/tools/bpf/bpftool/link.c b/tools/bpf/bpftool/link.c index 326b8fdf0243..278befa34ed6 100644 --- a/tools/bpf/bpftool/link.c +++ b/tools/bpf/bpftool/link.c @@ -22,6 +22,8 @@ static const char * const link_type_name[] = { static int link_parse_fd(int *argc, char ***argv) { + int fd; + if (is_prefix(**argv, "id")) { unsigned int id; char *endptr; @@ -35,7 +37,10 @@ static int link_parse_fd(int *argc, char ***argv) } NEXT_ARGP(); - return bpf_link_get_fd_by_id(id); + fd = bpf_link_get_fd_by_id(id); + if (fd < 0) + p_err("failed to get link with ID %d: %d", id, -errno); + return fd; } else if (is_prefix(**argv, "pinned")) { char *path; @@ -316,6 +321,32 @@ static int do_pin(int argc, char **argv) return err; } +static int do_detach(int argc, char **argv) +{ + int err, fd; + + if (argc != 2) + return BAD_ARG(); + + fd = link_parse_fd(&argc, &argv); + if (fd < 0) + return 1; + + err = bpf_link_detach(fd); + if (err) + err = -errno; + close(fd); + if (err) { + p_err("failed link detach: %d", err); + return 1; + } + + if (json_output) + jsonw_null(json_wtr); + + return 0; +} + static int do_help(int argc, char **argv) { if (json_output) { @@ -326,6 +357,7 @@ static int do_help(int argc, char **argv) fprintf(stderr, "Usage: %1$s %2$s { show | list } [LINK]\n" " %1$s %2$s pin LINK FILE\n" + " %1$s %2$s detach LINK\n" " %1$s %2$s help\n" "\n" " " HELP_SPEC_LINK "\n" @@ -341,6 +373,7 @@ static const struct cmd cmds[] = { { "list", do_show }, { "help", do_help }, { "pin", do_pin }, + { "detach", do_detach }, { 0 } };
Add ability to force-detach BPF link. Also add missing error message, if specified link ID is wrong. Signed-off-by: Andrii Nakryiko <andriin@fb.com> --- tools/bpf/bpftool/link.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-)