Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753301AbdLMPTr (ORCPT ); Wed, 13 Dec 2017 10:19:47 -0500 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:39742 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751026AbdLMPTm (ORCPT ); Wed, 13 Dec 2017 10:19:42 -0500 From: Roman Gushchin To: CC: , , , , , , , Quentin Monnet , David Ahern Subject: [PATCH v4 net-next 1/4] libbpf: add ability to guess program type based on section name Date: Wed, 13 Dec 2017 15:18:51 +0000 Message-ID: <20171213151854.21960-2-guro@fb.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20171213151854.21960-1-guro@fb.com> References: <20171213151854.21960-1-guro@fb.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [2620:10d:c092:180::1:f726] X-ClientProxiedBy: DB6PR07CA0138.eurprd07.prod.outlook.com (2603:10a6:6:16::31) To BL2PR15MB1075.namprd15.prod.outlook.com (2603:10b6:201:17::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e855220a-a5b4-450a-29cd-08d5423ce0c6 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307);SRVR:BL2PR15MB1075; X-Microsoft-Exchange-Diagnostics: 1;BL2PR15MB1075;3:b72BKS/pVnsdmyggG8kPiFz+RkERSBfiN3QjL7gTF3tSfmsWvleZIykGwM5NWTeMNuqU+sF7HthMl2Ca9aDssBcBsk+PPmPhk+NWuKMn4F97ukueYAFFWkDGC/eent1r905iXuDugB4jZvh5Xmn4dYjGetvTBUrrF8I6UB3iSVitR37OoWUIQ8CRJFdAeoSByxuofbg9KthdNRSZD7q2LgC0yJPdpb2VE3LiE4Rz/JpGkbZDl3uH5sP/Vk1hwuds;25:bXBbH6fofG2BKIk1AaxUa+CEHM23JnvCw6c3BjDAB4IDoYnmqcPpfX/x03Wz5XCSj0KzNSqF3Of2G4GQScXgazK9oGm6DHgBA8jy52HAC1gYwdBc0zsXINmjYhF0uBl7wFwyUTCCfKFnZD5xc0dxHMvUQ/g9vAlMNRXloilsrL5YKgpMvSS+LNJicJaAAMIC1Hm1ZyH3cs5SlvCjJCPqMOXOO+C/DZrojk1LwVoo3PvRezMqzFi/FbVUtXpsWzq8Zk9Nxzc2d9yWkHmQOZMB2pDSnpK3dnnoVIY1tCknmkqwmyJc5pv/LMGU9HJTDCwjXKwptifwg/7MvcoeI0q9Xg==;31:7ZaTFHmPxVEnamk+QXf3Wv+6tWuzidAl9TKWfSuT1nLiSFLCAlM+blIBU/fIoRHJC+u9qSCuf4VqH73IEsWp3VAkxQk4aQIkdRMp2YvARTLgXlISDd8N2fjwLS1esSZctuZ/+EYTXQbmPGDRluOm/6Zy8itOFs3Ga7cjJ3+b7TMjv2PKlk/WJwsnmcASW1ydU9/Mx+aB4cqe01nQbrYxXw7JWekpITcKupfSr1WlLhM= X-MS-TrafficTypeDiagnostic: BL2PR15MB1075: X-Microsoft-Exchange-Diagnostics: 1;BL2PR15MB1075;20:GVYcdViBAU5w7/C/AFnggiLfhlmcXD8AInLn/m6hd0YzgxbOqyZP4f0D1ejFX2EXnAOJHyuXHN7+l2iJgqOee3uSAAXKV/q0uwPV3y7VwFUfbG+9TLURq8UhzWU0TtVNAqUSl0q4rzXN5z9JTaCuZqFOw0+Tr1ICH8zj12GJvbLJDYQS4Ljks7xnVTn0GJzUp0+t/gOq3ojt6rWCUid+Tr9u6yG4RNQT7D0OjqU8gNGd5DMygWn/oqR5pMHkviNYxMfjZwnrxmYdJ87pUKNpXfzWH99cklu+7Cg/8V5mlqSs9fpEWtW7+Vzp1U9JlZwLlTsFR/+5vStrsz98YaoPp+blZA9yRYsWUaX7PHZwzGnvNGXNRIibFAuMxYxnLSXtYf9WihWy56zGTV942kxf+JVIQbsXn3tpuHaELKQ/MQTVeDYpezEV7cffXdEyBHelMeOA1kK03PmJHrf5RHrYTK0LpbeySmRoYJXyDPeep41SE3XNzTIVA4mWPat+ux2y;4:S15WGGx1HRPR4wQ9JDmpbTtO8eBeC4jAFDEqftyJAVU/vAVadfetlMpNSgDD8nhbqzWiTi9tHa81SgAawATTJSZRskvYoYVYxpPwq1hOpL++zGnpquqoQGe5E9D03cvjIc+aFzHV6tGo810hhg3KrSUFc0ARYZ4dxOgOJWg878R/FPGCdRF1H9fcejX+1rqM0FSRHRji1mZiOMBGefTPWuysfoNphi/U774nDPwBuVMIc1PVjuJFOqJGTIyWXORMLg9JBcC26m1mZWtabQxAuey+7fRYppmTUG3/jXLDf10H1TZmNxugjYRJFV47eg+4 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(67672495146484); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231023)(11241501184)(93006095)(93001095)(6041248)(20161123564025)(20161123555025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123562025)(6072148)(201708071742011);SRVR:BL2PR15MB1075;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:BL2PR15MB1075; X-Forefront-PRVS: 052017CAF1 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(346002)(39860400002)(376002)(366004)(199004)(189003)(48376002)(7736002)(52116002)(6512007)(6116002)(1076002)(305945005)(5660300001)(53936002)(52396003)(68736007)(39060400002)(50226002)(4326008)(51416003)(8936002)(386003)(6506007)(8676002)(25786009)(81156014)(575784001)(478600001)(2950100002)(6916009)(2351001)(2361001)(316002)(59450400001)(81166006)(86362001)(6666003)(50466002)(54906003)(16586007)(69596002)(47776003)(97736004)(36756003)(76176011)(106356001)(6486002)(2906002)(53416004)(105586002)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:BL2PR15MB1075;H:castle.thefacebook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BL2PR15MB1075;23:pSudrEX6XF6wJidmKo2wcg4yaLHQVp2xMRiqZ8/jl?= =?us-ascii?Q?GubWE6Nv4iUPT8oQB6LhnjqjJ1t93tXpHoFH1e3Nt7VXjMGDSaBIXWHCZIgl?= =?us-ascii?Q?Di2/g7l2m+5tVgDyFsU9kVh0iX7KdFJZo79qeoFB26PG7Neint+0njpmBMIW?= =?us-ascii?Q?JoQCW5rN0NmgRlVh07WbDM+BCflfPhuQUbRbuo1LWDVpWHKgUv1jMP/MZjyQ?= =?us-ascii?Q?7nJoAgPItYVBwgDHYlm2c1vM6pLcty+XJuqQhnqO8zCLyI1FCYhBbekynlzb?= =?us-ascii?Q?DaarZZuE7PP9k+bKupHg7KnpHUXbMCVL9X5uT2M/nFjqjryUK94OKe8sEdfm?= =?us-ascii?Q?i3Lnu+6xvZySsZmOlTCEAoVSzCIAaAmrY0tfcdSa40wWknA39gTOX9CZAno0?= =?us-ascii?Q?nWEmP08bE6L2lPEC4ZT3V9EO7DHYiNfrC+puzcCTdT1KMwususlMgSJKLwnV?= =?us-ascii?Q?8ZliZ+ADotNmEAupyj8MJx/5ZDq+iatz+COMSsdlVjHNtczwHNcOEETgtsly?= =?us-ascii?Q?4y6db0wqViMyb9xqXLTm1sRCY7aGMYrqFZ2lnMhCNcSrFyjyIMrUK4OKmmNr?= =?us-ascii?Q?d0E3cIo0XOvW7Bf7ZmIgRGWpuR4YBqAHWvNCLIASmY20josT91TzA7mUkm+j?= =?us-ascii?Q?3eTJIqhcwKoGqGe7Cp299EeNVvG5TMVaTBcEJPi1prns1SFkZMhglp2nnyhe?= =?us-ascii?Q?qhne8cglob77/0+FBYUHqHTnpUfSBNl4HBN5zM4ahQPTHfo+4XeDdwm1wH1X?= =?us-ascii?Q?kavnINXvziMKsIJnFWPL/p4qtLzCSBp3KS2VOaaoQIyMaaT3/H8oHGZwkvj6?= =?us-ascii?Q?wV7FhxPTENEuVhIY8RoWOEEpUMaqvqd7NUde3XAqslzIej5WzsepeLJm6Crv?= =?us-ascii?Q?COjKFO04vmTcVOKmkxIE0209+awJAG2cSY5LnxOB4EQCZbfflRixjr+BbGAS?= =?us-ascii?Q?SU9zv+BSV7pF/n2NSKSjV3HZ4K5FmYH8YOtQTMHBsgGBTBoztxHEmlTi8y+e?= =?us-ascii?Q?59wyczntyYRozoJ3AycPD6F7doiKvgRb6VKBhR7UzzXxM/1gNEe78ThlEIyB?= =?us-ascii?Q?KCoczo4KpVNXHjycCLiHM99EvueZ742Cp2V/KTy/Cz2G32SWfEUlA9Sd2eVs?= =?us-ascii?Q?PSMJ85MzyPbHdjAVW5CnbmDAPqmC/xnLWETBY0VglvkeFZojx+ZETEttXFmE?= =?us-ascii?Q?d87HLytcz0Wp1ouaCtc+T6KBcmJt2lZMmUc?= X-Microsoft-Exchange-Diagnostics: 1;BL2PR15MB1075;6:6YKegXZ9umMwwbthx9oNrp7RTfaxXdm8du9GTaqWziNACx2vKfrTh4ZCEqVrQj8ywEcmKXP+frrPeMemhGL+kc4qE7yH16PYx0yAvTMJhJUq4ndclZ0db0cbR7+KXymFDT3JzCYz4NPK8TN9kUlOOQA+CxI94K4I34MsxjIafuvfe7pRUvfwz1nkddaoD9kzTdCAdoDfHeNMXuOxZWCh5+2YlMdJkMVk7KM91v2VcHDORt5OgwlH54H8oayHWxEgtOa2HiRTXRpi3DvE+s3C5wnc72OPYZOHCHrBLURsBJkLGwp6cyiS3jWR0rRWMqFEQqI/O4Q1BVSX6OO2qkdDfEUn/bebhJa0RbKAqXH4l9Q=;5:/TBtm3k4t7r3ptGfTH7A1Li0Br4bnGxv7wQVMq40Ir7vUZ8Yo5RlliQpgQw8PXespBfE/CZIODEzjMUvh4KjpgfkRtbX7eh7kiIgxYRZUMRj/x2Tqoh38fgy9jmBmejj1s6DbN8TNz1TmArgN5LcPt+IT9N1XbxKp4G/zsOO/8Y=;24:Sf26v8P2z7gfrq4jxtKiG+WwyknA4hCbhEVTtTN0dxmQpKmTw8nNCNXM7R3JWzrQdoG4UAn60vZcMGJU0mTEcvJuMrum87jdoL8CZSqDfsk=;7:ovLWudl4f3B2LbAz2GBfboHHuE82iM7Z+4tIByxifehyaU+1Vb72f4o7bpT4Y8vlVIxDu1pzBkhnWXNgLPH/eljhUxnUOZXqAdF+z07KgZRCVgegyT0qigg02Xtqjl1QjFyJXy8Q1umd9k58kN9WNLjZb3VmctCzt8jt5f8cOtA/J2E7r9BgK2uF4kZipIdzAPBsnOlJLnvfZ2X9cYyKZIH/NLR3fP9E1EjvkYB83c8ESYY5KZkaqEd3e4HEMQMD SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BL2PR15MB1075;20:XldJ2yqHpSP+7rkkEq88P8rYRjwM5C46lIU8mcMvY7w/atUSAO+vfKg5Fic4bYfGE/Za8JyvipYMGn8JlOdOUGkxYx6yzeJU1zZjcBywIlrEqJ/c8WIQTKbZ5MQ8dtAjmGKBpYwmiFRdzNWBwhUuoVq26zA6UA+UpmONCpWds3w= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2017 15:19:16.3096 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e855220a-a5b4-450a-29cd-08d5423ce0c6 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2PR15MB1075 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-12-13_07:,, 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 Content-Length: 2812 Lines: 87 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) { -- 2.14.3