From patchwork Thu Sep 27 23:26:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Stringer X-Patchwork-Id: 975965 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=none (p=none dis=none) header.from=wand.net.nz Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="LomPqJwB"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42LrZ801Pdz9s1c for ; Fri, 28 Sep 2018 09:27:28 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728665AbeI1FsD (ORCPT ); Fri, 28 Sep 2018 01:48:03 -0400 Received: from mail-yb1-f194.google.com ([209.85.219.194]:34074 "EHLO mail-yb1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728587AbeI1FsC (ORCPT ); Fri, 28 Sep 2018 01:48:02 -0400 Received: by mail-yb1-f194.google.com with SMTP id 184-v6so1895822ybg.1 for ; Thu, 27 Sep 2018 16:27:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=NwrBdoHpGXkbF4CR4IoXyp18P+V8ZtKfOzZv1FXlNrE=; b=LomPqJwBoFK8HJXc563t3xkzAgM4PyViC0igog4sm5rTDdDs+j1NkKRHvvK8GZ/9vi 4M0um35iNOiuL7VLI87kFQzgSkYU2FjfbtPpxo3i6UWaAn8Huouv5biZUXNE5HUc+cSg dMv9EEAqJXGsWaX/ZfGVnoa9bjWlSsovAeqF8mGtnRvxc0acIYa9z7pEJvFEegjlxD8W mWPvAlCWUExAqNNQyo770phg+Ey1q9P/zg3ZcInBZe6lIsOCrcU+x/SpOBrCtnKlDkr1 QW1E7bxoxrLQC39kClIlzVZ0nPxbqwPM6wRlfr4WtVdOcloNRYiOGJSKF9g5+/RDMVhy 25ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=NwrBdoHpGXkbF4CR4IoXyp18P+V8ZtKfOzZv1FXlNrE=; b=isfvAgtduLOmbtuF+3L8/bzkfCDUX078aS7GEtSdieNrqDgljVBT2ydlR+CEoExfiu Ij3cgKbbfwp1ZadhUv6BoXjYu65XqoA/mQGy/J5D3B8Gowe8xOeabneUwYi2SKl/yd64 rWHo3aJx4pniAYZO7K58wJIGSag1ZjEPY/fKXKhxe+KxhAXVCyX2B8E/RXezdXrsHEMq O73JONADUxcNtEYMW5U7cLnHcRucyPfsfaZPjBcRWwZozU+KSHY99AIoaMvFRQU0o/lh sy7RTXlz0lZtWSUNE0govqDlhgDkr+Qu1EWmyQpTl3w7Nm1eRDASu8E2mI88VsbIrPQT mvjg== X-Gm-Message-State: ABuFfojtUSnxuh3op7YtjO04udz+Eu4ZOufud77Bpj3hUIwFnGALNkgZ TLyMNxIDKs2Bu+aF1gqaXjs= X-Google-Smtp-Source: ACcGV63sQ5E4boknuIG/mQfSkZzQXawJsLSA5rmwtfXE95tsguGGsmKzhd3QnNm8KRJOthlCdZCctw== X-Received: by 2002:a25:4049:: with SMTP id n70-v6mr7403779yba.11.1538090837450; Thu, 27 Sep 2018 16:27:17 -0700 (PDT) Received: from localhost.localdomain ([99.0.85.34]) by smtp.gmail.com with ESMTPSA id w6-v6sm4810717ywg.3.2018.09.27.16.27.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Sep 2018 16:27:17 -0700 (PDT) From: Joe Stringer To: daniel@iogearbox.net Cc: netdev@vger.kernel.org, ast@kernel.org, john.fastabend@gmail.com, tgraf@suug.ch, kafai@fb.com, nitin.hande@gmail.com, mauricio.vasquez@polito.it Subject: [PATCHv3 bpf-next 10/12] libbpf: Support loading individual progs Date: Thu, 27 Sep 2018 16:26:57 -0700 Message-Id: <20180927232659.14348-11-joe@wand.net.nz> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180927232659.14348-1-joe@wand.net.nz> References: <20180927232659.14348-1-joe@wand.net.nz> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Allow the individual program load to be invoked. This will help with testing, where a single ELF may contain several sections, some of which denote subprograms that are expected to fail verification, along with some which are expected to pass verification. By allowing programs to be iterated and individually loaded, each program can be independently checked against its expected verification result. Signed-off-by: Joe Stringer Acked-by: Alexei Starovoitov --- tools/lib/bpf/libbpf.c | 4 ++-- tools/lib/bpf/libbpf.h | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 425d5ca45c97..9e68fd9fcfca 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -228,7 +228,7 @@ struct bpf_object { }; #define obj_elf_valid(o) ((o)->efile.elf) -static void bpf_program__unload(struct bpf_program *prog) +void bpf_program__unload(struct bpf_program *prog) { int i; @@ -1375,7 +1375,7 @@ load_program(enum bpf_prog_type type, enum bpf_attach_type expected_attach_type, return ret; } -static int +int bpf_program__load(struct bpf_program *prog, char *license, u32 kern_version) { diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index 511c1294dcbf..2ed24d3f80b3 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -128,10 +128,13 @@ void bpf_program__set_ifindex(struct bpf_program *prog, __u32 ifindex); const char *bpf_program__title(struct bpf_program *prog, bool needs_copy); +int bpf_program__load(struct bpf_program *prog, char *license, + u32 kern_version); int bpf_program__fd(struct bpf_program *prog); int bpf_program__pin_instance(struct bpf_program *prog, const char *path, int instance); int bpf_program__pin(struct bpf_program *prog, const char *path); +void bpf_program__unload(struct bpf_program *prog); struct bpf_insn;