From patchwork Mon Jan 21 09:10:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Fijalkowski X-Patchwork-Id: 1028506 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="ii90cEw7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43jm4L3vtcz9s55 for ; Mon, 21 Jan 2019 20:10:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726837AbfAUJK4 (ORCPT ); Mon, 21 Jan 2019 04:10:56 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:37412 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726750AbfAUJKy (ORCPT ); Mon, 21 Jan 2019 04:10:54 -0500 Received: by mail-lf1-f66.google.com with SMTP id y11so14935309lfj.4 for ; Mon, 21 Jan 2019 01:10:53 -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=ZiRdv696nJTKB52XuCkMKz0af2e6uOjOdbfRUQ2QZQo=; b=ii90cEw7eKeiS5U2tv8mR/IwSii3TKv+hf4yJWAuMTMkwIIVwNNNB9EsniCf0T3IGM i9twJriUU9/A7FwL4Y4eer2P7Ngbm/8LvvvGblG+DIGMqp7D1SKF5dpYQgjojd4dTOKJ Hib+aQ1jZMoShUxTtXCFlu7IUBTZHme35uuQrpyfdTecGgz2sfOGqiUXT1SVCUmj85IT RUN3mSikGn33yNDkBKWIeZrLOGW5qLMIuq8QMzr2pAzYRfcfq4aetwud5b6B5nxCIz12 hAyiT1+OGyah6Mm4jGzgXhmEmHyZCcslYhqLu0IAC6zeYB2BnUPbUpou6QVR61N+ylJ4 SZmA== 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=ZiRdv696nJTKB52XuCkMKz0af2e6uOjOdbfRUQ2QZQo=; b=kk4yslRhy1SH3T2HcNuO3wU9n6lRPFX3AWPDXBTYrtUhzAvGq1yILDYME7xY+xmFhI htlPEZJeuXFliGlKMS9HmQd2ewRX7exrSGjXPEFDxelOscrIYboJ1hKFpzzIsTfb1kAs lGctHkufzD9TfXhHOyUxeugdaNlyozoj37e/62oBcQ64gizfTrvt96mGSck69MkX12ki 7At+r8HHlLaLGKQbaxWtAQFqJaCNwmWlNe29WNPWlkzzWi4J25SfTCzkaIY5KO5PMLjB 4wBrRqEKzWN6b9wMYnfd/hn22nzLmT0kAk9eC4hfG0BlDT09OdL7MxAIJUbH0HRjC4eJ +mtA== X-Gm-Message-State: AJcUukeGcIGjpxZmFXqDmKdEFnUv3Z5kHrW8HJS/OudmCwkDgWuoBzzl vCcQ7A+fU/iDHObXczdgicw= X-Google-Smtp-Source: ALg8bN7g9HoVZzXwQPVOor6HgnCpidwP1Z7n4gDw+sHN29Bi8WRV8EH5muZxWcjMl7ziqgXTS4S4Nw== X-Received: by 2002:a19:4849:: with SMTP id v70mr17320577lfa.62.1548061851196; Mon, 21 Jan 2019 01:10:51 -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.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 01:10:50 -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 2/8] libbpf: Add a helper for retrieving a prog via index Date: Mon, 21 Jan 2019 10:10:35 +0100 Message-Id: <20190121091041.14666-3-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_redirect_cpu has a 6 different XDP programs that can be attached to network interface. This sample has a option --prognum that allows user for specifying which particular program from a given set will be attached to network interface. In order to make it easier when converting the mentioned sample to libbpf usage, add a function to libbpf that will return program's fd for a given index. Note that there is already a bpf_object__find_prog_by_idx, which could be exported and might be used for that purpose, but it operates on the number of ELF section and here we need an index from a programs array within the bpf_object. Signed-off-by: Maciej Fijalkowski Reviewed-by: Jakub Kicinski --- tools/lib/bpf/libbpf.c | 8 ++++++++ tools/lib/bpf/libbpf.h | 3 +++ tools/lib/bpf/libbpf.map | 1 + 3 files changed, 12 insertions(+) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index dc838bea403f..21c84d0f6128 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -935,6 +935,14 @@ static int bpf_object__elf_collect(struct bpf_object *obj, int flags) return err; } +int +bpf_object__get_prog_fd_by_num(struct bpf_object *obj, int idx) +{ + if (idx >= 0 && idx < obj->nr_programs) + return bpf_program__fd(&obj->programs[idx]); + return -ENOENT; +} + static struct bpf_program * bpf_object__find_prog_by_idx(struct bpf_object *obj, int idx) { diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index 7f10d36abdde..ca1b381cb3ad 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -95,6 +95,9 @@ LIBBPF_API int bpf_object__btf_fd(const struct bpf_object *obj); LIBBPF_API struct bpf_program * bpf_object__find_program_by_title(struct bpf_object *obj, const char *title); +LIBBPF_API int +bpf_object__get_prog_fd_by_num(struct bpf_object *obj, int idx); + LIBBPF_API struct bpf_object *bpf_object__next(struct bpf_object *prev); #define bpf_object__for_each_safe(pos, tmp) \ for ((pos) = bpf_object__next(NULL), \ diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map index 7c59e4f64082..871d2fc07150 100644 --- a/tools/lib/bpf/libbpf.map +++ b/tools/lib/bpf/libbpf.map @@ -127,4 +127,5 @@ LIBBPF_0.0.1 { LIBBPF_0.0.2 { global: bpf_object__find_map_fd_by_name; + bpf_object__get_prog_fd_by_num; } LIBBPF_0.0.1;