From patchwork Mon Jan 21 09:10:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Fijalkowski X-Patchwork-Id: 1028504 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="SeMAlJTU"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43jm4H0DfXz9sDB for ; Mon, 21 Jan 2019 20:10:55 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726735AbfAUJKx (ORCPT ); Mon, 21 Jan 2019 04:10:53 -0500 Received: from mail-lf1-f65.google.com ([209.85.167.65]:42023 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726693AbfAUJKw (ORCPT ); Mon, 21 Jan 2019 04:10:52 -0500 Received: by mail-lf1-f65.google.com with SMTP id l10so14909210lfh.9 for ; Mon, 21 Jan 2019 01:10:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=i6olQWHj00zzIH2loKTgVRd6QU4KBSLAOchgfcvutDQ=; b=SeMAlJTU6hxmu5f2IE4f96s8yLCBHR9lTztZSHcA4H/s7zAyHzd8O5oSOtUheOEAm3 oZAymTtt18xZALHj9Jk2ZZeOA3BhX7WWs9k+UGW2X5v/2PI3J9sqnGunK8cnRIFkcptS Bqw+gWtCQbIJRJBJo/S0kpZGpyEYmcyXQ7IOnqpSMx60T5sUqr4IQEt3woSfRXmV3GYD hVUf+LmKV3by72MTid5TtT+i2FZllxjwmKz+cCiKhEKZPwCSegIK+7HiNpYwkQv6Mlj2 KciTjZpM3QHaY91W5/QgkORbEGGwCGOUUBjdeHYRLsjLIip2E3wC+TB3GizpSZElynLO iwZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=i6olQWHj00zzIH2loKTgVRd6QU4KBSLAOchgfcvutDQ=; b=N4VaQ0aYio0gjbaWu7mNSyxFQCvTJxRf3xPLUlvaq2tYe3wdjwCEbnUltfLXkDZnkT fIeowFzKhCPP0et/Bi/wL3VDJJO3Q0hA/bGEEteETSZdroCVdmP72MdOVZZcMQYUHDHb vI40WswVctNIkT/ewzOpMM+D8pciXbXSv75kipUE9vX1XE3+lI5Q2qFEySi1mCN9TlXG c18dhIOSLqnXnHHl8liwrVN7iaJa/OzcGePd7qjHCJX2o63rc5mWWADYEo/U0PytJy8t RBOZVy8ZFy1F8WK1wicmdHrTsgG8fS2gOtGNPt9wA2jccFu64N8n5DTSONZERpGlnve+ Hysw== X-Gm-Message-State: AJcUukc2Z5zYmg/Lmub9AyAES6T6M/9AsW26DFGohLcLaoNRmTKnSHJE pbgLZKpvVXjrK49uDvJZ6+ZyfMXtxIY= X-Google-Smtp-Source: ALg8bN6W/3oPDWBGs8IIrc5gj+cibpk3ClTcsttu7mggs8WvwZYomCruOGYOy5idUxrQoKOH1+KHXw== X-Received: by 2002:a19:2906:: with SMTP id p6mr17244085lfp.17.1548061850293; Mon, 21 Jan 2019 01:10:50 -0800 (PST) Received: from localhost.localdomain (host-185-93-94-63.ip-point.pl. [185.93.94.63]) by smtp.gmail.com with ESMTPSA id q128-v6sm2169147ljq.14.2019.01.21.01.10.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 01:10:49 -0800 (PST) From: Maciej Fijalkowski To: daniel@iogearbox.net, ast@kernel.org Cc: netdev@vger.kernel.org, jakub.kicinski@netronome.com, brouer@redhat.com Subject: [PATCH bpf-next v2 1/8] libbpf: Add a helper for retrieving a map fd for a given name Date: Mon, 21 Jan 2019 10:10:34 +0100 Message-Id: <20190121091041.14666-2-maciejromanfijalkowski@gmail.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20190121091041.14666-1-maciejromanfijalkowski@gmail.com> References: <20190121091041.14666-1-maciejromanfijalkowski@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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; } +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; +} + 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;