From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753139AbdK3NoW (ORCPT ); Thu, 30 Nov 2017 08:44:22 -0500 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:37348 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752577AbdK3NoA (ORCPT ); Thu, 30 Nov 2017 08:44:00 -0500 From: Roman Gushchin To: CC: , , , , , , Subject: [PATCH net-next 5/5] bpftool: implement cglist command Date: Thu, 30 Nov 2017 13:43:02 +0000 Message-ID: <20171130134302.2840-6-guro@fb.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20171130134302.2840-1-guro@fb.com> References: <20171130134302.2840-1-guro@fb.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [2620:10d:c092:200::1:638c] X-ClientProxiedBy: VI1PR0602CA0010.eurprd06.prod.outlook.com (2603:10a6:800:bc::20) To CO1PR15MB1079.namprd15.prod.outlook.com (2a01:111:e400:7b66::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d1b2c9cd-48b8-4522-0815-08d537f85e10 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603286);SRVR:CO1PR15MB1079; X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;3:BD9O9aLqdzLwZf0B7Vrn3r4nHbHJPmFkvvLdECEe2N4i1EESZXpwM6+ebGzFp4WV0e/63B3X1J7+/Wr/EmMN9n2UWYEuJZ0rWGx9s8iZaXYNixSGNav+IPCPV+7Tqmh9FvsrUmeEs2fqgM4K+/tasTSQwjB6rM0pbpYraFyzDXEGEGj+GYXe0HSCa8Kq4XuHcs44vshFBfcO2zcG5ffaDSmdsPlEU0HgbpdyAS9lUJ4NzTB92JIV42zmDYlozT12;25:CoRyAmsvHjaozxGQNb6IJda6SCNASfBKg9rD4e7x4X6AY3PAYgRmm9qHjJzciuiHTlk3VTiC/p4GyISCKnDFZi3R5xr5XEOj3AT9g5WcK1R9QH2BH3p9sfx3zJD1KP7GHC0GAEkZuoNfwmCPbKo9IGnURwwU7IsqDzIDLHelKqqZSuSVSIn/ZUvNgZHx6jhpK1hgQNEj6QhCt44or+maf0OLWW7wl2CSXq4cBe+RcBR6Sb9R2oNawdDY7Nlcbm0u769mJFnHGyhN2H1IrH/FcNPoI+8SBAFF+awvScm8OjwuTrsKTrE2An4G3M49BYoH94yF0ZZCZ2QiEVtWuQ3BCg==;31:BRfpd6PvjwnGUf+8DIOr/tvpKlbkClcfgNE31Q6cBa69IjEJ4VPlBZYJoWQDOaSNUqBLh39UTcZL9GTZ3YSOuJQBkQp0oCYTYDgolROZRiuNEqdEZwsBXooZjxPVXHcAJz3iRhpLtgvqUeFTHIR74HUi5UOnhoSwALZv4g9Na006VuMVJQjxj8KE7SjnOyzkKsXhIi/xGIeGYQ63/11zL3TboKHp5rjsGbjXzCmEj4A= X-MS-TrafficTypeDiagnostic: CO1PR15MB1079: X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:UPemEeveOqKNZbYZ6d6i5rOAmsorgxzDISap7nznloR5hUUSYeth9WLQaPuNbSVCaMMACTTjAHMr4+aealWew7BcPyhvuqyLXCV3A04HF44CMEPSsLR9+b9pU1adHrwFUhrgmC/g9N2ux/98XcAFaPSpK5sFISnrXrhIS32ZSbfH8e3uXOOGddVCJWLRRCRczewirG8lQqTIqq+l4lKyM+kfBBvsWJukQKwoacS6xUsQLzCzMICXHVNVAveBFHjJaQR9Ps/IyhPrcxUqy76q4UcbC2hw8XicU+UcdF7A87rj3t1yeIjNlSyFcvgbbT+IvPJHcbKsBIMoxQvB99NSwv4QDRs1V4bpTnFht8cLQupXVwkEgBLbyw2spdqkQU9CM+DMboh5/vaqxAXETC9v4bWApISQtpqd6ZbFqpsy45Dzn3D5Ln/Eymu5ERI+JJcJH9Z2PY6qcVWckfR7/HnE/THMzuVEOumhtRGhNG2iuCwbwgl0YXXJHeGMAvbSS1Ab;4:Xvf5stbzRw+IhLaLBwPiYt/zurX+g6eETuCjEWmZAYgis8+cShCkEsnvTJUbhoDTs83mLLo0KRt5hZrqTjMjPtjmcWkjjoIX9xiEiLlEl5dD96nihdonKwLOxeKYkMMw116ACPBlVveKb9vFdRjdxGDQ8R+Pn+Ka801HcGvyH+xrXwwvFLpHuCpzQoxRozxoZN0OaNwZLtfvfgC3Qc4pZuiyQmypI3unoqoapl37LCCNeAXsXLOXScEth/8oogeZXHoEkvxaHrldZLg43/CFLXGh6kiuPeXYsVeWNFTSmpN27EchbIH/dlXQ4IbXBt5D X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(67672495146484); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(11241501159)(6040450)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93001095)(3231022)(6041248)(20161123562025)(20161123555025)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(201708071742011);SRVR:CO1PR15MB1079;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:CO1PR15MB1079; X-Forefront-PRVS: 05079D8470 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(376002)(346002)(366004)(199003)(189002)(68736007)(48376002)(575784001)(53416004)(86362001)(478600001)(189998001)(50466002)(52396003)(52116002)(39060400002)(53936002)(2906002)(50986010)(6116002)(81156014)(81166006)(51416003)(1076002)(8676002)(8936002)(76176010)(5890100001)(50226002)(97736004)(105586002)(2361001)(2351001)(5660300001)(6512007)(101416001)(7736002)(305945005)(6486002)(4326008)(6506006)(25786009)(106356001)(69596002)(6666003)(33646002)(2950100002)(6916009)(36756003)(47776003)(316002)(16586007)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:CO1PR15MB1079;H:castle.thefacebook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CO1PR15MB1079;23:1Gp7jHuFm137xygsDrj0wvqBbj5DoEMgNmQc5vtUr?= =?us-ascii?Q?R21ks/8pnBV/2hUSgjGfPU4vqZlxq4Px9LtUHDq9Sa5qCIlDa4uy8p0UzWBu?= =?us-ascii?Q?mwAVqhads5mTcqaYgcGmbCWkXzde8nw20u5jgrfnWjv9eKx9CF8JITG0iDgD?= =?us-ascii?Q?XISdmWDlIf09VGQX1YYsCXh6pkTHGUUau5AhJO2Rd7Frn6vkgDpRYCE4Fv01?= =?us-ascii?Q?3LvyAHU5oOD0y4RgwS41nYfNcGn9DrhqmSuc+DeYmH/qirxB8lIDnRqoiiB1?= =?us-ascii?Q?zU05QMmF/xHzuyEV1afL2///i33murmAgQb2J8ra/N1W0XgqKverSEzrXEYE?= =?us-ascii?Q?OiU7Nac01AhXt+jGJ04eFDJS3XI7VPWMvo0psUCowg+rXOh/4fFKsMt48tmZ?= =?us-ascii?Q?oeCvL4KP4mFTjCYVRKDVoB0pVzLYUdD1c1yHKRZ+0uEWjhzCgSbCaneWZwWO?= =?us-ascii?Q?y9i/Ykpkh0IOZz/7IAdOxqC8jb9f6CaBEQ3nyvXwc1KpWhuEGXDgG4V9uRMe?= =?us-ascii?Q?eGcC+Cvlt+WPbYbKZFJNEls/EZJKxCyLde0Sh551O8CP/nVjM4l3gIwUEIo2?= =?us-ascii?Q?Ff1Zz9Sy3yS6iGdOX27lEBgwBC3HN5miXgB5G+0ZXihmMazwTcQC88ZYAKDK?= =?us-ascii?Q?KRe8VKAPjjQNe2vrQ7iK8fJK5faHWxHphvSRgmuj1oD4RUqLaWHpyYYHMd56?= =?us-ascii?Q?nNhUIvyYxC648MC+fPeK7KwaMU/O81loDHoUnHsTK01TSng+mP+nphjkNyMb?= =?us-ascii?Q?hE6O2rpdzoO8Eh3FdHNSzG03zbcCwYZadO4jwLqolh6nEU2xNDUlkTCltrYP?= =?us-ascii?Q?n2nIrt1wRb/6UQ3PhpvpYr74A+krdwdlJxtSrVS/cHomKX8gpDV9Ywq1k0MO?= =?us-ascii?Q?B6WhjI0nAtRv94PxP6CrUitETph7ucM2r5JMnE+b/sePpNxfVhh+vMPaNIZQ?= =?us-ascii?Q?ucdISQLjLt0nDmK0qlKtO13Xdaf3eEa1YtW2sIZlbNe2brlra5hUZ/bGkvfP?= =?us-ascii?Q?d+1lWIlgezaLSaQ3C3lgSE+NZlBQl4xcP8G/d2eFA1mCU8hJmH5MdTV+SYMg?= =?us-ascii?Q?ASwpxW++7rNRA29MVi2ThOyrvXZHIO8dhAhrIgRlKPCtvaVgpQx5N+Ve0aXP?= =?us-ascii?Q?8325p3cd6NM6TJPSOJ3bxSz9cFTChvwOd5JYkYFskGDDwSUEBpPcihctZx6P?= =?us-ascii?Q?Nj3LpKVJQ4sJkyu0rc+eGUkZhThyCiht/bAyNPPM9Aol0zmxXsy2vysF/o1/?= =?us-ascii?Q?I1TRIoFhv1kzesncFA=3D?= X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;6:VQmZgS492B8YdvTPmOwdskD8GSBNy5ZuH2oP0x+1ChA6QX5iO0Y8Smoc9phijdw8fGou99BQ+PPJsfu8AWDF8gAMhfAVCWPvXDyl4TQjcxRJKUBxrKDFRG+Xnh1giyeZ+/LSitnkatVNsd4ENg23gQxZE5OZ8uWfuiKpIMGYzIzVWK/Aif1oSam/B2Od6DGD7027Fa8MuRdInLA/49YvSe78PWKj/Pk992Y7LdLjXL7QHXJ9dDuIiRc6IVW5kfyGDIURUME80qRVyuBpMrNwD+TjiugnHo98hSjje/h+wHPYn1WRxmuQu1y2ifYqy02eTJEzo/iSsMlXbxjp3ZKI4X613O4JpRyk2+h6H9UEF0Y=;5:NxYDZBsTbArXPShT5cLKUH8KrNsFXYoc15yqVyi7RgGSjS3n6hrTdA5SifRki3vAqCK/GjaM1a6c32aVmgVniyd4KdzNqf9eJrxMqnZ8i7Xx0Z/WexffaEXSJbp2rFcT9qIs9nB6OdjkbIObxWit9y8obDI7ChNO8drrxnvy0is=;24:laPCmf0TBGKCl4yACMJuToYrzpJ1CcyhgwXqbfzBZXHly1pOJWb1dR2hUDp/EsBKrrwX9+pAZfGvRMrzLKuk8GbpguwZcB2WrF4enxpfu9o=;7:XUo6nrpQMqIUyyDUQWm8JxYppB2LAZz7gvTrRw7Lg5etj9PYJwYJ61hRTcE93dRVfWnBvU1lbqbOM/OqUHLtUAlxfqqmlqbcYltNk0eUoNVr7QWEVLllW0IOxYCAisZhlAnT4KaTbCOolkguYclW97nYjDL8sSFGmMjyQ3umAOQih/X+5CK+xSTg8W1VEjF5oPJaeZqTm9es5CIvWOP4SsiWw9ZEW1EdNim6efCFoLku24ws7LxoswdMN2JmuMwR SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:dWXznGTXQ+K6Wi/QLlJVZ2vljA2u1jPEHNMDLiEhzK9k2wyWbKhS56zCsPyTb1Q3sMJcxbBzAix7d+OgBSvqBDOmhpcb/csQN4fb6tl1eN5J/XlmIat48kj5AQx+WoXKafQLmlQOd4wIr7KQ2lXBJUnrb9XSb6XELKIHpGuGXfE= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2017 13:43:39.2162 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d1b2c9cd-48b8-4522-0815-08d537f85e10 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR15MB1079 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-30_04:,, signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Implement cgattach command to list bpf progrrams attached to the given cgroup: Example: $ ./bpftool cgattach dev_cgroup.o /sys/fs/cgroup/user.slice/ device $ ./bpftool cglist /sys/fs/cgroup/user.slice/ ID AttachType Name 1 device bpf_prog1 Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Cc: Jakub Kicinski Cc: Martin KaFai Lau --- tools/bpf/bpftool/main.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c index 77fcc1a0bd5d..8a48f6a32adc 100644 --- a/tools/bpf/bpftool/main.c +++ b/tools/bpf/bpftool/main.c @@ -82,12 +82,13 @@ static int do_help(int argc, char **argv) " %s batch file FILE\n" " %s cgattach FILE CGROUP TYPE\n" " %s cgdetach CGROUP TYPE ID\n" + " %s cglist CGROUP TYPE\n" " %s version\n" "\n" " OBJECT := { prog | map }\n" " " HELP_SPEC_OPTIONS "\n" "", - bin_name, bin_name, bin_name, bin_name, bin_name); + bin_name, bin_name, bin_name, bin_name, bin_name, bin_name); return 0; } @@ -168,6 +169,7 @@ void fprint_hex(FILE *f, void *arg, unsigned int n, const char *sep) static int do_batch(int argc, char **argv); static int do_cgattach(int argc, char **argv); static int do_cgdetach(int argc, char **argv); +static int do_cglist(int argc, char **argv); static const struct cmd cmds[] = { { "help", do_help }, @@ -176,6 +178,7 @@ static const struct cmd cmds[] = { { "map", do_map }, { "cgattach", do_cgattach }, { "cgdetach", do_cgdetach }, + { "cglist", do_cglist }, { "version", do_version }, { 0 } }; @@ -386,6 +389,83 @@ static int do_cgdetach(int argc, char **argv) return 0; } +static int do_cglist(int argc, char **argv) +{ + enum bpf_attach_type type; + int prog_fd, cgroup_fd; + __u32 attach_flags; + __u32 prog_ids[1024] = {0}; + __u32 prog_cnt, iter; + int ret = -1; + struct bpf_prog_info info = {}; + __u32 info_len = sizeof(info); + + if (argc < 1) { + p_err("too few parameters for cglist\n"); + return -1; + } else if (argc > 1) { + p_err("too many parameters for cglist\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; + } + + if (json_output) + jsonw_start_array(json_wtr); + + for (type = 0; type < __MAX_BPF_ATTACH_TYPE; type++) { + prog_cnt = ARRAY_SIZE(prog_ids); + if (bpf_prog_query(cgroup_fd, type, 0, &attach_flags, prog_ids, + &prog_cnt)) + continue; + + ret = 0; + + if (prog_cnt == 0) + continue; + + if (!json_output) + printf("%-8s %-15s %-15s\n", "ID", "AttachType", + "Name"); + + for (iter = 0; iter < prog_cnt; iter++) { + prog_fd = bpf_prog_get_fd_by_id(prog_ids[iter]); + if (prog_fd < 0) + continue; + + if (bpf_obj_get_info_by_fd(prog_fd, &info, &info_len)) { + close(prog_fd); + continue; + } + + if (json_output) { + jsonw_start_object(json_wtr); + jsonw_uint_field(json_wtr, "id", info.id); + jsonw_string_field(json_wtr, "attach_type", + attach_type_strings[type]); + jsonw_string_field(json_wtr, "name", info.name); + jsonw_end_object(json_wtr); + } else { + printf("%-8u %-15s %-15s\n", info.id, + attach_type_strings[type], info.name); + } + + close(prog_fd); + } + } + + if (json_output) + jsonw_end_array(json_wtr); + + close(cgroup_fd); + + return ret; +} + int main(int argc, char **argv) { static const struct option options[] = { -- 2.14.3