From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753127AbdK3NqA (ORCPT ); Thu, 30 Nov 2017 08:46:00 -0500 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:40578 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752785AbdK3Nnu (ORCPT ); Thu, 30 Nov 2017 08:43:50 -0500 From: Roman Gushchin To: CC: , , , , , , Subject: [PATCH net-next 1/5] libbpf: add ability to guess program type based on section name Date: Thu, 30 Nov 2017 13:42:58 +0000 Message-ID: <20171130134302.2840-2-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: 3edd907b-d98f-4b2b-ce60-08d537f857cd 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:lnAuW6Piq4iZLTolSIvEcRD0K30e1WE3Xaq1lt4P01pOhG6p7Edh2b+dmMye6N2yNRmlr/YrlEnFuUrSxbkii3a+vScQWPNxbkV+tFvI3FYOr6IXh8V7L0Gw8jgDiaBp6bgsoADUGeUVe4PxA5XzwZip3fcjqm0iQE0Ynwm0XpVR2fk8X7etTSGlDDMCKECGmLpV39X7BxKW7iR5mjziRvrQZX9xZWZhEpyqbDPlflNwsw16T243k4wbUYNAJc4W;25:0w6AhGpzzaAVasyxfVwYn+iBQ68ICmzqu9WAAsQKaHp8PiRQTrCEB6PTj2RbdRDsP/f3Jk48/iBh+IThTZUN1lywjdL5u8QOTQZLghf5mpMF/wUNyDght3tDSO4mYLQ0DQf7yrk+/oAPHvH/dX6UoyO/8LsEJSsbhjNclvjeDCsTkn3lXXhl4jux8yb4S29DrpFj4cuTe5wDfcDRXlUJFibTgjhNdxYE1BSDblsL2iETMQv0uZ8m8OBLM60EXUAwkaUvj5/qsrNyC4cvbrRoYx1R5/jh2ZopTERmCMLeP7WDX1jf3Yg3hRO8xklY4vUE1j2UOL3Ou1fhir4UvSB4Og==;31:JI2aB8jWDrSfmbRCf6uFmh//Lnezg/NoFvuBWjMxb+Yo1Rh8jOzPhmsgeh49VPVb502/EY4xoKeYvLI4Kr6NBzVhVZ7LvCRa89jOp+BXrTAjJd2RB5/cJh0YGd08GOs6eA43SFdBqDXayejYY+2UYoNp9vO3rvl8AT9lZRKfH1iMBMEqL0C8DY2p4khUIzRkG44/9cE9nHS/gegMz3ofS7UUXq3dr5+nOM098nP6vJc= X-MS-TrafficTypeDiagnostic: CO1PR15MB1079: X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:WEu4WDw+YHCwsI0R/Jb4zbT7lMsih6hehDnxgCYjX8wZmxmw6BD5A/9HcOdBZur892cXaHjiu/0erJ9TtDWMQsCfUGZi/0wzZzuGFgXyBiLGAw3CRSoyzp2oG7ufyECMoKESvbzDbdDDQUK3KX59fZvXxR+owhVcr37sVDxaa0mgUsxZeCwr0bauPjieRqdkRquqK8MclMVxN/9noHC4IZ+Opla9WQeKxB/2YLgmKmhlzXgZ3Wpt4KkTGJ8io9ixHKx9r2yCj0zXOuItFMQfFqvAmNlPuhvR6tNxq3oSaLnTT8TokyJRnxbfYeW+X322bKXFbthsfDFESAdGqPf6ukKukt2Ahq/rVPNfW7O5JocR1HienLtpzS0uGatBDaz23Rz91m4absp3yvBDGQebPb8syjGXALnBLGQdwogWMXB3+L+SCgrJcfZjiAEWT1eHH5AIBJMRdIYHn+w9XERZgssapL267heTClv9NcDoQ4V3Q1zRtkQ9MoR9QPoTTeMO;4:L6SIMnuJqY0wazUIDE0okSwSVBp+0KhqGLzynZH9zfAtUoMQXx/W1SvD0HM3eYQ0aGk3hU6cVZqLvNT7jT3u+rjl11PqrnxaYNaAEcPn87I509KiCXOUIA6/yjE5NSUouUcQxTOehkjnZXlRm+0km+ADXQCR7R6x6HROnmKzAJSTOqi40CUAeqH64J6pfRAI2zT2XGm4IxNosgmPJRq52PEpB4q7EoL40R9DlPimQA1y7vjNxljJwS+Ee5XJlZygXtoCgZNGucnr5WDJDHY53ZqzSj1xNOU4ncssCX8KfxAmylybWyx9qxSpw6Qyis7G 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)(53416004)(86362001)(478600001)(189998001)(50466002)(52396003)(52116002)(39060400002)(53936002)(2906002)(50986010)(6116002)(81156014)(81166006)(51416003)(1076002)(8676002)(8936002)(76176010)(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:EcMx1wdf9wrI1YSbMyOJmGkYIlz0KiIOPV8YCLEec?= =?us-ascii?Q?AbKbJe6320yDcMu7Dw9oecwnzuq36zWruVXp/xrHZgk2yXvnjk7Ah/e02/yI?= =?us-ascii?Q?+abh0OdU7yALtXBOC1UsOIjbeST4nrZgUwAKNUIoWXt+GDrH0VaQl42Vu7/R?= =?us-ascii?Q?R+McvVQ6VOxI6nyH1dhZF0IEWimExJd1bysHj5raZfMaXNC90Cy9Ny3shDb2?= =?us-ascii?Q?pbGN27pxJeZRiIj++k4iVYydj8txwwFihZBOgsjyobAxPviO1BXvl99U4bes?= =?us-ascii?Q?UD2suvtZ136vB7E2R3StNSdTPxwm5EOENjATL5OqTH5JKsPu9194gyU+lgna?= =?us-ascii?Q?Ia0Xaa9HlCqvYZ/cDN0IL6WMBVcYFg1eBBzGvmOpHjWFVqNbFdL8YtWSwXZK?= =?us-ascii?Q?/4czbBrGfwiEw72c7yhS5fYgUJLBjPJousJ3Cl5+mW0av/3z/HxWF2WATZ1x?= =?us-ascii?Q?VYJ87pZyel+Gl0uztSru+wwMT3Oln6OiP5jgbLYeTyUnUs9bApVim3QL9KUV?= =?us-ascii?Q?J1JVEEQ2e2Kfu17MVJeOEJtFS8HBy6I4y9Ov+d4gQ2GiVXJ8OSrdalwA7t+q?= =?us-ascii?Q?oUE463ao8Ph8WocnZWZOVJZZAh/zo0aCXEQai4w8KuvsfcyJM+vqiICMfNp+?= =?us-ascii?Q?TZoo+RwYMBoq70cLMNauNz3X/XzF6wdbf6u5+hGZ10XKbGugM1cBKVkUxitK?= =?us-ascii?Q?ma/OOsV4hqS7a011OSkvjYjozg7K9j9oLusWYGyDNUHohga8EvlHwdEVKTbI?= =?us-ascii?Q?4zKEKr+51dpkZttPA9ZBMRv2b+ETJp70YOvDON+cKSiehibKMCYOlVqFaGai?= =?us-ascii?Q?xbHmPtZ2DpLLhc8SglDo+UUqxvowJg0IUNEnoIBlcYx0xGhLTF8M2fCuj3gk?= =?us-ascii?Q?Moycz/OT0nAjwgyfqX9vAyOV3yAFkAGcgb4DdjZfSoUiX7s1ICUUQdKpgv3N?= =?us-ascii?Q?4qmZwwY0pvBFlXQ4g4B7NmZhiQRs5EtVveL2bhxP19AH5xSSXB++K8dVPSuK?= =?us-ascii?Q?nWCiM/Yn76hLMbxg5VJtpnEoCM2sv65Hja+JzsgxCc2tYpQys3hPzjDPqOJq?= =?us-ascii?Q?Ib7PgGBvNOe8ZT/K0jM2jO+b8/cdjHcoZ3GcK8VfW3kkEsWCbLhWI8jWDHIn?= =?us-ascii?Q?k91MrWva/JNtTPVHtOkYEsPZuCjWJ/OobOQgw6aFK+B3QiW6qxfjQV+wCHPm?= =?us-ascii?Q?O85bcgBQ54uqo901W7+RS2Rdr5pp/3P61jZ?= X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;6:ZaD8H8eACjxcMXBdIsMS/gXyMhvPGS/dD6ykUFCnoi7tLY8LvHfJbpPLMcpGbJ5rd24nLbLeZ7ILfFmuYmOaFyvE7X7hU+SuNKypCjT3CUARBivFgkbKsf+h4qQDoqFeH0xKvfbWpSFZNeqvprFi3d/2WTPpYQKZ26HzmdN92eInqOc9Lk7W7Kmfni+o9TbufCNDKmSNs/18FuX64wiOZsGBD12hCX3NpEHVphwo8ObdHc5i37k2HIlUUoGHu2HqaJF7t+4pGwncXxTq/dlBLF5oDWriaHuRe3OxMyD2dk/SxW0xTIgfIFq1e9iiyFDwAYZKZYcEZ7Cum6uv6T1U+e/mNNySFv+qXkxSSCSR+xk=;5:5q7kv1dSZjFubnB6tYkqxlFf0lDkqWZdy3uMnmochRye6Xb1EPZckB3ih43u6dGOZRHfz0+yWHrHOs8r6fk1hDk4d0KaRz3JRFBTuMfJNaeqVVUX1GWhOLjz9HvKMxe9TNRWfTMUQeToNB9187Yr8JKQBF8AX/nn7PqJN3KQsko=;24:7quWZC6E+3IoC97V/qGNQb0555FEbzZv4TfAdvlnDIJSnS+UPZYeQn8pWaVwecF4BRvqhfwziQSU5kh0MWnGOzAdWi56pJviMunXGwg4DkE=;7:AiNEbXWEIJPKK2LzIX77npfeVfXyTubY6CHhrIEauuyQlecJLsIZbdaw5dnzkCxPUZaJPIjwpIVU+rmFtmW6JLMqWPPep3yNh8dZZG2dEyNwR2/606Rcnwqv0jOuSYriDyv2aZ/RjKcvkt+hxjiBQsPJ/xDMnw26e78J+wQXGXMQ8xOmFO4kPNAFufJMqIsdl50oa387AdKN1mGItS6otinlmjNs4nXAhhx/1boJUMMSui1WzWYADqxY0HisUy7U SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:W7i8M/OnNf6r/CJ7KpXi5u02mt4P3fi/XWnoLvSgZ+/H//lo9KdD46Rjk2OriHzJoPvRxXkziXQ75YXhBwyPcLbTebWiRF4TLUSvADcSNiBrIg2dHPlpJaELZT1OcIHczRM7c4zaVCG2tG/9tkI94u/8DBZis42bgE5E8LuglSk= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2017 13:43:28.7158 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3edd907b-d98f-4b2b-ce60-08d537f857cd 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 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 --- tools/lib/bpf/libbpf.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 5aa45f89da93..9f2410beaa18 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -1721,6 +1721,41 @@ 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); +static enum bpf_prog_type bpf_program__guess_type(struct bpf_program *prog) +{ + if (!prog->section_name) + goto err; + + if (strncmp(prog->section_name, "socket", 6) == 0) + return BPF_PROG_TYPE_SOCKET_FILTER; + if (strncmp(prog->section_name, "kprobe/", 7) == 0) + return BPF_PROG_TYPE_KPROBE; + if (strncmp(prog->section_name, "kretprobe/", 10) == 0) + return BPF_PROG_TYPE_KPROBE; + if (strncmp(prog->section_name, "tracepoint/", 11) == 0) + return BPF_PROG_TYPE_TRACEPOINT; + if (strncmp(prog->section_name, "xdp", 3) == 0) + return BPF_PROG_TYPE_XDP; + if (strncmp(prog->section_name, "perf_event", 10) == 0) + return BPF_PROG_TYPE_PERF_EVENT; + if (strncmp(prog->section_name, "cgroup/skb", 10) == 0) + return BPF_PROG_TYPE_CGROUP_SKB; + if (strncmp(prog->section_name, "cgroup/sock", 11) == 0) + return BPF_PROG_TYPE_CGROUP_SOCK; + if (strncmp(prog->section_name, "cgroup/dev", 10) == 0) + return BPF_PROG_TYPE_CGROUP_DEVICE; + if (strncmp(prog->section_name, "sockops", 7) == 0) + return BPF_PROG_TYPE_SOCK_OPS; + if (strncmp(prog->section_name, "sk_skb", 6) == 0) + return BPF_PROG_TYPE_SK_SKB; + +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 +1867,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