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.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, 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 ECC77C282C0 for ; Wed, 23 Jan 2019 14:04:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B36FD21850 for ; Wed, 23 Jan 2019 14:04:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="pDEGSxeC" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726277AbfAWOD7 (ORCPT ); Wed, 23 Jan 2019 09:03:59 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:33976 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726122AbfAWOD7 (ORCPT ); Wed, 23 Jan 2019 09:03:59 -0500 Received: by mail-pg1-f195.google.com with SMTP id j10so1137255pga.1 for ; Wed, 23 Jan 2019 06:03:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=M9E3H6KS5Hi5mdHeCUIX4SRVWOX1PDUpisbaLum0w0I=; b=pDEGSxeCBXyCe7oLButGWjOpSMxylII2d4hYZ0NyxrhRm93FVVMVH0zlxcBARZ6ZUc 8GpZmTJ1PA2RGem4cWyYw+PpPqaIu3nNu+CckXvwHhH4kCJrnIT0GlOms2s7o4FjXjqr Wy8sUDpZfjnOjMUozSaaaXjKSAM4kjR+eRBDZWkm5DupVDIfnMX4uq/dWygVdycR1EnE LglVZQm+vzr9TE4Z6ft3qTp2/YkFC30NE+8vfTUmW+cHPWV9MicWWL9avzbv1GHZ3YNc zoYwNyxl9oZUrTALnjZYlANDXqd1wKZ4oY5dUG/7be1W9afz7l8QqYq03bdrhICPqIPP xCmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=M9E3H6KS5Hi5mdHeCUIX4SRVWOX1PDUpisbaLum0w0I=; b=VJRQGXGIX2yx15RF0xwpNDKY4pBy5oq4rC9E+skx7cRvzhitGXDrY9hneC/DVjjD8v o06Z2cmdjA+X4NnMafc/3S/Br4NvscY5Xv2QqHlQjmIZCxZvgwigIQmKtIOj32VKvdzw +pSiMzILYsZoyZ3WRcvfgR72OjlkGjka+eo8prNBRkoVA512VcymUe6HvAAW+hVyQbE0 wO57MVLLIUP4ZiuU2Aw3wwrC0H9rVKsviWzUmZTg3hGoIGrFoozjp0o8rmLJ5l0jLbKm yjtvX2vzxBbw6HM72CZm+v29ZIviNxtEznVu5j0yE442p4R1/sJySb/7sCb3N7tl4eBb Lcog== X-Gm-Message-State: AJcUukfz9Vsl/1P/zE75fdz6i/ZCY8s4UOiKhpbzO/kghZJsZreoKG2S Zr1i8VeRN//DmRTKLuKXVVmsTyfPMNw= X-Google-Smtp-Source: ALg8bN4M6n0wX7c7B1g3oiluYLr8h2/u07rSd3PCFVP9FQ/m+5K2lrbv0NkfRbUDO/wttuJJxqS9ow== X-Received: by 2002:a63:e80e:: with SMTP id s14mr2069435pgh.30.1548252238123; Wed, 23 Jan 2019 06:03:58 -0800 (PST) Received: from localhost ([192.55.54.42]) by smtp.gmail.com with ESMTPSA id k14sm26921909pgs.52.2019.01.23.06.03.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 23 Jan 2019 06:03:57 -0800 (PST) Date: Wed, 23 Jan 2019 15:03:50 +0100 From: Maciej Fijalkowski To: Daniel Borkmann Cc: ast@kernel.org, netdev@vger.kernel.org, jakub.kicinski@netronome.com, brouer@redhat.com Subject: Re: [PATCH bpf-next v2 1/8] libbpf: Add a helper for retrieving a map fd for a given name Message-ID: <20190123150350.00004569@gmail.com> In-Reply-To: <3597b94e-f4f2-473e-b7be-e7493f287d98@iogearbox.net> References: <20190121091041.14666-1-maciejromanfijalkowski@gmail.com> <20190121091041.14666-2-maciejromanfijalkowski@gmail.com> <3597b94e-f4f2-473e-b7be-e7493f287d98@iogearbox.net> X-Mailer: Claws Mail 3.17.1 (GTK+ 2.24.32; x86_64-w64-mingw32) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Wed, 23 Jan 2019 11:54:41 +0100 Daniel Borkmann wrote: > 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)); > } > Yes of course, I will send v3 once we figure out what's the best way to supply the prog section name for xdp_redirect_cpu. > > +} > > + > > 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; > > >