From patchwork Fri Dec 8 14:52:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 846298 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="UMNjvlCT"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="KxYeFMT6"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ytb2d12mdz9sPm for ; Sat, 9 Dec 2017 01:53:45 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754103AbdLHOxm (ORCPT ); Fri, 8 Dec 2017 09:53:42 -0500 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:51884 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753760AbdLHOxi (ORCPT ); Fri, 8 Dec 2017 09:53:38 -0500 Received: from pps.filterd (m0089730.ppops.net [127.0.0.1]) by m0089730.ppops.net (8.16.0.21/8.16.0.21) with SMTP id vB8EnQBK021144; Fri, 8 Dec 2017 06:53:17 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=facebook; bh=QLgr8vshuuWRpcdWoeUchPPTwQ6lBYqu4Mk+QEmynpQ=; b=UMNjvlCTnDXMlKDbib+ba8RoBN95uphyygxbi9Sy5ZtOMNShrdgwCA9D+gY5L3Opg7fB HVJTnPyPdiHTSNuZtkSbUDD2Bc8VeiR1n5yGk6NwfK322tyRmZ1TvSsR+61TCCaMyWBj YETZQjf364VIlpb4MhP6jV0alpCy82cN2+w= Received: from mail.thefacebook.com ([199.201.64.23]) by m0089730.ppops.net with ESMTP id 2eqv9dr3ny-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Fri, 08 Dec 2017 06:53:16 -0800 Received: from NAM03-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.21) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 8 Dec 2017 06:53:15 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector1-fb-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=QLgr8vshuuWRpcdWoeUchPPTwQ6lBYqu4Mk+QEmynpQ=; b=KxYeFMT6K/U9cL5ZR2NlaZG5rFXb/jHqYHKpZBzeMKSYQZkaj8KeXrjMcJvKRvpkIkfBk/9cN/mRIT9vC8IBe8uBBBtSTGM0Hi392VxRTYxBrdtiYIqha6jU0HDRyEZRP6Q6KjFlsl5P3i0HMpz33qIyuXpCrmZiFoKp435tSJ8= Received: from castle.thefacebook.com (2620:10d:c092:180::1:b43a) by CO1PR15MB1078.namprd15.prod.outlook.com (2a01:111:e400:7b66::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.302.9; Fri, 8 Dec 2017 14:53:07 +0000 From: Roman Gushchin To: CC: , , , , , , , Quentin Monnet , David Ahern Subject: [PATCH v3 net-next 1/4] libbpf: add ability to guess program type based on section name Date: Fri, 8 Dec 2017 14:52:33 +0000 Message-ID: <20171208145236.12635-2-guro@fb.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20171208145236.12635-1-guro@fb.com> References: <20171208145236.12635-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c092:180::1:b43a] X-ClientProxiedBy: VI1PR0102CA0086.eurprd01.prod.exchangelabs.com (2603:10a6:803:15::27) To CO1PR15MB1078.namprd15.prod.outlook.com (2a01:111:e400:7b66::8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 380ea017-e41e-429d-5b5e-08d53e4b669f X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307); SRVR:CO1PR15MB1078; X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 3:bUord5enfNqtq6R9qMdm9DwnuxjEQlqZaMTwCJ3tx3gQUMiXSbeLqkPlSzH9MqiO6nFIMzsYqk4gc5yyxI5V1Te+SFqwRT5AhLxo90o+gh2jNfd3Txtg38EWemm6CN8jrshSISY9302yRLe0lv+CVfT6m3k2+Jf3URtRGq2zcV+sK/aD0Q6NIVRQGr+YcC8TVtoVg8UdobBlLwELE9nPAIHCK0xEUwjQDxaJEiQ+oVT4qu8crTVeJngASyKa1c2U; 25:kLxfeghu+EarT6nyi4jLrK2nkGfktrT8XgRpevb91epsBB+eZ+jfR8CDzvfxV63RWAATCzijBVJN4hd7IGKo/R428aF8CAvm6hFJ5wK7nT1goPZNNa7b8Fpw9M4kveAa2LD+HIFgVWh7pLHueksKglFiGsk679zzpJEcXzjVkfLmc24PDRreWmZTUgJ2JHsNV0F+y8MXHdHZfs1XkxVKkMFDI7yCaphuvoplIxIZQj3U2/i31NXayvnAn5FSM3J1KdK9yuL9qopYo+3Ya/gDxyKCED0AqCGUMP3L/TAL/ip6nyGonu9mmPIpWB2YbVXC2ZEV4FWgTN5TuzuymKNMcg==; 31:cpGbK3mJOQg32MEhPfqwJfvgOu1WbfJXTU/MKREtaocyEOrOqq4XEmsCkJmg1WH/w1MKiFzmOGRa5ATz5gw9upFCjLk41HW9A03Oe7swbdauCF7DbgKEjaZUpFaAi/NgkQSe4t2Pa8q/W1awatDoUbklmZH01vW7e/T4u6/eh+B5qUpao22mggiYvCvjf0ZgbB8ozvhDKI3GcLQNZrZMvBjBj7qKlbUNRMLXWLuw5dg= X-MS-TrafficTypeDiagnostic: CO1PR15MB1078: X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 20:6d3rB+WfNSncYmkfvQjigCKqifNSsu19a+UGdo6n41BLn8co02mOaq4XHnEfkgow08lB1kt4tFghHPStYtBZ8Ajc5mNFvG4+cn8Gvd7uznRDgb6K0T6uCubBwLWE2+mDjQitng449u5ZMufiKnVLubbJJAjrg9LjmziMN/vGP+9/j1Kvj8gA62TpFL3+q6h+UrZHr/Cd5t4JBAGmMmkcmIGZbV67r+s/UB7D0srxH1QuEzouueW4eRtLwPlPU9B5tspqsTuu27fvFVtU1P8/mPwcC1T5uckkYf0d9VI7+BWbaJ26kcx5RmjkjjdqXZmO9q9+BMHX3E9BiTZZtsuMpqxYZ1bvEGwrzNR9w9Q7QNMlcgb2MifgjUagPkQ5H0t4p9sHQYTrghbO58MO2Fi9JJoXru+OxL0kbsoGay0YTKDz8qUNAFAdUKyre1i0PHmy+bShB2wL6qIeqoFzhWyeppRt/XiCjf3IWcr0k1KTsjUVxx98isYSTZfxrHcrO2V2; 4:PsVFohH02tODvSEc5eSiqxXZOmHPSwmgBuDJ3UtE3T5E7DT5UZbFTM1mIRmdw395K/I9nQOfxhWSO+3owbtJavK87vqoTuhQMwSM5geY1GWLPFxQSgdsfZImEJIE/Xc7x0+Gj8B8rCgf8FfTeqndYUPu856rP50NbGUxJ94H21MqLKJCRyCNyVOY0tRaBQiJOzvVIyMrEfKQeJlUyd+Hx+Fn0sYsHG1ZEliMoHuGtBwK/hBFIVY6pZ8EmTFAsHQA6MX2fJdLOX0j+pEF5CjKBIDEJJ3tbU3Rwi5azrDNiBEOQDQY6uwWVBmybUS84B+E 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)(93006095)(93001095)(3002001)(10201501046)(3231022)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(20161123558100)(20161123560025)(20161123555025)(6072148)(201708071742011); SRVR:CO1PR15MB1078; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:CO1PR15MB1078; X-Forefront-PRVS: 0515208626 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(376002)(346002)(189003)(199004)(7736002)(68736007)(6116002)(86362001)(575784001)(1076002)(105586002)(48376002)(106356001)(33646002)(2351001)(50226002)(2361001)(305945005)(2906002)(53416004)(2950100002)(6666003)(8936002)(81166006)(50466002)(8676002)(6916009)(81156014)(5660300001)(52116002)(51416003)(69596002)(6506006)(478600001)(53936002)(52396003)(16586007)(316002)(6486002)(39060400002)(4326008)(36756003)(6512007)(76176011)(25786009)(47776003)(97736004)(54906003)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:CO1PR15MB1078; H:castle.thefacebook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 23:DCb7rGOpadv44+KVuiFzvtwLZnwxNeJXrWKDSn4WkxByhMVvt3LcRBhDOn1yjVzzv9M4Xsggl0jbPHpT4PmLfFcLxznHoyBFGH4JOJJ7flT7dcSkYzLNDl+NWRKO7lSrrvKBO3AybyvilSXVtuEfsBD24jSN06zol7Va0IJHeB68f+yKmeo8IjXGwXtEPVujhHHRV4SFmvME1qmMHEZf3LxbiMqLEgvnkdLY+dtdPQeaZtbgwkBxbptjb8Tv27kBLEcRZf2clGstf+qkuxCXovUi0cqNsfh0NK656v4SCBljenP8cOyxuXZNY+CN3fD0TmuVPRdHTib4fSAln5zFtqPijX2C52vGJt6yuAYGrLHxKN7xFo0zr/NZUIYu2ZnEIPHfsL/vFk5iuuIUwUtc9ElkBu/Cr3yRq9skMo2q48IEp58KxRQhk433J6D4O+qeSfZehM/wGri4zNoMBIYG0at/CGnvwNdHi2YLZoG50/OeBLt3GaOwVzYcKMhnYmv1CR5Xcp669p0Wg54M8FK6MFknI8IEAHipxCGB0Vcitb6oynGbYgdfEnib0JxtYK76JuPb34Hlq2yUDZ65RMLqDKCIAjRqH+UPa7q6Iy/U6hP7bmve3Ew/B7B15TcykCzt2RG5dsQJ/7r6+XxjZtnp32Cc+yBwBzrIRpKrf6UI1fSg7ykwPawhUQt2QOh2UeLv+ShvfwAti1sVWmE6jsmkKGDtzHZuOh9KW0b8wuI07V0AZkHj8ifxFp4RnruAiy9NewQCMVRISHMwvmObfXrrUPIKpdQ99/tIA5NNG0gqM0RHW6Nw3cmiz801razs8qUk2XVFqpUKBed/lOom78AUi8dbUL0w28rgxI9BQEWUyLb6V2txaP4aUWlKJXp927Ldo7mxmnCEB//In6ZjBwac/2HeXypK/rYumt6yOIKNekDHEU8bHwUE/dhyylNHj3DaAFNS68Y/oIoXhXdRasfyfXD2BG1mgKOWR3DL/yrQOiSViMhgApIOlsoKmi9C3FSbyL/n3e64jeFVvBFcd2dg4FjItxmwXGkm/bG1ORaqSjMGpFNzM90Ul2qsPLHqjpEhAkILU1Hhr+TAZjESsGNvTP0XYQ21DEmGxGD23Hd5G2HLBoH+6scWC+VON8tUYPi5cycFvE1EMDDMSDmCxpAjvA== X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 6:aXaqfML7peMCCZ7E7IOZXWOCBXdi5fhrBB5+daK6xJwCvZApcOOoK6yFvAj9Cvh2JsAqlfG4+FTgjvejftosSDzT73A0Zuho4VH+d5pQbL53VthzkFgXUhmb3kfrTI5+f+6W5PnWwipI6voLX6QdZjgH1+kvojbUUccDx/PmAj8p4UuSQjj46M7dvP8xVM94PoFl/lIAA2bIvJ6jTaEDkBKzpz2jtzuJH2z3u+fv8aYbiYGlcPYytn/g+sXKmNM+PNICK4x9QmHWAyI/O9Qn/D8ciB3BmBo8kagTHGORFu723Al/Cct5RDg6sM3a9mJAUufrVsKGSGgvVJIHvsWXXcziUWu9VPNvPmGbZK75xkk=; 5:hABSssqPUhZBcT7x1pZqbtqymjFT7vNABsLMTewJqCZgs4viECsxn8V0DUS4udxVndi1zYmpiysugfiG1SaXAReFAo9vSSLSry4OmEsQgpagoxx8FllAcmrXNj8SoHcSNvHieEUhYMIJd217x5DLVOE25kS/fZUoGYXx741lWZI=; 24:qUElCqD9L/BoHyaIuo5WsuXcsgIpYq64x1CGbmKfLOJTS8Kt35LlahvTwyEIKxqpzmhotOx0y8IK3QAiINmKLTY7wy6uNmLS74drMDpHwjM=; 7:ZlkIh9E37HQAXU6DYWikAacrs+aKwoWQIs/Npp98rIOSYljH7YOS0gejAOPO2qFIM2SqNoHH7B0CvYBWvuThJ6+tE5UXt1LuqtwJUD55YSm8XfxSmtMipzBhhoy6g9TJyaOmFzQOzWCMq/oyLRSXXYDADd9Xo4U11TBD+eAhZKR4B4JsjMC1Am5slEZhmooH/37bhmuBRH9wDVwL1e7llSU9sJiArKKTszqS6NoJJSbQjoPsBOEu4rlI/IlYAKfc SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 20:+4mC8WJ7U6XWYPFwrDXxlqyGnjm+xUfTskS/D6dXPS5rQJgxF9XwiOaPPlaEnKlVTbzJTzQ7rOFb3ShrLcAKOLoDxIgNCH2rW+ktKJvkS2xl28H5TBtowLhgeSlL6HCY36ciQO6io267kUU5AM7U/bQ0+NAWutIryx797jvGSms= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Dec 2017 14:53:07.4543 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 380ea017-e41e-429d-5b5e-08d53e4b669f X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR15MB1078 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-12-08_08:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The bpf_prog_load() function will guess program type if it's not specified explicitly. This functionality will be used to implement loading of different programs without asking a user to specify the program type. In first order it will be used by bpftool. Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Cc: Jakub Kicinski Cc: Martin KaFai Lau Cc: Quentin Monnet Cc: David Ahern --- tools/lib/bpf/libbpf.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 5aa45f89da93..205b7822fa0a 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -1721,6 +1721,45 @@ BPF_PROG_TYPE_FNS(tracepoint, BPF_PROG_TYPE_TRACEPOINT); BPF_PROG_TYPE_FNS(xdp, BPF_PROG_TYPE_XDP); BPF_PROG_TYPE_FNS(perf_event, BPF_PROG_TYPE_PERF_EVENT); +#define BPF_PROG_SEC(string, type) { string, sizeof(string), type } +static const struct { + const char *sec; + size_t len; + enum bpf_prog_type prog_type; +} section_names[] = { + BPF_PROG_SEC("socket", BPF_PROG_TYPE_SOCKET_FILTER), + BPF_PROG_SEC("kprobe/", BPF_PROG_TYPE_KPROBE), + BPF_PROG_SEC("kretprobe/", BPF_PROG_TYPE_KPROBE), + BPF_PROG_SEC("tracepoint/", BPF_PROG_TYPE_TRACEPOINT), + BPF_PROG_SEC("xdp", BPF_PROG_TYPE_XDP), + BPF_PROG_SEC("perf_event", BPF_PROG_TYPE_PERF_EVENT), + BPF_PROG_SEC("cgroup/skb", BPF_PROG_TYPE_CGROUP_SKB), + BPF_PROG_SEC("cgroup/sock", BPF_PROG_TYPE_CGROUP_SOCK), + BPF_PROG_SEC("cgroup/dev", BPF_PROG_TYPE_CGROUP_DEVICE), + BPF_PROG_SEC("sockops", BPF_PROG_TYPE_SOCK_OPS), + BPF_PROG_SEC("sk_skb", BPF_PROG_TYPE_SK_SKB), +}; +#undef BPF_PROG_SEC + +static enum bpf_prog_type bpf_program__guess_type(struct bpf_program *prog) +{ + int i; + + if (!prog->section_name) + goto err; + + for (i = 0; i < ARRAY_SIZE(section_names); i++) + if (strncmp(prog->section_name, section_names[i].sec, + section_names[i].len) == 0) + return section_names[i].prog_type; + +err: + pr_warning("failed to guess program type based on section name %s\n", + prog->section_name); + + return BPF_PROG_TYPE_UNSPEC; +} + int bpf_map__fd(struct bpf_map *map) { return map ? map->fd : -EINVAL; @@ -1832,6 +1871,18 @@ int bpf_prog_load(const char *file, enum bpf_prog_type type, return -ENOENT; } + /* + * If type is not specified, try to guess it based on + * section name. + */ + if (type == BPF_PROG_TYPE_UNSPEC) { + type = bpf_program__guess_type(prog); + if (type == BPF_PROG_TYPE_UNSPEC) { + bpf_object__close(obj); + return -EINVAL; + } + } + bpf_program__set_type(prog, type); err = bpf_object__load(obj); if (err) { From patchwork Fri Dec 8 14:52:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 846301 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="BbxFVEx/"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="eaWRFC+W"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ytb4G35BBz9sPm for ; Sat, 9 Dec 2017 01:55:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754137AbdLHOx4 (ORCPT ); Fri, 8 Dec 2017 09:53:56 -0500 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:48698 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754130AbdLHOxs (ORCPT ); Fri, 8 Dec 2017 09:53:48 -0500 Received: from pps.filterd (m0044010.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id vB8EoH3a008350; Fri, 8 Dec 2017 06:53:30 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=facebook; bh=wl6vjurJlNB5D00zYmtSGe6h26R0nmZcSuQKRK4gYUY=; b=BbxFVEx/iNM96lHYcw2y0M3+b9wiK9HooufspIKvskVfurdzDMLmRS9ft9100H/GIWI1 l7pSUAsWQiiUCixrGApWXa51zklanC4msqFvkx9Zh7ktdc+kvpxbhxi6uKnUrAVbOgdz CxeR9ott5WjkGSfrrH3YiLEMWqnAI4epNfg= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2equ61g9hm-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Fri, 08 Dec 2017 06:53:29 -0800 Received: from NAM03-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.22) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 8 Dec 2017 06:53:28 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector1-fb-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=wl6vjurJlNB5D00zYmtSGe6h26R0nmZcSuQKRK4gYUY=; b=eaWRFC+WDsaowlXIQpon1AoIJK3iUtNm2ADzxriYN7n+fPAMeKoBdTALlbIstVrgIZ5s/FXt1qi9OTG4txteNc68IBIby1WzlSkrwH2Ur9p6buZMm8jRvnuypUYaDSzlf5RzDVe1qeLua9mC76walaujhyj3w0O3dMgG1ZZkvmU= Received: from castle.thefacebook.com (2620:10d:c092:180::1:b43a) by CO1PR15MB1078.namprd15.prod.outlook.com (2a01:111:e400:7b66::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.302.9; Fri, 8 Dec 2017 14:53:11 +0000 From: Roman Gushchin To: CC: , , , , , , , Quentin Monnet , David Ahern Subject: [PATCH v3 net-next 2/4] libbpf: prefer global symbols as bpf program name source Date: Fri, 8 Dec 2017 14:52:34 +0000 Message-ID: <20171208145236.12635-3-guro@fb.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20171208145236.12635-1-guro@fb.com> References: <20171208145236.12635-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c092:180::1:b43a] X-ClientProxiedBy: VI1PR0102CA0086.eurprd01.prod.exchangelabs.com (2603:10a6:803:15::27) To CO1PR15MB1078.namprd15.prod.outlook.com (2a01:111:e400:7b66::8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 96d503cf-5c14-4356-066a-08d53e4b692f X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307); SRVR:CO1PR15MB1078; X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 3:sWaMgUk8NOICNPEgdR2/nAUjw695pQB5Uyo6HsS8UlDjuw5/DlS76Ug4MQu6dV7FdsQW0FGWoBVJAJ1V+wghUmKudeJLnxjCoT+kX0MW2uUm3oG0wD736+JY3HcC9+2uAr2HlAgMf+nid0IjpaAEx3grddRrhrJyuj41XkY9udTxcirfSE0K0ZG/jJ+DUcVJFEupx+eAygKFCp/lkXfqTtcGbNjCi5RW7AeHNEb08MAKRpALSsFBC9cNaqj2wwZ6; 25:sWA7St01ZGrbYcOQVOcbcCfwdHPJgHJwLH3Hee7Z74IRP5j5QwqpyHS6Of1NyMGug8Avsyj3ifr3C4C//FRKNhlnR5x8CnzmiPPQQKIuBjbjXGtpqRZ0smKEcdhRueaG4h4HDLmlSUVTwbVszTUInMVsIzv6daVNilWaBPOrZmultniGfFNuFvnHbuKD1wN19Q3FB3mtCPtHv74oeltO41iJEC+YelGBKbvTn/JHt1UqBHqokwTES7rzLdKZkrHYebA2RkxmNNYZq/WY/q2u20Ps3O8dSPJ4MXTC0ZOtZ9WFXO6r2O/oJ8u7Xykt2b1sSrOx9xnlp3AWemRrmVlvgg==; 31:mJ7olN4Saj6E9bepxRn+0Nn5HAdG58K13kdbrtjYu+KWbLr480BhZSne6p8LET34Y2LjYE0/p0hW3g+3n5+APyX90lt6V/GCJLR4jO4I4emxsqxZl8fPQ3g3oDd5VeJKu62qPZ8KI4hb1SD+b/pP61xaAQTxGLtJGokmWI5zgntyD2+lKzPgm4ZuDDvbn0d6Q4RhI+gHIci1ZV+s3gRe3b+qtbR/TwEHChGCcXHnJp4= X-MS-TrafficTypeDiagnostic: CO1PR15MB1078: X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 20:u50lSgd49MQ+1Aj5eHROoS4xRptXMxJOjDJRHzRstWaHe2yaiBRHqc1KNk7ZOEOHVkJE6HY8r9eUPnZHeETpPO7GZgLvI0QIqAeeFAc7NXfY79gux49WON3Cn10Z2ghVep/nfbCJrHe7+G/lplj0wkL3RqjIl8hqMX5WXrnRIVDDhK0Be04n6vl8QsR2PMIym+f3AMMOH4g0DmNRmdgQL4KvlwIoSquUWxD7mGASQGyHevy/2MiyiYWt8RBWaLTpUWPUlxDcd9NZQdiFkyHrmEe/io2+g26LdWiQ29HxBj1Emoy9BzxjDM1Glhida5cGX9sm+VfcgHDf6FcJJ/C3Fo7q0hRlFWKCnUfx+GP9t6vnCmd3MiXlwtBNBcXijiSRT95jCVuZ5unDz89NE9pR4Yyg+QQX7EnH/E3cp5rHPOPAdwRknu0oi1Z1r9xSIAUzbGZ1qL+rzI8zqMdcJ7NH70+ZI1equRWUO7fypBpueBEI3DERCNoM8c+Ow6yNDz6v; 4:LKoHFjgD16nI5DhZFi/4PIJIQxAYgjCr0R9u7ZfkvyDuDiXIXyk5ZKpwy5AfVpr2YYenPfQWNEDVk8GI2lNAAIZTXunfXsWmmFqUYLaLml8u++tqhzp7ugs0j1hfF6f6+entz7T6zVkhQYItxTnsuwWyDOQ22v9ti2QoDPXkpTuAOJ4NSyXqHmUwWdVOLcqwOVxSEbTqNTD8DTslxgqQBLkd1IQWTcw/O6eOteMPvaQIzeIgmGOt5Sq/q5mcXYuP1auwQZxWRcObVkfYA/TMzkoC6R8BpSzbqL9Zf9fNgSM8du8+ZwHJQeoqvBE0bVEk 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)(93006095)(93001095)(3002001)(10201501046)(3231022)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(20161123558100)(20161123560025)(20161123555025)(6072148)(201708071742011); SRVR:CO1PR15MB1078; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:CO1PR15MB1078; X-Forefront-PRVS: 0515208626 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(376002)(346002)(189003)(199004)(7736002)(68736007)(6116002)(86362001)(575784001)(1076002)(105586002)(48376002)(106356001)(33646002)(2351001)(50226002)(2361001)(305945005)(2906002)(53416004)(2950100002)(6666003)(8936002)(81166006)(50466002)(8676002)(6916009)(81156014)(5660300001)(52116002)(51416003)(69596002)(6506006)(478600001)(53936002)(52396003)(16586007)(316002)(6486002)(39060400002)(4326008)(36756003)(6512007)(76176011)(25786009)(47776003)(97736004)(54906003)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:CO1PR15MB1078; H:castle.thefacebook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 23:XoWIgE23r5x1H8u3gXsrLoDTcAF7/KJtW5iVgPt5y/aH39YfIi5ByTBVJsQ3urGzTI6JwRAxCGja45+UZk0ZsVn9TD5pGeNXMGDVm6oyuWt82wp9g4v8DPUx9rsqvGB4H+aulAD8a7z+uYv1PwyxteVI6GLvB8fxjrjd27e4YcXYHzfi2uAMY0MSl82mWXPgExPV7D4twNshNokysRoPkanGCpNC2+tpgguxQmL/TKp4mqoNC2CkSkg53HLbRV6kx8xTsgCSxTA3k5WiIGXQh0UP+6Wpe+QhLgyws+yrjZh4VpiT7NVnW4NAktDRf6IZcV5dcV3+4Ni5v4+7qeNWs8GjZfe9TT3Q37voI8wFk/+HLxc9HGJWCamrhmgMkp/1y0fQdCD8bDhpwU3H6YwAKcjxB11xdvW8eI14Jm/tvTB20yRxjeUUuiel17DE3l0Eplw0Jsm1XYr7kWy3uNRKymLmOeCwh0h4EYtOqW1XEp1FuM6F73zOgBekDxnc9LPhlWpfaB8uyBA245wk+Hh4g095CYMByqE9bg48Vw7x4Y6BeuO+44bIan6ug7GOU1coKm/uQbVvTP6CQmISi1/q/6+CLGSh75lXTD5gEF1z9shoR2XOEf5RS79TEpbonX8Uh//G7carX+mYxDZdEbmL4azmn8A0VfPS8dj7DX5l9mhwB9hc5XDCtomRMWVsponvI0Bj0Vg0apFun3oiGG4Q2VGFsiydfmNw0nAWUAzKThqoyivy7x59QOpsvSwub10Ev1PEQRXjOpVL1I9EEaWB0/TjgOpDaXn6R4SU1MrjNcXmcD0lxKKWYw/e5NG9Qysye8BS1P9zgKmAIZnHj2KGH801+3SLgUcD3bMAUqACsAqM7J0JIPi9+kiyGAeJ/IEsdVOgpnczcyzEkawDfi6+zdrg88XMUTLuAHGpJTmPVddQiHpiSieKUsszXwtV4wU/a3VZgVqYRQ+4NXHrdwb9lEnpsTdRBGHD//0dBPNJQYB6Zp8ezvo0AkEDuDnB2JMmV5bi3I39tT/wBsARL1V1LNVnhrrAAB/FoJa3dy4SBSzRUhZNCVb1OrwLqV26GDNor5y4+xMXJBXk2LisAfSphcQaSWsVtDiPkE+XR2A8BVPzstbUTuNo7y0F7mkANqDcCeoOZ+2h/MTf2BJuV8Xw3A== X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 6:JZMmOl0JcXahXhG7Vl9Ka14yoIAexuC6IhVPbVPjhelVrhw45rEEbwwpMiQt7fcnrRFQftB0S95+ANrY20T1HW2DfhbUeHX/hZmAekNRmPVgVMcuUPFinbQ3NoaUdJXqnujUN76xw2biCcRzAyPwR/wCIL6BVfwYEo4RiofjIuXvTTkyTfTBPD/h+jXmyHMABlPcluKhXzGGQ5ITlZtQviiZBJGl8/9/tLPJzivBZVpSpQb9ucilKA6gto5mEvAO2r6RisZJ/JnsfcaoLjVMvfAz6GUvjLIexd7VwKdqVupRRR5D2HCHWe9euGHv1d1PVCqvmNXc+UQjsNfrDGVct5N0AFcRNKXLj2lD9t4XrVo=; 5:AWSF4uDqIvP6GjSntdDWho2TSU1fnxgeyyGN2JolMU22hhju1gm6jTX83tdztkTEDyaCUCAJGdIFZ2kEDCHvnABUE3EtGH7wpj34Y+IURAXSnyTaZNttxvNAO0Y2qx/tfIEvKkp9kEK7q61LRUCWvQCP6OlT6SI6W6vbmmUSwiw=; 24:X4+cinBBmUdt/5Q+XurUZDaZsxB7IiyMuGFLuYZ/9cLPGyLxuf94O6NsAc+bZfbjTgV8hLH7yV3DF1MWwqnsHFEYsAoj3GEUNPoVJh0OYUY=; 7:12jheQp3V2JRc+Xq4aImW8IlnqKdqggzVl+9nbHusLQHMtOhsQ8RC/W37hiBS3aXTroK8jx1KzuB5z9rnK2AMlX79ZPsI7Tk04ewDM7acIoQLn2trmCci+IO32ngmW21AKoJYenJwBF5JcIHBR2izWVgykDbrPzha1+G+kWzT9edOfvYBAfynel8KqHBxKnLHMOl3VuNN25o+Nv/weODfdLqLsj4ihIiavQM78FgcBNxkD/kyxMvbbC8yJtKa6Jw SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 20:wTUMyp/JcchgsZlJpOiNuf8O3waohmqzKv+Db2dgppgc1XLBIndG7uU7j4v1bhF5SkTh2/tm1XSJgjxz8Fu/63E13mWtD0qZMmxJBEub0D9jZf46yWWm7TYc3ofg1CZOKHwpgOQzvPSTQBaiOW2h/E+bAfhYL7n4U0Q3FllyrC0= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Dec 2017 14:53:11.7201 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 96d503cf-5c14-4356-066a-08d53e4b692f X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR15MB1078 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-12-08_08:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Libbpf picks the name of the first symbol in the corresponding elf section to use as a program name. But without taking symbol's scope into account it may end's up with some local label as a program name. E.g.: $ bpftool prog 1: type 15 name LBB0_10 tag 0390a5136ba23f5c loaded_at Dec 07/17:22 uid 0 xlated 456B not jited memlock 4096B Fix this by preferring global symbols as program name. For instance: $ bpftool prog 1: type 15 name bpf_prog1 tag 0390a5136ba23f5c loaded_at Dec 07/17:26 uid 0 xlated 456B not jited memlock 4096B Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Cc: Jakub Kicinski Cc: Martin KaFai Lau Cc: Quentin Monnet Cc: David Ahern --- tools/lib/bpf/libbpf.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 205b7822fa0a..65d0d0aff4fa 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -387,6 +387,8 @@ bpf_object__init_prog_names(struct bpf_object *obj) continue; if (sym.st_shndx != prog->idx) continue; + if (GELF_ST_BIND(sym.st_info) != STB_GLOBAL) + continue; name = elf_strptr(obj->efile.elf, obj->efile.strtabidx, From patchwork Fri Dec 8 14:52:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 846300 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="Z+Pju6QX"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="FhgEAvGo"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ytb3y0dG7z9sPm for ; Sat, 9 Dec 2017 01:54:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753953AbdLHOyE (ORCPT ); Fri, 8 Dec 2017 09:54:04 -0500 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:48702 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754134AbdLHOxs (ORCPT ); Fri, 8 Dec 2017 09:53:48 -0500 Received: from pps.filterd (m0044010.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id vB8EoH3b008350; Fri, 8 Dec 2017 06:53:30 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=facebook; bh=+azz8Th1ZYWxLvf/z2EubR/l5fQTqyKqc98xv9YXMc0=; b=Z+Pju6QX3SWE3VrLIVBU4YAQFONDGBB+DvnwWVzW5yl9RYX4UYXblQnAv54HowPzWQ7G ATtvx6KAKqmNtp2DR1V/LdohQJPqHFs0YSfqIQMRru5Rdzl8pE9YNbEE0Igi+cNsi4BQ 98owxIugZEWYF9/Fki5g6oOWdt/Tjp9xfOo= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2equ61g9hm-2 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Fri, 08 Dec 2017 06:53:30 -0800 Received: from NAM03-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.22) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 8 Dec 2017 06:53:28 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector1-fb-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=+azz8Th1ZYWxLvf/z2EubR/l5fQTqyKqc98xv9YXMc0=; b=FhgEAvGojx0PrJR3z1a6cKFY4lF8sk2t9sOfEopZhEA+gqCJCQueB5Z8Fnf8kskuRq3KQb0KM51H0IzpnqrI2b475+4QwghImmDYTpuiWTLRZ94meHOvbZyQappnxrasvMEBYC7Ole6hTRiZ86NsLRPgg3YMjzknURUN178z5w8= Received: from castle.thefacebook.com (2620:10d:c092:180::1:b43a) by CO1PR15MB1078.namprd15.prod.outlook.com (2a01:111:e400:7b66::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.302.9; Fri, 8 Dec 2017 14:53:15 +0000 From: Roman Gushchin To: CC: , , , , , , , Quentin Monnet , David Ahern Subject: [PATCH v3 net-next 3/4] bpftool: implement prog load command Date: Fri, 8 Dec 2017 14:52:35 +0000 Message-ID: <20171208145236.12635-4-guro@fb.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20171208145236.12635-1-guro@fb.com> References: <20171208145236.12635-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c092:180::1:b43a] X-ClientProxiedBy: VI1PR0102CA0086.eurprd01.prod.exchangelabs.com (2603:10a6:803:15::27) To CO1PR15MB1078.namprd15.prod.outlook.com (2a01:111:e400:7b66::8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d1dc887a-a044-49ce-b3ec-08d53e4b6b80 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307); SRVR:CO1PR15MB1078; X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 3:0VWH3wXU26wbrhh+dSOgo6ZiwJVAuJVoChTnqQMePyrXYMMJlxZaSjO0f/h84HLsa8PpZp+IvRQWpYVBa91Pil8JHQRdMvJN3ZCc+3ZFv/yW4FjQSf+vTW3kBbVdkbtDFRIg5bs1/Q99FY+I5gQKXD1Fhy+AWBM53X+ARW7+yDbZARkbGKPTzYheKUfHjX6uVm8nG8vVvgsEOcQcAPNHulPI3ARlf+Q1urda9E0k7OUrMNHufQZRukXghYW3HGrO; 25:LDxjEssc5nVEcno5s5XSMs+yRYEu9rreTk3NFlqIiKAm1eEvevyRfNusFz/PMnQiCAicLWt+CROm8v0c2DwElsKm6wOa7qe5MOOZ+tIm0pyojz/GLzzc2CLQ+HiqZyYliqNBdQpYjTIWTQzAvEdqXZmrEdLVZDKMDj9UIEH0mTZNBbDj+0xPsM+FNqRGsIC4tmuqVt97rGfkqkVwNRmx/lQgMiDuIVH+Q0C7xk8tCN31j8oFvheehopLd7zlVXeJEP0DkWDExS9fGi+HlfjcUy82GQPXp1GOzPIKXmIMIyb/IWrBXyl4JKmE/dNVhZVUJ7Q6ALYtveccVy0X9JLypg==; 31:uyKsNerd+V3muJ1ndz+26njjdq6TwdLJgiYs3dq7dMbCxxBvMzckh9ZKH8AC2zZ6pN4yqRUFFfeUC4ydZ3BfsXN9sclE/S1ndjaQV+d3VEXBSfpjtXDFE7vzYU+9RaPXDMQqX3J3tAsj5hFgusBaBjdmLIVWq+cB35BErw210Io26vmxrMM2YADftphE8/cIwdguk8se+NnASb9jdcSl6qZJzlOkZkZebenVc9xD85w= X-MS-TrafficTypeDiagnostic: CO1PR15MB1078: X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 20:+2osSkmIFcjUd39lPvhRpKTRdD53h5oCCp0ffkuwKcxnA3X2Jd2MOeVr7wS6By8fiJDcZjRhs4B8OLHybMEfKKgz7BEDm+vYO0rIuC7kJcymDPjpx0mekJAiwnOjbpOZ400XMXBcV+m9br36C/lqGOGh38n912MietE8DJGttBdsQN4XI4R5uzOE4lCF8g9FoHq73sdvU2XZ7/cPgG8lDoUXWufvi87kx86zXQQPBP7lYDC4in4RD12qiI5cva0h9V+hHt7okIU55/CHG1ioEKrMrmf85kOKPAAzrPU50LfMzV6cVkCmJlgwTanGotsUmC6kSscb7/saa3VZk05Ti3rpkJ0hUp2S4ufYdbilJWfIA0GywbxDyz/i13KTxGyQBmHQnc4jfRdsOO8oIgLqmBuAdp/KZrxiuonjsk9Ij4gFcyY81pOqkKvF8DD72th3oCi/undSnwQ/QQrH2mClMGhbzWMdN31w69lI3Qtir5Vu4dSJ9TPX6VPCbM1NuMzE; 4:Ah7uu2OHnwSJKSVm1pPXgETupEop2rxjywG4H2ohJ2NefmQ9qyoJwRTAgW1iPimgxN8ENr4Aw/7uODH/IQvFAqk2U7DbR52hhSMIz1bafbgfVHT3abflfVJSM2csIRODJddT9cLnlXK3RBdmVxDAhVrW5MIaGEK5CI1qcFNyHoUHX3nu+s4DwKBEcRzmabhG20dQYZPApAdwJmAWt5nkr16BDl3Nfu4Qda+BTq2oJZpxxE2qR0H+/DRKgqZqSAoAqORmMnv5erkepmxxKD1mds+jTl2pSzCOn+UdhBnHxgtdlHlHToIax/iB2V6NCBt6 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)(93006095)(93001095)(3002001)(10201501046)(3231022)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(20161123558100)(20161123560025)(20161123555025)(6072148)(201708071742011); SRVR:CO1PR15MB1078; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:CO1PR15MB1078; X-Forefront-PRVS: 0515208626 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(376002)(346002)(189003)(199004)(7736002)(68736007)(6116002)(86362001)(575784001)(1076002)(105586002)(48376002)(106356001)(33646002)(2351001)(50226002)(2361001)(305945005)(2906002)(53416004)(2950100002)(6666003)(8936002)(81166006)(50466002)(8676002)(6916009)(81156014)(5660300001)(52116002)(51416003)(69596002)(6506006)(478600001)(53936002)(52396003)(16586007)(316002)(6486002)(39060400002)(4326008)(36756003)(6512007)(76176011)(25786009)(47776003)(97736004)(54906003)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:CO1PR15MB1078; H:castle.thefacebook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 23:1RYwGbwylOQovlPBpRl2vkeJOyDiA6+FO4riKCrijTzg7id0PomppP9hfAKUmSIoRci9Cl7kDQaZHiNF2c2lOQDAiUoDEp/CWmSerya0xdqjzsBCYmzvqsQETe57wA2PiUS/fYZFz/Cm8N0CMR10TbEEDKwrluvje6rZncank8b81ZJF62hOowRy56uV9YCv98MET4i8TO1e8PcAaEjedrkQtBrlBJJFTC+MZ+Q2HWDnH2lCkGburEQizZIf2emLWH96KtoToAzOEECHHI2aSRLLzDw2VHPuwwFZfQrLMAcnqigrS0jbbIkXklC48pOSAo1xkhR/Xj5GOhqcokC+BFAXE9cS4a6N6WYdDSovOwWM5EOQJavkUZq/b8Ty9ne23WLXmHf1ZZvB9mSs4jLEtXueQrXgstcSHnCIjCYshpLml3+YCAicskgmB+hBUR/qKLWX/MWLPPF5fq+7Gfq5oWkey5MOavIxPQixi2kXVWYUM6BlTzYfvrwXe4F+3rh7488X7MlIQRWkFdr2pxt0/FiTP7cHP9A6+KW1q+PRCmmW0rLhn+iox2JStrwWt3Xk6Rotj+6zEtTJAuX7dZohI2gUjOdZznVamgiL3I056TDo6ZEWBnyJrQmvjrd0Cb7H36gbqUIvSBOFQXOkFe2qpNoOgAI2EnC4OQJGfO9+nam47Wq3s8qFAxkCiLq9FgJFPKcGQ6WLLfq3vLwTvmVttYBs1Qk4lz4yFBifkc3HNs/kjsiBDhrQGEp/IcilF/8ZO/mQU1uGfEXRbd2RhqY3xQXSiwCNbcA6jfMod31j7fhqGMO3+8ulyGVuBjz8LnUwSZSiY3vJFlq4EcDaeJUqo0eRn1WR7c8wDH5qomDsCvoJjC8JvkoS0oYRNOJ+FJHd5P08+PlnwZZKrPmKtXSq8dYE0S2Gq7vC9EbLbtSUK7ng2Mf6I+/oDjUva8OueQIR8QGwLmh50s++WPcoJjVbUclAHdQBO7ovy7Te/aOO56zYLsOa20IJk8lCBM4Kv+Qlz1vtd6g3CSn0RwwrVGtps9+Pdij766Z8nb6EGVA5riZqU6+FYixdHNmk8qI+jCsGkFPcBYgF5LDDMwBEHo44aHZSR0OgBsdBw33MSqZewVNJj0wdKpjFdeq2StW8BsJAUq3mxpGFQvjBiwqEUMwL7w== X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 6:pn8b+0CFNEJU1zhsJJ6ML5RlPmdnyiPR0EEEzMwztc3kLUp7qY/t6N5OHBYq6HR/87+ZGsd6lOX6k+sSlfAefbFgkcMhAkRqvG8OGSrWkPxXtiA8kanz0Tdv5NxJfRF62eVG4whmnCpA2pT/BGcIOphFMK67hlgLBdIRHfBNbIja6kZhSyAFsjbD58F5WGGz6yKb6tbjTJBm6NIgmSWUXE9fLcIRu3g9Y1cpeprdJwmsHEizQR25Ao58pmvh0PnC3Lk4SsUWqAyCZxohJj2KvO+za8O/b5o0lNkXSg2ENnUi1yoQP2/qcQueFuhtLoZFobFyn0MYtUti1kpYihUgCRs9KSTECX1fYKJNffLlCq4=; 5:M+/QIsK9VD1H1Kblges+YzfDP/dqSTaCtfC5uyUaNPGolpEHvbp1zihL1O6tGG39LQ/uk+DWXOVai8QRIcMpWEZPbERQxP4AWBsxFyGRts9HoAvE/IIRHe08OwRzIFR9IRLnAEZ/HfTnPdHJHJcgWUPgD8uE+PDIYDYrdhKOcE4=; 24:q1hsVncWExSFLydQQor0hKVly4/wdhuMrFAXt0dz6jBZesu3w1U+pZ31xf+DmjdM9krWmkIyaeqkE0r/6YJxWv5W9fM/sajV4ANRVFYJ+4w=; 7:YgGS+nO1nxe2XCj/LVpdhQH5FapCBytO57m0mL+01HywLWes/keLJVhMRRzfA2dT1eWDLX5mPZ8/PfK7VxoB9uwuo0TfYf4clsQarIKhyZUuEkxZ6vJgBwRoa6E4RVHLpXFelTdT0yJ6bwYeKJ4TwVCEbGpwmKn1uA4zREOKF/Ex8W7VXYeInovGp4lnAwniNdUDlI1dbBEX5LzyNkjK0CJFuKISdfORoWYTdYlw3sFMhKdxJehD++HDmdQvzG5X SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 20:XFCsAdwDrZiZQvXXSZdlflJdonzxHVDsvAwZLDV4HdVLfMm8QJXDkW/Hr+lDx+4Yn4MC8w7wioOQZvg7RWgqENiKd1TqtjKR2rV79aV/3xIvvl8VvsQlIKZ2i7Mnn7rMYLPph9dxfHNAj50cZlZQRsE/Japm0hQJu8dSfAaBkT4= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Dec 2017 14:53:15.6733 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d1dc887a-a044-49ce-b3ec-08d53e4b6b80 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR15MB1078 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-12-08_08:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add the prog load command to load a bpf program from a specified binary file and pin it to bpffs. Usage description and examples are given in the corresponding man page. Syntax: $ bpftool prog load OBJ FILE FILE is a non-existing file on bpffs. Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Reviewed-by: Jakub Kicinski Cc: Martin KaFai Lau Cc: Quentin Monnet Cc: David Ahern --- tools/bpf/bpftool/Documentation/bpftool-prog.rst | 10 +++- tools/bpf/bpftool/Documentation/bpftool.rst | 2 +- tools/bpf/bpftool/common.c | 71 +++++++++++++----------- tools/bpf/bpftool/main.h | 1 + tools/bpf/bpftool/prog.c | 29 +++++++++- 5 files changed, 79 insertions(+), 34 deletions(-) diff --git a/tools/bpf/bpftool/Documentation/bpftool-prog.rst b/tools/bpf/bpftool/Documentation/bpftool-prog.rst index 36e8d1c3c40d..ffdb20e8280f 100644 --- a/tools/bpf/bpftool/Documentation/bpftool-prog.rst +++ b/tools/bpf/bpftool/Documentation/bpftool-prog.rst @@ -15,7 +15,7 @@ SYNOPSIS *OPTIONS* := { { **-j** | **--json** } [{ **-p** | **--pretty** }] | { **-f** | **--bpffs** } } *COMMANDS* := - { **show** | **dump xlated** | **dump jited** | **pin** | **help** } + { **show** | **dump xlated** | **dump jited** | **pin** | **load** | **help** } MAP COMMANDS ============= @@ -24,6 +24,7 @@ MAP COMMANDS | **bpftool** **prog dump xlated** *PROG* [{**file** *FILE* | **opcodes**}] | **bpftool** **prog dump jited** *PROG* [{**file** *FILE* | **opcodes**}] | **bpftool** **prog pin** *PROG* *FILE* +| **bpftool** **prog load** *OBJ* *FILE* | **bpftool** **prog help** | | *PROG* := { **id** *PROG_ID* | **pinned** *FILE* | **tag** *PROG_TAG* } @@ -57,6 +58,11 @@ DESCRIPTION Note: *FILE* must be located in *bpffs* mount. + **bpftool prog load** *OBJ* *FILE* + Load bpf program from binary *OBJ* and pin as *FILE*. + + Note: *FILE* must be located in *bpffs* mount. + **bpftool prog help** Print short help message. @@ -126,8 +132,10 @@ EXAMPLES | | **# mount -t bpf none /sys/fs/bpf/** | **# bpftool prog pin id 10 /sys/fs/bpf/prog** +| **# bpftool prog load ./my_prog.o /sys/fs/bpf/prog2** | **# ls -l /sys/fs/bpf/** | -rw------- 1 root root 0 Jul 22 01:43 prog +| -rw------- 1 root root 0 Jul 22 01:44 prog2 **# bpftool prog dum jited pinned /sys/fs/bpf/prog opcodes** diff --git a/tools/bpf/bpftool/Documentation/bpftool.rst b/tools/bpf/bpftool/Documentation/bpftool.rst index 926c03d5a8da..f547a0c0aa34 100644 --- a/tools/bpf/bpftool/Documentation/bpftool.rst +++ b/tools/bpf/bpftool/Documentation/bpftool.rst @@ -26,7 +26,7 @@ SYNOPSIS | **pin** | **help** } *PROG-COMMANDS* := { **show** | **dump jited** | **dump xlated** | **pin** - | **help** } + | **load** | **help** } DESCRIPTION =========== diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c index 2bd3b280e6dd..b62c94e3997a 100644 --- a/tools/bpf/bpftool/common.c +++ b/tools/bpf/bpftool/common.c @@ -163,13 +163,49 @@ int open_obj_pinned_any(char *path, enum bpf_obj_type exp_type) return fd; } -int do_pin_any(int argc, char **argv, int (*get_fd_by_id)(__u32)) +int do_pin_fd(int fd, const char *name) { char err_str[ERR_MAX_LEN]; - unsigned int id; - char *endptr; char *file; char *dir; + int err = 0; + + err = bpf_obj_pin(fd, name); + if (!err) + goto out; + + file = malloc(strlen(name) + 1); + strcpy(file, name); + dir = dirname(file); + + if (errno != EPERM || is_bpffs(dir)) { + p_err("can't pin the object (%s): %s", name, strerror(errno)); + goto out_free; + } + + /* Attempt to mount bpffs, then retry pinning. */ + err = mnt_bpffs(dir, err_str, ERR_MAX_LEN); + if (!err) { + err = bpf_obj_pin(fd, name); + if (err) + p_err("can't pin the object (%s): %s", name, + strerror(errno)); + } else { + err_str[ERR_MAX_LEN - 1] = '\0'; + p_err("can't mount BPF file system to pin the object (%s): %s", + name, err_str); + } + +out_free: + free(file); +out: + return err; +} + +int do_pin_any(int argc, char **argv, int (*get_fd_by_id)(__u32)) +{ + unsigned int id; + char *endptr; int err; int fd; @@ -195,35 +231,8 @@ int do_pin_any(int argc, char **argv, int (*get_fd_by_id)(__u32)) return -1; } - err = bpf_obj_pin(fd, *argv); - if (!err) - goto out_close; - - file = malloc(strlen(*argv) + 1); - strcpy(file, *argv); - dir = dirname(file); - - if (errno != EPERM || is_bpffs(dir)) { - p_err("can't pin the object (%s): %s", *argv, strerror(errno)); - goto out_free; - } + err = do_pin_fd(fd, *argv); - /* Attempt to mount bpffs, then retry pinning. */ - err = mnt_bpffs(dir, err_str, ERR_MAX_LEN); - if (!err) { - err = bpf_obj_pin(fd, *argv); - if (err) - p_err("can't pin the object (%s): %s", *argv, - strerror(errno)); - } else { - err_str[ERR_MAX_LEN - 1] = '\0'; - p_err("can't mount BPF file system to pin the object (%s): %s", - *argv, err_str); - } - -out_free: - free(file); -out_close: close(fd); return err; } diff --git a/tools/bpf/bpftool/main.h b/tools/bpf/bpftool/main.h index bff330b49791..bec1ccbb49c7 100644 --- a/tools/bpf/bpftool/main.h +++ b/tools/bpf/bpftool/main.h @@ -111,6 +111,7 @@ char *get_fdinfo(int fd, const char *key); int open_obj_pinned(char *path); int open_obj_pinned_any(char *path, enum bpf_obj_type exp_type); int do_pin_any(int argc, char **argv, int (*get_fd_by_id)(__u32)); +int do_pin_fd(int fd, const char *name); int do_prog(int argc, char **arg); int do_map(int argc, char **arg); diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index ad619b96c276..037484ceaeaf 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c @@ -45,6 +45,7 @@ #include #include +#include #include "main.h" #include "disasm.h" @@ -635,6 +636,30 @@ static int do_pin(int argc, char **argv) return err; } +static int do_load(int argc, char **argv) +{ + struct bpf_object *obj; + int prog_fd; + + if (argc != 2) + usage(); + + if (bpf_prog_load(argv[0], BPF_PROG_TYPE_UNSPEC, &obj, &prog_fd)) { + p_err("failed to load program\n"); + return -1; + } + + if (do_pin_fd(prog_fd, argv[1])) { + p_err("failed to pin program\n"); + return -1; + } + + if (json_output) + jsonw_null(json_wtr); + + return 0; +} + static int do_help(int argc, char **argv) { if (json_output) { @@ -647,13 +672,14 @@ static int do_help(int argc, char **argv) " %s %s dump xlated PROG [{ file FILE | opcodes }]\n" " %s %s dump jited PROG [{ file FILE | opcodes }]\n" " %s %s pin PROG FILE\n" + " %s %s load OBJ FILE\n" " %s %s help\n" "\n" " " HELP_SPEC_PROGRAM "\n" " " HELP_SPEC_OPTIONS "\n" "", bin_name, argv[-2], bin_name, argv[-2], bin_name, argv[-2], - bin_name, argv[-2], bin_name, argv[-2]); + bin_name, argv[-2], bin_name, argv[-2], bin_name, argv[-2]); return 0; } @@ -663,6 +689,7 @@ static const struct cmd cmds[] = { { "help", do_help }, { "dump", do_dump }, { "pin", do_pin }, + { "load", do_load }, { 0 } }; From patchwork Fri Dec 8 14:52:36 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 846299 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="eFtwEvqq"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="k370BZ6S"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ytb2v6Hm4z9t8c for ; Sat, 9 Dec 2017 01:53:59 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754170AbdLHOx6 (ORCPT ); Fri, 8 Dec 2017 09:53:58 -0500 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:48700 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754133AbdLHOxs (ORCPT ); Fri, 8 Dec 2017 09:53:48 -0500 Received: from pps.filterd (m0044010.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id vB8EoH3c008350; Fri, 8 Dec 2017 06:53:30 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=facebook; bh=QBTNvEk+kaMeWBO9zC3xhq7XXEjRLYs0NFK3czbQHFk=; b=eFtwEvqqPaJpzpLWevwz0MZZiUpFL2etBrczxccmRNi1Q3W5VFpa64SyI5AuNXmvCxtx e7W4GmOhkCAQpF3N3DwN4qIPvUHcmILonD62gxW0fnvwzqv+9OwqSgXu/AIxVIB9CWlz wMNHktakuZLxPwT3PO22AHua/JzV14TxrDM= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2equ61g9hm-3 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Fri, 08 Dec 2017 06:53:30 -0800 Received: from NAM03-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.22) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 8 Dec 2017 06:53:29 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector1-fb-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=QBTNvEk+kaMeWBO9zC3xhq7XXEjRLYs0NFK3czbQHFk=; b=k370BZ6SE9J7hqDy5yqDjAXK/bCNTY9Tl2Xyrg0XDJIlXUWJHqDYYtv8vhYv4acsXn/SyyeBfcHE/NjC9thnQ1OVQBt4S0A4a7Nbh8KnwcGYR0p1Vhd6GBWgPcmcNsoe6D8wwf+IGIGLG7pFnVb0jid2qE1KC8OH3CJHe+fZGBU= Received: from castle.thefacebook.com (2620:10d:c092:180::1:b43a) by CO1PR15MB1078.namprd15.prod.outlook.com (2a01:111:e400:7b66::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.302.9; Fri, 8 Dec 2017 14:53:20 +0000 From: Roman Gushchin To: CC: , , , , , , , Quentin Monnet , David Ahern Subject: [PATCH v3 net-next 4/4] bpftool: implement cgroup bpf operations Date: Fri, 8 Dec 2017 14:52:36 +0000 Message-ID: <20171208145236.12635-5-guro@fb.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20171208145236.12635-1-guro@fb.com> References: <20171208145236.12635-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c092:180::1:b43a] X-ClientProxiedBy: VI1PR0102CA0086.eurprd01.prod.exchangelabs.com (2603:10a6:803:15::27) To CO1PR15MB1078.namprd15.prod.outlook.com (2a01:111:e400:7b66::8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 315f86b7-adc5-43ba-5ef3-08d53e4b6e10 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307); SRVR:CO1PR15MB1078; X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 3:kVfvAcXQMmNO/VqBAv/jF31S8I4DCHCPjy1Stx4I7tdPBaykZvmOE7Km9uK6ruWRX6CEs7+Fo5m87Nb6kFyluHP7NCqh53wDkClhJrbhcQ5Gc29w4Y/GnZXoJQ+z3C7qO0sc2+mL3xgF1iJQ6QFaawZGny8FVlI9SUapIHqp7kxeeAwj6BCnxqiqFfPEAku6zWYQ88q82/K32q1vVGi+nGQSUVQu7H8Y0rN+tdROQZIqMyn8bGOfG8Vj9kebKVrP; 25:XS4FM0Vjb3Xi3nF5W0Xzbo5AVBDXC1J+4rDBbuS3YodGAhJli08dHtkdG0b0ttf+GNJdcrwg9JUJKY9IF98S6r/GleY9g5+EzROfQkVotwM6MMGZUvWS5PyzRD5DQTdDkksk65xaexV8HkR59eDZx6cDcnBTSV1iBuXDyjFbXc34KJS9dVpdWiaWL0/5w342mFCfY57TLRoUzMjoTV8O5d4xllqRyz10KYcx7z1e3JvEcdrLNHbZMoARrXLJbiO3M0QJiXZ7RTFKEAZYq/DXtEcDC3iaWc7/cK9Unah1qQj0luPVfKFFxWZc+0Ne4VT5TJCDHojzwtC6K/LOhNsviw==; 31:jhGE9DM8ctyCzX3/mz6QnOvAiqeuAWjXPiP3W4TbF2AZDH8ddIo6gHkYBDXGBUwpZ0rgt4Xy8b3daPOUIbXRn1Cvm4yRncEtG7//xGMLQJuCIzxwNe+a4DXO+Ypvzm65csYk4qP2NgqnZmxVRGQ9svqfQlD130/l8GinGrrC2zYkgbjwKePNnTufjZBU7WW2UPgm9522OQHgFQvOz8ZubE06XbxfK4Gb2Go5XqpE8Kc= X-MS-TrafficTypeDiagnostic: CO1PR15MB1078: X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 20:UHMDiWFQxkjYgCnDN/QcWLWAnRw53biqm7DmKjUYzNjyBMKJ/0Tsq+5lFUtT51O6I3haLreVhjcxlX6HJTAVj3OhLJmlClom1DqDKzIxeE3GK91xUaY1uQ/5VzYRaA5KFJPv2wsl535XSZ87zhyZLFlLi5sNzbO2u5/mDHtmu4YBbi51W54JsEREo3lzUTJM5wy1icBCzOlZ6NGvzxAi6DgIpokIx363IQ7AIkxNbowjJbuYH3I013uuaaLBFUPu61inASrXJaNND5GtFD2TFD7SZ7hurkIWVEnGOfpfjOU/l2/8ryKNVxe43fP+RzlAgJ73Bu0Qet8xYgvbHJ3hvgHcGQuXLw/8hny/C6p6hZZt2ZfJkro7K0XuvCou/xPUOw6Hj622RnQOeMZVit1gyi9EfFZns2vnXMRfyEge6RIMHCbGjBxmdC2u2EcBWURiXk9Iki0X5/VtnzB8dftuSDvt+lz8w7CpTtK4nb1VsbzyN+tvBnRE1l7iKNUKROvB; 4:PP3h80e0ZgZb5gfB0Ev0eD7uZU92IJ0DyWHy6qPCPQ9GGDA0J1ZMsKk/v5fYPG0xjx/X08+rfR/UQTOnIwG+5gu/cuKJXoZsntG51FK0u8KoT2BgKBzHjMVfcP+68/BT8dDUE6rhKpC6zSmVYfEe17qoq6QBuegpHjkdRXvvKLSBXvACL32wS5s5QqxIM+ndWTA7eHoPBmx9heepyMt9ERrwNGhcSy4f0ZtiQlD1ax9qTUNz9/Tq4Up9reIXJBu9fL0TgpPvk5CztmQc+JA6Zi4Zh8GB+dEXbuPGVd3w9KJuIqU5lC8/tUmqhkYiLzZAVO1kaIox2ZxzUd6JlxJUrRh7TK488XjG9qGQfmytuTw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(67672495146484)(81227570615382); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(11241501159)(6040450)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(3231022)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(20161123558100)(20161123560025)(20161123555025)(6072148)(201708071742011); SRVR:CO1PR15MB1078; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:CO1PR15MB1078; X-Forefront-PRVS: 0515208626 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(376002)(346002)(189003)(199004)(7736002)(68736007)(6116002)(86362001)(575784001)(1076002)(105586002)(48376002)(106356001)(33646002)(2351001)(50226002)(2361001)(305945005)(2906002)(53416004)(2950100002)(6666003)(8936002)(81166006)(50466002)(8676002)(6916009)(81156014)(5890100001)(5660300001)(52116002)(51416003)(69596002)(6506006)(478600001)(53936002)(52396003)(16586007)(316002)(6486002)(39060400002)(4326008)(36756003)(6512007)(76176011)(25786009)(47776003)(97736004)(54906003)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:CO1PR15MB1078; H:castle.thefacebook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 23:S2iPCjWRgkBHDK+fQ83WPTZf/8bipvGhICjKK0Lc3bv2pRExaUcUBUBLbS6cWasE+SZG7JXDIllnBMHiBzJMJTeUATbNHhUcOJVYls42Y8QH9nlgbjY43rna/KDFELGriycmHoe3xK8ZcVi1aJoVWqK+Xs2w+OaokC3L9jfbY2RQ/wconUQVlU/mCLsTNqDPz4QKB01EbV6GHaXuMp6uTB5Giv1B/HNkIkimm/FQjvrQpcsZqSH+4B5amxA6QRTFQWy6bBa1ebKQxbk+laj4t/dhPwXEN960tx9K+Hf3TpiTw+1p7hL3xyCQ6IXQpRvqEMKQZx3Y+VHU9nTvVmRElmuJimoyHK0Gwa5EoDWeCWJixHoT+hlO0C0FHNcbjI0s2kMbNcb+AeIG4FLp1Y1kJRsVLzOOw+Y8zarakbVuqKERdsd0vKuXsXehfoFqqnpGR2voNkKl9FNvTzBwV9rMeM5B/x+9TudTkcetI0NgujQt8AJSEMwVHHoLuXdoi9cULQnAgIQPZTr984cPVZhK8Mf0LIo2Fvq9WJcAvPIQPi9BlAhg6fI745VW+m+NDONHH6Ywos+NTMfvsqNQ0QxWKTv3WoVlx+Y1OnSu53pIBo8dJdyslGOCvoh5VnCPm3gWRHiMxaMnHQSVWoBZW5HAj8IafKLNq5t4AhxG7EQ3NTStqsBFYRQgifHusY+uVe/P1L9hU3nmlwERTlsm8GVMHWH2sldsH7HBocNaGAwALEZhxeVAxbUM8vCzDduCBKOYwdpamE/TlmWfy/wzhocDoUmGCeWa+rgi5Iey5+CpSc6n4dZOtrqqmZlTfITXoQRJgAu4AhA9eLoKWesGHoQBCj1JRsfmZsdVwGJr+EM/5RGggQb7dShc2JrQ7wwsUm2WPrT6gluyn4S0canSAMtN6ciKhGuRXTcKzSfzauDS5dDABVFWZaOO6xHa/ax7K9gScEEhr0qjTbemnl9YDOloz++0NrTTbKhmD5fDI7g6Zu0Ys7aDJTA/3iz005/WwQqziQpsJC5L9Nbw3tKr9xDtVmgejv5YZINPfrdt2+7nlEwjNpK8thr7WanvzmQapKrzh/tlVuSIclV1Qc9JAA4Fefg80AcEncTO8Vqlc+j+0WCCxJKuLSDBdkoxlwzNlKdYCM+/ea3qeK2H6KirY3zBXeSyI72bFVZ0HayDCrYk+L4= X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 6:zb7sIubU17YUmqC5nO0xn/75fyzY7ttds62UmjBgaFyKb2NdP35JShBZDpPTdrgNheIC8wJ33WSNsHr1aem5LO3KL7DYRSmiS5r90JDHv/9bsLgJkq1J/3EVAH8D19VsUrLD6EroyE8ed8wGPUstVRpt+YDAKwkeSe6UsKntxWSlQyXQKxOj3GgvMEkdbaojNK8jNGoZSUviO1b6plUihSMdbPXpfvsAXrgaX4ATMO5p7Z62j4L1j5QO95IAg/9MoU04KhvRcl4ZW00s1HO4pHboMEPbbUXcfr3DUdfeKmYbTC8M/ApLOLxxprtfZIS/66ZgfXZ/TGa0hei2+h/pbXEj+jznMgH2l0pLHCiCY3o=; 5:pLxDB4t+CBFr9i5bo83xMrIoN5jAFIAv+JcFO4aUZn/KWtKawn0aHhELbDqLy2VV3lO10U3xvWUMe+9402yQB9CNTqDR5q6PxowatwsXBSmft2cjBaHhiPrlGHCEOI2pvjHIZYrAljmwTfoU5VgMAgT6zGF0zItVt4XJm8emBVQ=; 24:qalIa7cHrM7Z0j+R2YrZ8fON2aBKID3ncqzhVBPfylIlVrQm3ipXP4vZ2nKK7aQt5y56q/NL1jSwBi+uI9Ak9sfQQYqDSgivUyXLLVaQWrE=; 7:XuEyJDHXb/WkOgXVgzUSiqUw40PU/H7vRW8MN1A/NlPg0VmVpXNDvHSSnhawCH6Lht/OJhx9zfONkOpmmIWnoWHtv9v3Eppm07NEwXSS1a+/lS4SHC1/Tv7xWmrEJHuVi9cRjpG/2rmDYFi+EWbXewepc2iatRVxmfh6ERKw3GiIPsFjltxLMcjmBkOm5IV2CfaWlYE8nYp+c9tGOtV79VUrrKOC2/PRftkSsFa9B+berY4dlit+wsDFZhIKvmuv SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CO1PR15MB1078; 20:9+Ryg5P0XbuTfGB8qFfEt/twBi3J58PWBuX8pN3px+24fMzkReU6VYg72ZqTRKJ3dz8k9JDPJDtOqbkAOkrBYhf5vkXaMq7xZ0UOsNNvryxhRMPaw26ORRGoMF/XwMVVo1T84XyPV2s5w1yEjM3bg8Cw5ZD0n6XYleel+f/QYYc= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Dec 2017 14:53:20.2515 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 315f86b7-adc5-43ba-5ef3-08d53e4b6e10 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR15MB1078 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-12-08_08:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds basic cgroup bpf operations to bpftool: cgroup list, attach and detach commands. Usage is described in the corresponding man pages, and examples are provided. Syntax: $ bpftool cgroup list CGROUP $ bpftool cgroup attach CGROUP ATTACH_TYPE PROG [ATTACH_FLAGS] $ bpftool cgroup detach CGROUP ATTACH_TYPE PROG Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Cc: Jakub Kicinski Cc: Martin KaFai Lau Cc: Quentin Monnet Reviewed-by: David Ahern --- tools/bpf/bpftool/Documentation/bpftool-cgroup.rst | 92 +++++++ tools/bpf/bpftool/Documentation/bpftool-map.rst | 2 +- tools/bpf/bpftool/Documentation/bpftool-prog.rst | 2 +- tools/bpf/bpftool/Documentation/bpftool.rst | 6 +- tools/bpf/bpftool/cgroup.c | 300 +++++++++++++++++++++ tools/bpf/bpftool/main.c | 3 +- tools/bpf/bpftool/main.h | 1 + 7 files changed, 401 insertions(+), 5 deletions(-) create mode 100644 tools/bpf/bpftool/Documentation/bpftool-cgroup.rst create mode 100644 tools/bpf/bpftool/cgroup.c diff --git a/tools/bpf/bpftool/Documentation/bpftool-cgroup.rst b/tools/bpf/bpftool/Documentation/bpftool-cgroup.rst new file mode 100644 index 000000000000..61ded613aee1 --- /dev/null +++ b/tools/bpf/bpftool/Documentation/bpftool-cgroup.rst @@ -0,0 +1,92 @@ +================ +bpftool-cgroup +================ +------------------------------------------------------------------------------- +tool for inspection and simple manipulation of eBPF progs +------------------------------------------------------------------------------- + +:Manual section: 8 + +SYNOPSIS +======== + + **bpftool** [*OPTIONS*] **cgroup** *COMMAND* + + *OPTIONS* := { { **-j** | **--json** } [{ **-p** | **--pretty** }] | { **-f** | **--bpffs** } } + + *COMMANDS* := + { **list** | **attach** | **detach** | **help** } + +MAP COMMANDS +============= + +| **bpftool** **cgroup list** *CGROUP* +| **bpftool** **cgroup attach** *CGROUP* *ATTACH_TYPE* *PROG* [*ATTACH_FLAGS*] +| **bpftool** **cgroup detach** *CGROUP* *ATTACH_TYPE* *PROG* +| **bpftool** **cgroup help** +| +| *PROG* := { **id** *PROG_ID* | **pinned** *FILE* | **tag** *PROG_TAG* } + +DESCRIPTION +=========== + **bpftool cgroup list** *CGROUP* + List all programs attached to the cgroup *CGROUP*. + + Output will start with program ID followed by attach type, + attach flags and program name. + + **bpftool cgroup attach** *CGROUP* *ATTACH_TYPE* *PROG* [*ATTACH_FLAGS*] + Attach program *PROG* to the cgroup *CGROUP* with attach type + *ATTACH_TYPE* and optional *ATTACH_FLAGS*. + + **bpftool cgroup detach** *CGROUP* *ATTACH_TYPE* *PROG* + Detach *PROG* from the cgroup *CGROUP* and attach type + *ATTACH_TYPE*. + + **bpftool prog help** + Print short help message. + +OPTIONS +======= + -h, --help + Print short generic help message (similar to **bpftool help**). + + -v, --version + Print version number (similar to **bpftool version**). + + -j, --json + Generate JSON output. For commands that cannot produce JSON, this + option has no effect. + + -p, --pretty + Generate human-readable JSON output. Implies **-j**. + + -f, --bpffs + Show file names of pinned programs. + +EXAMPLES +======== +| +| **# mount -t bpf none /sys/fs/bpf/** +| **# mkdir /sys/fs/cgroup/test.slice** +| **# bpftool prog load ./device_cgroup.o /sys/fs/bpf/prog** +| **# bpftool cgroup attach /sys/fs/cgroup/test.slice/ device id 1 allow_multi** + +**# bpftool cgroup list /sys/fs/cgroup/test.slice/** + +:: + + ID AttachType AttachFlags Name + 1 device allow_multi bpf_prog1 + +| +| **# bpftool cgroup detach /sys/fs/cgroup/test.slice/ device id 1** +| **# bpftool cgroup list /sys/fs/cgroup/test.slice/** + +:: + + ID AttachType AttachFlags Name + +SEE ALSO +======== + **bpftool**\ (8), **bpftool-prog**\ (8), **bpftool-map**\ (8) diff --git a/tools/bpf/bpftool/Documentation/bpftool-map.rst b/tools/bpf/bpftool/Documentation/bpftool-map.rst index 9f51a268eb06..421cabc417e6 100644 --- a/tools/bpf/bpftool/Documentation/bpftool-map.rst +++ b/tools/bpf/bpftool/Documentation/bpftool-map.rst @@ -128,4 +128,4 @@ EXAMPLES SEE ALSO ======== - **bpftool**\ (8), **bpftool-prog**\ (8) + **bpftool**\ (8), **bpftool-prog**\ (8), **bpftool-cgroup**\ (8) diff --git a/tools/bpf/bpftool/Documentation/bpftool-prog.rst b/tools/bpf/bpftool/Documentation/bpftool-prog.rst index ffdb20e8280f..81c97c0e9b67 100644 --- a/tools/bpf/bpftool/Documentation/bpftool-prog.rst +++ b/tools/bpf/bpftool/Documentation/bpftool-prog.rst @@ -155,4 +155,4 @@ EXAMPLES SEE ALSO ======== - **bpftool**\ (8), **bpftool-map**\ (8) + **bpftool**\ (8), **bpftool-map**\ (8), **bpftool-cgroup**\ (8) diff --git a/tools/bpf/bpftool/Documentation/bpftool.rst b/tools/bpf/bpftool/Documentation/bpftool.rst index f547a0c0aa34..6732a5a617e4 100644 --- a/tools/bpf/bpftool/Documentation/bpftool.rst +++ b/tools/bpf/bpftool/Documentation/bpftool.rst @@ -16,7 +16,7 @@ SYNOPSIS **bpftool** **version** - *OBJECT* := { **map** | **program** } + *OBJECT* := { **map** | **program** | **cgroup** } *OPTIONS* := { { **-V** | **--version** } | { **-h** | **--help** } | { **-j** | **--json** } [{ **-p** | **--pretty** }] } @@ -28,6 +28,8 @@ SYNOPSIS *PROG-COMMANDS* := { **show** | **dump jited** | **dump xlated** | **pin** | **load** | **help** } + *CGROUP-COMMANDS* := { **list** | **attach** | **detach** | **help** } + DESCRIPTION =========== *bpftool* allows for inspection and simple modification of BPF objects @@ -53,4 +55,4 @@ OPTIONS SEE ALSO ======== - **bpftool-map**\ (8), **bpftool-prog**\ (8) + **bpftool-map**\ (8), **bpftool-prog**\ (8), **bpftool-cgroup**\ (8) diff --git a/tools/bpf/bpftool/cgroup.c b/tools/bpf/bpftool/cgroup.c new file mode 100644 index 000000000000..8116d58699af --- /dev/null +++ b/tools/bpf/bpftool/cgroup.c @@ -0,0 +1,300 @@ +// SPDX-License-Identifier: GPL-2.0+ +// Copyright (C) 2017 Facebook +// Author: Roman Gushchin + +#include +#include +#include +#include +#include +#include + +#include + +#include "main.h" + +static const char * const attach_type_strings[] = { + [BPF_CGROUP_INET_INGRESS] = "ingress", + [BPF_CGROUP_INET_EGRESS] = "egress", + [BPF_CGROUP_INET_SOCK_CREATE] = "sock_create", + [BPF_CGROUP_SOCK_OPS] = "sock_ops", + [BPF_CGROUP_DEVICE] = "device", + [__MAX_BPF_ATTACH_TYPE] = NULL, +}; + +static enum bpf_attach_type parse_attach_type(const char *str) +{ + enum bpf_attach_type type; + + for (type = 0; type < __MAX_BPF_ATTACH_TYPE; type++) { + if (attach_type_strings[type] && + is_prefix(str, attach_type_strings[type])) + return type; + } + + return __MAX_BPF_ATTACH_TYPE; +} + +static int list_bpf_prog(int id, const char *attach_type_str, + const char *attach_flags_str) +{ + struct bpf_prog_info info = {}; + __u32 info_len = sizeof(info); + int prog_fd; + + prog_fd = bpf_prog_get_fd_by_id(id); + if (prog_fd < 0) + return -1; + + if (bpf_obj_get_info_by_fd(prog_fd, &info, &info_len)) { + close(prog_fd); + return -1; + } + + 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_str); + jsonw_string_field(json_wtr, "attach_flags", + attach_flags_str); + jsonw_string_field(json_wtr, "name", info.name); + jsonw_end_object(json_wtr); + } else { + printf("%-8u %-15s %-15s %-15s\n", info.id, + attach_type_str, + attach_flags_str, + info.name); + } + + close(prog_fd); + return 0; +} + +static int list_attached_bpf_progs(int cgroup_fd, enum bpf_attach_type type) +{ + __u32 prog_ids[1024] = {0}; + char *attach_flags_str; + __u32 prog_cnt, iter; + __u32 attach_flags; + char buf[16]; + int ret; + + prog_cnt = ARRAY_SIZE(prog_ids); + ret = bpf_prog_query(cgroup_fd, type, 0, &attach_flags, prog_ids, + &prog_cnt); + if (ret) + return ret; + + if (prog_cnt == 0) + return 0; + + switch (attach_flags) { + case BPF_F_ALLOW_MULTI: + attach_flags_str = "allow_multi"; + break; + case BPF_F_ALLOW_OVERRIDE: + attach_flags_str = "allow_override"; + break; + case 0: + attach_flags_str = ""; + break; + default: + snprintf(buf, sizeof(buf), "unknown(%x)", attach_flags); + attach_flags_str = buf; + } + + for (iter = 0; iter < prog_cnt; iter++) + list_bpf_prog(prog_ids[iter], attach_type_strings[type], + attach_flags_str); + + return 0; +} + +static int do_list(int argc, char **argv) +{ + enum bpf_attach_type type; + int cgroup_fd; + int ret = -1; + + if (argc < 1) { + p_err("too few parameters for cgroup list\n"); + goto exit; + } else if (argc > 1) { + p_err("too many parameters for cgroup list\n"); + goto exit; + } + + cgroup_fd = open(argv[0], O_RDONLY); + if (cgroup_fd < 0) { + p_err("can't open cgroup %s\n", argv[1]); + goto exit; + } + + if (json_output) + jsonw_start_array(json_wtr); + else + printf("%-8s %-15s %-15s %-15s\n", "ID", "AttachType", + "AttachFlags", "Name"); + + for (type = 0; type < __MAX_BPF_ATTACH_TYPE; type++) { + /* + * Not all attach types may be supported, so it's expected, + * that some requests will fail. + * If we were able to get the list for at least one + * attach type, let's return 0. + */ + if (list_attached_bpf_progs(cgroup_fd, type) == 0) + ret = 0; + } + + if (json_output) + jsonw_end_array(json_wtr); + + close(cgroup_fd); +exit: + return ret; +} + +static int do_attach(int argc, char **argv) +{ + int cgroup_fd, prog_fd; + enum bpf_attach_type attach_type; + int attach_flags = 0; + int i; + int ret = -1; + + if (argc < 4) { + p_err("too few parameters for cgroup attach\n"); + goto exit; + } + + cgroup_fd = open(argv[0], O_RDONLY); + if (cgroup_fd < 0) { + p_err("can't open cgroup %s\n", argv[1]); + goto exit; + } + + attach_type = parse_attach_type(argv[1]); + if (attach_type == __MAX_BPF_ATTACH_TYPE) { + p_err("invalid attach type\n"); + goto exit_cgroup; + } + + argc -= 2; + argv = &argv[2]; + prog_fd = prog_parse_fd(&argc, &argv); + if (prog_fd < 0) + goto exit_cgroup; + + for (i = 0; i < argc; i++) { + if (strcmp(argv[i], "allow_multi") == 0) { + attach_flags |= BPF_F_ALLOW_MULTI; + } else if (strcmp(argv[i], "allow_override") == 0) { + attach_flags |= BPF_F_ALLOW_OVERRIDE; + } else { + p_err("unknown option: %s\n", argv[i]); + goto exit_cgroup; + } + } + + if (bpf_prog_attach(prog_fd, cgroup_fd, attach_type, attach_flags)) { + p_err("failed to attach program"); + goto exit_prog; + } + + if (json_output) + jsonw_null(json_wtr); + + ret = 0; + +exit_prog: + close(prog_fd); +exit_cgroup: + close(cgroup_fd); +exit: + return ret; +} + +static int do_detach(int argc, char **argv) +{ + int prog_fd, cgroup_fd; + enum bpf_attach_type attach_type; + int ret = -1; + + if (argc < 4) { + p_err("too few parameters for cgroup detach\n"); + goto exit; + } + + cgroup_fd = open(argv[0], O_RDONLY); + if (cgroup_fd < 0) { + p_err("can't open cgroup %s\n", argv[1]); + goto exit; + } + + attach_type = parse_attach_type(argv[1]); + if (attach_type == __MAX_BPF_ATTACH_TYPE) { + p_err("invalid attach type"); + goto exit_cgroup; + } + + argc -= 2; + argv = &argv[2]; + prog_fd = prog_parse_fd(&argc, &argv); + if (prog_fd < 0) + goto exit_cgroup; + + if (bpf_prog_detach2(prog_fd, cgroup_fd, attach_type)) { + p_err("failed to detach program"); + goto exit_prog; + } + + if (json_output) + jsonw_null(json_wtr); + + ret = 0; + +exit_prog: + close(prog_fd); +exit_cgroup: + close(cgroup_fd); +exit: + return ret; +} + +static int do_help(int argc, char **argv) +{ + if (json_output) { + jsonw_null(json_wtr); + return 0; + } + + fprintf(stderr, + "Usage: %s %s list CGROUP\n" + " %s %s attach CGROUP TYPE PROG [ATTACH_FLAGS]\n" + " %s %s detach CGROUP TYPE PROG\n" + " %s %s help\n" + "\n" + " ATTACH_FLAGS := { allow_multi | allow_override }" + " " HELP_SPEC_PROGRAM "\n" + " " HELP_SPEC_OPTIONS "\n" + "", + bin_name, argv[-2], bin_name, argv[-2], + bin_name, argv[-2], bin_name, argv[-2]); + + return 0; +} + +static const struct cmd cmds[] = { + { "list", do_list }, + { "attach", do_attach }, + { "detach", do_detach }, + { "help", do_help }, + { 0 } +}; + +int do_cgroup(int argc, char **argv) +{ + return cmd_select(cmds, argc, argv, do_help); +} diff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c index d294bc8168be..ecd53ccf1239 100644 --- a/tools/bpf/bpftool/main.c +++ b/tools/bpf/bpftool/main.c @@ -85,7 +85,7 @@ static int do_help(int argc, char **argv) " %s batch file FILE\n" " %s version\n" "\n" - " OBJECT := { prog | map }\n" + " OBJECT := { prog | map | cgroup }\n" " " HELP_SPEC_OPTIONS "\n" "", bin_name, bin_name, bin_name); @@ -173,6 +173,7 @@ static const struct cmd cmds[] = { { "batch", do_batch }, { "prog", do_prog }, { "map", do_map }, + { "cgroup", do_cgroup }, { "version", do_version }, { 0 } }; diff --git a/tools/bpf/bpftool/main.h b/tools/bpf/bpftool/main.h index bec1ccbb49c7..8f6d3cac0347 100644 --- a/tools/bpf/bpftool/main.h +++ b/tools/bpf/bpftool/main.h @@ -115,6 +115,7 @@ int do_pin_fd(int fd, const char *name); int do_prog(int argc, char **arg); int do_map(int argc, char **arg); +int do_cgroup(int argc, char **arg); int prog_parse_fd(int *argc, char ***argv);