Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752071AbdLAK0b (ORCPT ); Fri, 1 Dec 2017 05:26:31 -0500 Received: from mail-wm0-f68.google.com ([74.125.82.68]:45394 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751444AbdLAK03 (ORCPT ); Fri, 1 Dec 2017 05:26:29 -0500 X-Google-Smtp-Source: AGs4zMbVFlMZyQmsgpd6+awTg4eTLKGmoWUSZqVJPMu7t47vcW4HewtyLGXZvTvAPAOrWxeRAR3cmg== Subject: Re: [PATCH net-next 4/5] bpftool: implement cgdetach command To: Roman Gushchin , netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel-team@fb.com, ast@kernel.org, daniel@iogearbox.net, jakub.kicinski@netronome.com, kafai@fb.com References: <20171130134302.2840-1-guro@fb.com> <20171130134302.2840-5-guro@fb.com> From: Quentin Monnet Message-ID: <150c6e31-2fdb-3448-d434-773ebd24e351@netronome.com> Date: Fri, 1 Dec 2017 10:26:27 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: <20171130134302.2840-5-guro@fb.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2240 Lines: 86 2017-11-30 13:43 UTC+0000 ~ Roman Gushchin > Implement cgdetach command, which allows to detach the bpf > program from a cgroup. It takes program id and attach type > as arguments. > > Example: > $ ./bpftool cgdetach /sys/fs/cgroup/user.slice/ device 1 > > Signed-off-by: Roman Gushchin > Cc: Alexei Starovoitov > Cc: Daniel Borkmann > Cc: Jakub Kicinski > Cc: Martin KaFai Lau > --- > tools/bpf/bpftool/main.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 49 insertions(+), 1 deletion(-) > > diff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c > index 8eb3b9bf5bb2..77fcc1a0bd5d 100644 > --- a/tools/bpf/bpftool/main.c > +++ b/tools/bpf/bpftool/main.c […] > @@ -338,6 +341,51 @@ static int do_cgattach(int argc, char **argv) > return 0; > } > > +static int do_cgdetach(int argc, char **argv) > +{ > + int prog_fd, cgroup_fd; > + enum bpf_attach_type attach_type; > + > + if (argc < 3) { > + p_err("too few parameters for cgdetach\n"); > + return -1; > + } else if (argc > 3) { > + p_err("too many parameters for cgdetach\n"); > + return -1; > + } > + > + cgroup_fd = open(argv[0], O_RDONLY); > + if (cgroup_fd < 0) { > + p_err("can't open cgroup %s\n", argv[1]); > + return -1; > + } > + > + attach_type = parse_attach_type(argv[1]); > + if (attach_type == __MAX_BPF_ATTACH_TYPE) { > + close(cgroup_fd); > + p_err("Invalid attach type"); > + return -1; > + } > + > + prog_fd = bpf_prog_get_fd_by_id(atoi(argv[2])); > + if (prog_fd < 0) { > + p_err("invalid program id\n"); > + return -1; > + } > + > + if (bpf_prog_detach2(prog_fd, cgroup_fd, attach_type)) { > + close(prog_fd); > + close(cgroup_fd); > + p_err("Failed to attach program"); > + return -1; > + } > + > + close(prog_fd); > + close(cgroup_fd); Could you please make the function print a "null" string for JSON here? So that it does not break JSON for batched commands. Should be as simple as: jsonw_null(json_wtr); This is also valid for `do_cgattach()` in patch 3. Thanks! > + > + return 0; > +} > + > int main(int argc, char **argv) > { > static const struct option options[] = { >