From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752774AbdLGSkO (ORCPT ); Thu, 7 Dec 2017 13:40:14 -0500 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:41324 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752698AbdLGSkJ (ORCPT ); Thu, 7 Dec 2017 13:40:09 -0500 From: Roman Gushchin To: CC: , , , , , , , Quentin Monnet , David Ahern Subject: [PATCH v2 net-next 1/4] libbpf: add ability to guess program type based on section name Date: Thu, 7 Dec 2017 18:39:06 +0000 Message-ID: <20171207183909.16240-2-guro@fb.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20171207183909.16240-1-guro@fb.com> References: <20171207183909.16240-1-guro@fb.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [2620:10d:c092:200::1:e273] X-ClientProxiedBy: AM0PR0202CA0031.eurprd02.prod.outlook.com (2603:10a6:208:1::44) To CO1PR15MB1079.namprd15.prod.outlook.com (2a01:111:e400:7b66::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7ee73613-99f2-43ef-80d5-08d53da1ded9 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(5600026)(4604075)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603286);SRVR:CO1PR15MB1079; X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;3:CJ4nOGbQKeKmOixYxoxWREG32AwDXbAKwXgSS2X4V6kToVL5LLaFWEKsIChZ8xAOiDO5PcGchvGJ7ypVnuQg6vpd13d8foaoqFy4Caw/ypdK9pKah+3wZWjWQzyjXE5oT7cXabdEbRGD3qq7cRialDWwJUsjdMFT3p7WzlamRvKTOiLo7uBLkivI2zJ5dHLS6s5erwjUtzOY2lU5e4jmLYdDVL70Ccqf7GuiDwfsj+4ZZZhW9Wqed9XS+0F2Ligx;25:trq1NFpJho9CwQqn7YQCz1T3ydSuku62XzGci9rd7Uqa7FukVY+QRbwOxR93lpALe14CP72XrRm0nF60iEYiaFrry3uRIOXkqOPONQOAG1fODjqHckrIJcywaeSxJhBt3c8U/+ns6xSR+VV4mLG5is6PwaqK/6Jtueyouc419YabHQcpW21c9mElWbeH6sl2s6lIaXYtqYorv7CsyAKDMO01gEWgEWEQPYBNAbAnHuHtfOWrfwsbfR8ds6ZsgvwSq+C+KtFlGM+SicHzqF7p1XqCUHKQ2oI4WFXO/FofUz/rs1B/BXmIwE3lhDeJ642QSzpCZ4WRNEAiRMVyKRc1YQ==;31:P6qdQZSKcsMsRLkX2J14b0rVwKUCFOdjZT6hGNmjA2L8YOuhmK5qLgliSeLZMRSZ7a0XGTh6glrJkwisaz0+RD3tIMCdT8xm7OaFNYettlgf+Vqaa5aXYqPA1OW5RLsFYhUbLc8uVefLI5HIuPUnvvLOejNgavoAX8eJxF/k91G2hGHm+2OpsmV2GPR0LaKd6n6623uhRgC77zhC7gOAMqQ8FBrFeV5XvZXtcuiV/o8= X-MS-TrafficTypeDiagnostic: CO1PR15MB1079: X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:Yre5AwdjSJ581D4cEP2KSLz6BVyHPXlIdHpo1iL9uePfDtUzc0gbUZd8m48qDWuxXuHuSa01tWu21IenVjK7BuQOjZBOlA5sgY4k8mSF0Ol1pgLZMA4TRjg/c1Cvz2E0HxV7xSgg4YJWkJ93s+ymaSheUtnEDyD4M05BaIy4Z+xb1g93D2J/USsNTx2AiCUiAfAOLN/RtLVvreDulqMHGeai891kvyYO6DH1eCwEen0hByrFScTZTl8T3eiL5bunu/sh3XUfVGSTF4tLXC0z3fBrSeb9N4Usw7dhvOSR/VZBjd4TTYl5a/0M4cTNL5GyBDLRcK+T/K4OGy+FAT1vCBJiFRf/p3vTYWeavxWiStcPOOk0ainz+zqqrVggyf8fvj6NemPL5ZvgKDFGMWtm5ew2PYsYVSeZzFgXfC7O09EePrAdTBPm8BRmKBfrCuR6QFfyN+Erhd1YZUM/az7Raj4sY5jOqmT8Qjegy0Vw/mxlln812I3B5EwHgT+Fj+dz;4:oYfqDya7ANIA2U5Ouyi8EXIyk/56hfaFW9787RiBGpqeM/iw/MmqhEzL5Er6j08as8hGZC1dUBoykzLUc918tNBa93Y4nVF+5qgixDpChhbUjOjWsopKifCvhhctKN0eyeq1UR6qlCfzmwS4H/E7wOvMUMYJDKaHxB7F96Hl8sA9U6jcH/QGnGiNnJ1Q/U9vOkHbq94ih983lEuQVLmzh8LmQ60p7TVjujFlW5eAhklfJW1Tus5zMHVIcDfhhjd9DAMgJ6c5vvQZh/Cejq249v0H5O76b8RmP7nvBNrIMM+h8/uhYG02dGMq9SPSGTLM 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)(10201501046)(3231022)(3002001)(6041248)(20161123560025)(20161123562025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123558100)(6072148)(201708071742011);SRVR:CO1PR15MB1079;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:CO1PR15MB1079; X-Forefront-PRVS: 05143A8241 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(39860400002)(366004)(346002)(376002)(199004)(189003)(101416001)(52116002)(6506006)(6486002)(8936002)(52396003)(478600001)(6512007)(97736004)(16586007)(316002)(36756003)(69596002)(6116002)(1076002)(5660300001)(6916009)(2950100002)(53416004)(54906003)(81166006)(81156014)(8676002)(305945005)(7736002)(105586002)(106356001)(33646002)(50226002)(76176011)(2361001)(68736007)(2351001)(25786009)(6666003)(50466002)(47776003)(48376002)(2906002)(4326008)(575784001)(51416003)(86362001)(39060400002)(53936002)(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:sMERsY+xiyEko9ERo54VfH6UXylFl/Tkc0Zn/o2NX?= =?us-ascii?Q?/Mri/UsmejlaeO17O2xLcST09JYOCoTe0v4X+OpewUuuYMhENoWEsebHR78L?= =?us-ascii?Q?IwJJyIh6YkhiddzcrEwCAwEupaS0FwRLdoWlC9g1rCOP0lGukrcV+/FAr7ih?= =?us-ascii?Q?XR8sdD3d86CjZg/29swfU+hgLdQndpaau8T6FnINuBW0jIaHGf+l+raBfGDU?= =?us-ascii?Q?RvKdpfO/p6+HU0wKCsEcb4VXHeDUE7fepq6m7/ALI20B8iJyNQXL9nOzsMcF?= =?us-ascii?Q?ly5bpvSrLA4PPcfQeOOTaZLMZ3SbrKPA3oHHIkB+az+fyZganP5isiUmsuGL?= =?us-ascii?Q?dMCzF/xjWvqAoGNzn4jUqTqTYPZKZosX0AeKcl1XBRdSz2be/jcOBq4kdrS/?= =?us-ascii?Q?rYOVSVoKC7ehmr5wAaHga+kr3pxbfATo39vMk0cq2pvWyeXk5S3fhumd1nqN?= =?us-ascii?Q?I6j2aVQMvh4NXvZHpFqTh1cageziVmOrdW53QOjbFLVIMhy8VqhJlmMUm5wf?= =?us-ascii?Q?Sqa/8a6I4ftrRuwWtHHvrtTRpNcr4E1Ydv6vO1da4fETL3drGvTQn+uZBBu9?= =?us-ascii?Q?SJshNhFOxP7TqQARK2YsKtPBPtqqeMXA2kXE6T656i/DIt1P1lEhgBBIeQnn?= =?us-ascii?Q?i3t3NemaAPqoQqL91s1b87W91iR58rzegoeLhlpKtzXX2S9nUPLJOlhH/nBK?= =?us-ascii?Q?ZaE+ZndUeRET7Mhm5V1XK0rHIP1pY9qgRGW7pdOzVXmqQz/+g6t9wLYrCzCQ?= =?us-ascii?Q?7ZnPKnB4RECq080Ph/ZlNQT/3a7Y4iYpT+bmlOn7ZNmL8Iuh+LoH6G5gyjf4?= =?us-ascii?Q?ucvFi1Vyya8Uuxv8jIsm/C+a/iIuZ62YO2eKEcKW9MLe5YuMerOtX7Yy8Amu?= =?us-ascii?Q?uTrkVOP/u9qzAvBZIHG505bSUzdgg/VpIGN1fzrvrcYkiZoXcFAPOA92QPWY?= =?us-ascii?Q?5DkDu+6SdVN3npjZmSuqcXg29ACwIIxfafE12f8oa7ffIU/O/7eXv7mKSb7w?= =?us-ascii?Q?aZa2wYMN22XLidJrnk7TdFQR87M3Y1z+yayDXkF1QkX8C3EqKzLoOIoLcwXL?= =?us-ascii?Q?fPJySk5pgRQayqUraXtY+hkP8S0GSWJTldEF7Vh2p193TsN0oG+tNM7y399V?= =?us-ascii?Q?e/uo/6mTz3PkaVHpx5CCqMJKhP2f4gK9pgSExfIcQNT9wB4tGBfbcirjGSQd?= =?us-ascii?Q?q6NRr0w11+Yq6tMAiJoHpraGUGs/B5uniOs?= X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;6:kQ4gx8kb2rdoJzY81/tGr0G7TKVXcAfX6cUMKdlgMiBdIAOW8k0G2Mc2aDBQfLUYh+RaJno0dgy4iPLytt4i+SroiUhXEt38klJoLOaxhNB59p3+bl7F3nQM+CvC21/2ExdZyl8KlY7fN41WSJYRRnqKT+Dwqq61TEc6tJ2SGaUAU5ALJAz/0V1E/sAm3JLpArNHKD0qNtAM9iLQjhUl5znua0pfHrnx0lpGokrvNZIgYbGb5wdLGWamoiLKlqqaL366FTe7IGXy0jTlviIRgXv6Lf/QXI5kQgXXGUIchAzO4m8vx4+s60TOS2R8J/b4/L/3lybVE41hwJgHsyjvhEAmne5stLpNdRibUzyZsAE=;5:PcBsvT4xBAmiBA3akdwtW7VacP39zmc517O0Pzf9R7pfo9e74vkK1ZWX/oESx0xk3K5Q113/h8hjPPP0Ew3VlNTgGDSZCiP/2ATRCRjqWnPGCAtymxKAftCBFJSjHIWFsRZWt7spfMWuAxnpqtXZgqlGslh/IWeKKK8itduPhMs=;24:drDMXCasm2ThgKTBw01uzfWpxOWcD0/k/tMOGvAv8B6GEaeol+VQ4oQqeu9jv5kxK7XKG7fzFRVBuHjNz+sdNhnT2a5DE8HoOTkhORtnGYo=;7:TpCYTiE1/5d06L1hPYZuoy8Fig7On0z6D0UwgbTK/1Me71+2yFCtq0UNM5nzLgsn+IUQ7yfKrEWdh18VSOyUO/gbxxkarYxXxvi3n0VJRmPlF2/twTnykTSVxSwhxnQcodeDYEJC7RkHDnWK6nj2+6AxnOMOpZe+EebFT7H3OslwUwUTFuIrsxtWIUX15uEZ6MHLFxoTN0QxgH2B/gJdF+U4hErW8TPpVXgVIjlHsZ+jNQypM6wL6Hjs9v2YzPhc SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:Pg2MAxlwPC2pOGkmaa8g+D8eOc7LkAi5dNZCCRkF2Ynx9o7N5TaCrl9xS3eR7V5/By76czy/aRDHrQjBZVQainMVMTr7MI6R71Axxhzwo+G1NrpSCXtElhCJz31Vl4/hfNJ/9Bc2vx5IT3SbUUMFQyOapSIGiPxR8eO5sKTay3s= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Dec 2017 18:39:35.3429 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7ee73613-99f2-43ef-80d5-08d53da1ded9 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-12-07_08:,, 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 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