From patchwork Fri Sep 21 17:10:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Stringer X-Patchwork-Id: 973333 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="dNMLEDGX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42H0Vd6jD9z9sBn for ; Sat, 22 Sep 2018 03:11:05 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390923AbeIUXAv (ORCPT ); Fri, 21 Sep 2018 19:00:51 -0400 Received: from mail-yb1-f194.google.com ([209.85.219.194]:34974 "EHLO mail-yb1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390788AbeIUXAu (ORCPT ); Fri, 21 Sep 2018 19:00:50 -0400 Received: by mail-yb1-f194.google.com with SMTP id o63-v6so5726435yba.2 for ; Fri, 21 Sep 2018 10:11:02 -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=1xO9KN0rHYOyBidYJb3Bk5L/3YnYRS09taHCmbwFoxI=; b=dNMLEDGXLBm5fxf4gu0kf4TXbbRsyF0Wrjq1Ubfo0kofJkbthCGmb9L6w0YhnV6BP5 r3WCQJ9rx13KzOeHzxWZZ4q34I7roeRJKkRTCB1nByGA/J/pnF57kVtDpJmaoGdNZPLd wlVJqwst9LqSIhFci/hgOZ2Ovb86j47qZxaq0yOjbgQsg6FKgh4XXtTSC12iZvo13nkb D9zTJbArSDd46ciSLOqPNX1JBwIYp1/vedLtNc02vZw1vC1K30FJlJbNcI+zxoJcqT1s Xz1LnSPT8RjvTwv07dl2yZL3nFNzyGRb74ERBJnCgLYvIEed1DgwH+w6EcECuSPxInRH nlOQ== 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=1xO9KN0rHYOyBidYJb3Bk5L/3YnYRS09taHCmbwFoxI=; b=tec2aCDmJ3wNGJEM/yaY5vzC+cksWMuuvll2sXCiBqAIeWXoFS59zeFXKiPLFSpIpx W1OV2vWBmhXDGqzYculU9QoCgLMKRxRipODWUJiRlC+Z7a4kcQkf24pBcms5lQOV3SAD pEyXDbvby33BVVIIHvqQoQekwEvAeg0noIifNPRrnRT4UAlX0EOcxZOHqvmeetdwnfEb 3J8mAs+rKTt149n6i7vnYFAKQfcw4Lupweh8uiUP2p6Kp04ghKRdhbtmxPiMll0S9xG0 swD7FIQExQGcIeJvjyUJ/YwOZNpHQVP9vB3ylQwYla22ozesqODcZ/BT0XSPmyja4kMX woVg== X-Gm-Message-State: APzg51AHR32Mgb157TvuuB4lg0UEsSAywPkjma2wWUmQn96pYKQKjWhA AS+FalOMMtSnVEErdXGdZ6c= X-Google-Smtp-Source: ANB0Vdbi5CryRNBkkURqBX5S7EQ/ZMAdYC9r7sj9JBTZT7Q6GU6I2HcMe3nX+xcURlXTCyCkWuk2tA== X-Received: by 2002:a25:18d6:: with SMTP id 205-v6mr20974879yby.430.1537549861589; Fri, 21 Sep 2018 10:11:01 -0700 (PDT) Received: from localhost.localdomain ([99.0.85.34]) by smtp.gmail.com with ESMTPSA id h10-v6sm9930972ywa.35.2018.09.21.10.11.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 21 Sep 2018 10:11:01 -0700 (PDT) From: Joe Stringer To: ast@kernel.org Cc: netdev@vger.kernel.org, daniel@iogearbox.net, john.fastabend@gmail.com, tgraf@suug.ch, kafai@fb.com, nitin.hande@gmail.com, mauricio.vasquez@polito.it Subject: [PATCHv2 bpf-next 09/11] libbpf: Support loading individual progs Date: Fri, 21 Sep 2018 10:10:41 -0700 Message-Id: <20180921171043.20823-10-joe@wand.net.nz> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180921171043.20823-1-joe@wand.net.nz> References: <20180921171043.20823-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 9ca8e0e624d8..b758883bed68 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -227,7 +227,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 e3b00e23e181..40e4395f1c07 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -126,10 +126,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;