From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 01B86C282C0 for ; Wed, 23 Jan 2019 10:54:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CF6DC20861 for ; Wed, 23 Jan 2019 10:54:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727430AbfAWKyp (ORCPT ); Wed, 23 Jan 2019 05:54:45 -0500 Received: from www62.your-server.de ([213.133.104.62]:51128 "EHLO www62.your-server.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726207AbfAWKyp (ORCPT ); Wed, 23 Jan 2019 05:54:45 -0500 Received: from [78.46.172.2] (helo=sslproxy05.your-server.de) by www62.your-server.de with esmtpsa (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (Exim 4.89_1) (envelope-from ) id 1gmGB8-0008Cu-Oy; Wed, 23 Jan 2019 11:54:42 +0100 Received: from [62.203.87.61] (helo=linux.home) by sslproxy05.your-server.de with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.89) (envelope-from ) id 1gmGB8-000V6x-JQ; Wed, 23 Jan 2019 11:54:42 +0100 Subject: Re: [PATCH bpf-next v2 1/8] libbpf: Add a helper for retrieving a map fd for a given name To: Maciej Fijalkowski , ast@kernel.org Cc: netdev@vger.kernel.org, jakub.kicinski@netronome.com, brouer@redhat.com References: <20190121091041.14666-1-maciejromanfijalkowski@gmail.com> <20190121091041.14666-2-maciejromanfijalkowski@gmail.com> From: Daniel Borkmann Message-ID: <3597b94e-f4f2-473e-b7be-e7493f287d98@iogearbox.net> Date: Wed, 23 Jan 2019 11:54:41 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <20190121091041.14666-2-maciejromanfijalkowski@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Authenticated-Sender: daniel@iogearbox.net X-Virus-Scanned: Clear (ClamAV 0.100.2/25323/Wed Jan 23 03:43:38 2019) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On 01/21/2019 10:10 AM, Maciej Fijalkowski wrote: > XDP samples are mostly cooperating with eBPF maps through their file > descriptors. In case of a eBPF program that contains multiple maps it > might be tiresome to iterate through them and call bpf_map__fd for each > one. Add a helper mostly based on bpf_object__find_map_by_name, but > instead of returning the struct bpf_map pointer, return map fd. > > Bump libbpf ABI version to 0.0.2. > > Suggested-by: Jakub Kicinski > Signed-off-by: Maciej Fijalkowski > Reviewed-by: Jakub Kicinski > --- > tools/lib/bpf/libbpf.c | 12 ++++++++++++ > tools/lib/bpf/libbpf.h | 3 +++ > tools/lib/bpf/libbpf.map | 4 ++++ > 3 files changed, 19 insertions(+) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index 169e347c76f6..dc838bea403f 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -2840,6 +2840,18 @@ bpf_object__find_map_by_name(struct bpf_object *obj, const char *name) > return NULL; > } Application could just do: bpf_map__fd(bpf_object__find_map_by_name(...)) or bpf_object__find_map_by_name(...)->fd as both are exposed via library, though I guess it may be okay to have a helper for it as it feels this might be needed in many cases. > +int > +bpf_object__find_map_fd_by_name(struct bpf_object *obj, const char *name) > +{ > + struct bpf_map *pos; > + > + bpf_map__for_each(pos, obj) { > + if (pos->name && !strcmp(pos->name, name)) > + return bpf_map__fd(pos); > + } > + return -ENOENT; Can we instead just do: int bpf_object__find_map_fd_by_name(struct bpf_object *obj, const char *name) { return bpf_map__fd(bpf_object__find_map_by_name(obj, name)); } > +} > + > struct bpf_map * > bpf_object__find_map_by_offset(struct bpf_object *obj, size_t offset) > { > diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h > index 5f68d7b75215..7f10d36abdde 100644 > --- a/tools/lib/bpf/libbpf.h > +++ b/tools/lib/bpf/libbpf.h > @@ -264,6 +264,9 @@ struct bpf_map; > LIBBPF_API struct bpf_map * > bpf_object__find_map_by_name(struct bpf_object *obj, const char *name); > > +LIBBPF_API int > +bpf_object__find_map_fd_by_name(struct bpf_object *obj, const char *name); > + > /* > * Get bpf_map through the offset of corresponding struct bpf_map_def > * in the BPF object file. > diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map > index cd02cd4e2cc3..7c59e4f64082 100644 > --- a/tools/lib/bpf/libbpf.map > +++ b/tools/lib/bpf/libbpf.map > @@ -124,3 +124,7 @@ LIBBPF_0.0.1 { > local: > *; > }; > +LIBBPF_0.0.2 { > + global: > + bpf_object__find_map_fd_by_name; > +} LIBBPF_0.0.1; >