From patchwork Fri Nov 9 16:21:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 10676265 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0DA4714BD for ; Fri, 9 Nov 2018 16:22:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F1A2F2EE87 for ; Fri, 9 Nov 2018 16:22:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E5E992EEBA; Fri, 9 Nov 2018 16:22:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, USER_IN_DEF_DKIM_WL autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6DE0F2EEAC for ; Fri, 9 Nov 2018 16:22:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728542AbeKJCDU (ORCPT ); Fri, 9 Nov 2018 21:03:20 -0500 Received: from mail-io1-f73.google.com ([209.85.166.73]:53511 "EHLO mail-io1-f73.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728532AbeKJCDU (ORCPT ); Fri, 9 Nov 2018 21:03:20 -0500 Received: by mail-io1-f73.google.com with SMTP id z17-v6so2689774iol.20 for ; Fri, 09 Nov 2018 08:22:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=omwxHf5jMMNd3V1X+Ctrwq7jQeeI7VFLwXOIdYMYMx0=; b=YypxGcPZDw7eVfAIjo0jh4S4Ts11AAboDNDkIbrDxm37G4GBu93fgYsYaDp/ZRkgOx VYeMtkv/MviBQMmFPtHSomdIApYN2sE1TjaVqr1rDeZsVci9GRxd70yypUw5s3RWijSW msDu4UheUyiLuz+5lNXOPD7SnW86girIyD5oM6fTVo785CqFT3XTxPQDh0qLqebFu49t pj/rSuQ/0VgYxIwzqd0foufSN/PlA+7XqBkLwQ4tECf1MNNiZHK0NMpopevWWyK/KuUJ 5NV6dtXWkzhWzCF831LGZPO3jHBkJQFjJc833fJB/afwxdghAlms5/Qft2tEKxCbA94K INrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=omwxHf5jMMNd3V1X+Ctrwq7jQeeI7VFLwXOIdYMYMx0=; b=MnqxPV3LD/6OQKhfNjA7oUpgjo81UEk1HP3htjZQ+x9G8cRQHlFuXSpZyIpf8+R8Fb vqT75B55KYVv3YROPTX2mWhpARxi7v03GsIcqb9iNOep0ZREGhEWqz5qC5/RZNvNMq4i xoPNj61FAJ/E9HfwlbXgbTDPkZd515psmp0cRkeuUWheLLO4T5m/di4fjMtuxcz/9mJb 8GAd0yO6Pw/Df7diAlO41VbDZvz9GdP5ApN+Z7G+7YTGEXbIdEUzLRVQasVPLZkiwLp/ +SIBFYR1CAZCveYgOf3OCWfRZvfhJak3AZJ0RwMRYY0fEMgOjcXLfKdY9p9lnFEhYCcM d+pw== X-Gm-Message-State: AGRZ1gJW+wdh/rhCSEhMV5wcsA0xW369PPz0KgrWTHWEihf3pipULmxJ kdn1M7l3hpZNZi7yNc0AVD5Y/XI= X-Google-Smtp-Source: AJdET5ebBoVayoI6GwJBBHT8oIEoar6zjR8N/iusSpzXUsyfz5ZXRcnL5tD7WPHVjIeqD6uHiR4++l0= X-Received: by 2002:a24:2c91:: with SMTP id i139-v6mr2535991iti.40.1541780524314; Fri, 09 Nov 2018 08:22:04 -0800 (PST) Date: Fri, 9 Nov 2018 08:21:45 -0800 In-Reply-To: <20181109162146.78019-1-sdf@google.com> Message-Id: <20181109162146.78019-7-sdf@google.com> Mime-Version: 1.0 References: <20181109162146.78019-1-sdf@google.com> X-Mailer: git-send-email 2.19.1.930.g4563a0d9d0-goog Subject: [PATCH v5 bpf-next 6/7] bpftool: add pinmaps argument to the load/loadall From: Stanislav Fomichev To: netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, ast@kernel.org, daniel@iogearbox.net, shuah@kernel.org, jakub.kicinski@netronome.com, quentin.monnet@netronome.com Cc: guro@fb.com, jiong.wang@netronome.com, sdf@google.com, bhole_prashant_q7@lab.ntt.co.jp, john.fastabend@gmail.com, jbenc@redhat.com, treeze.taeung@gmail.com, yhs@fb.com, osk@fb.com, sandipan@linux.vnet.ibm.com Sender: linux-kselftest-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This new additional argument lets users pin all maps from the object at specified path. Signed-off-by: Stanislav Fomichev Acked-by: Jakub Kicinski --- .../bpftool/Documentation/bpftool-prog.rst | 4 +++- tools/bpf/bpftool/bash-completion/bpftool | 3 ++- tools/bpf/bpftool/prog.c | 24 ++++++++++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/tools/bpf/bpftool/Documentation/bpftool-prog.rst b/tools/bpf/bpftool/Documentation/bpftool-prog.rst index 984d125c507a..15e9172f7e55 100644 --- a/tools/bpf/bpftool/Documentation/bpftool-prog.rst +++ b/tools/bpf/bpftool/Documentation/bpftool-prog.rst @@ -80,7 +80,7 @@ DESCRIPTION contain a dot character ('.'), which is reserved for future extensions of *bpffs*. - **bpftool prog { load | loadall }** *OBJ* *PATH* [**type** *TYPE*] [**map** {**idx** *IDX* | **name** *NAME*} *MAP*] [**dev** *NAME*] + **bpftool prog { load | loadall }** *OBJ* *PATH* [**type** *TYPE*] [**map** {**idx** *IDX* | **name** *NAME*} *MAP*] [**dev** *NAME*] [**pinmaps** *MAP_DIR*] Load bpf program(s) from binary *OBJ* and pin as *PATH*. **bpftool prog load** pins only the first program from the *OBJ* as *PATH*. **bpftool prog loadall** pins all programs @@ -96,6 +96,8 @@ DESCRIPTION use, referring to it by **id** or through a **pinned** file. If **dev** *NAME* is specified program will be loaded onto given networking device (offload). + Optional **pinmaps** argument can be provided to pin all + maps under *MAP_DIR* directory. Note: *PATH* must be located in *bpffs* mount. It must not contain a dot character ('.'), which is reserved for future diff --git a/tools/bpf/bpftool/bash-completion/bpftool b/tools/bpf/bpftool/bash-completion/bpftool index 780ebafb756a..a05d0071f39f 100644 --- a/tools/bpf/bpftool/bash-completion/bpftool +++ b/tools/bpf/bpftool/bash-completion/bpftool @@ -346,7 +346,7 @@ _bpftool() _bpftool_get_map_ids return 0 ;; - pinned) + pinned|pinmaps) _filedir return 0 ;; @@ -358,6 +358,7 @@ _bpftool() COMPREPLY=( $( compgen -W "map" -- "$cur" ) ) _bpftool_once_attr 'type' _bpftool_once_attr 'dev' + _bpftool_once_attr 'pinmaps' return 0 ;; esac diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index 3abfee5533e6..4bd6ad19fc05 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c @@ -802,6 +802,7 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) struct map_replace *map_replace = NULL; struct bpf_program *prog = NULL, *pos; unsigned int old_map_fds = 0; + const char *pinmaps = NULL; struct bpf_object *obj; struct bpf_map *map; const char *pinfile; @@ -906,6 +907,13 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) goto err_free_reuse_maps; } NEXT_ARG(); + } else if (is_prefix(*argv, "pinmaps")) { + NEXT_ARG(); + + if (!REQ_ARGS(1)) + goto err_free_reuse_maps; + + pinmaps = GET_ARG(); } else { p_err("expected no more arguments, 'type', 'map' or 'dev', got: '%s'?", *argv); @@ -1026,6 +1034,14 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) } } + if (pinmaps) { + err = bpf_object__pin_maps(obj, pinmaps); + if (err) { + p_err("failed to pin all maps"); + goto err_unpin; + } + } + if (json_output) jsonw_null(json_wtr); @@ -1036,6 +1052,11 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) return 0; +err_unpin: + if (first_prog_only) + unlink(pinfile); + else + bpf_object__unpin_programs(obj, pinfile); err_close_obj: bpf_object__close(obj); err_free_reuse_maps: @@ -1069,7 +1090,8 @@ static int do_help(int argc, char **argv) " %s %s pin PROG FILE\n" " %s %s { load | loadall } OBJ PATH \\\n" " [type TYPE] [dev NAME] \\\n" - " [map { idx IDX | name NAME } MAP]\n" + " [map { idx IDX | name NAME } MAP]\\\n" + " [pinmaps MAP_DIR]\n" " %s %s attach PROG ATTACH_TYPE MAP\n" " %s %s detach PROG ATTACH_TYPE MAP\n" " %s %s help\n"