diff options
author | Jakub Kicinski <jakub.kicinski@netronome.com> | 2018-10-15 16:30:36 -0700 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2018-10-15 16:39:21 -0700 |
commit | 0b592b5a01bef5416472ec610d3191e019c144a5 (patch) | |
tree | d823270ded921a40ce37d54b4bdfbf607c8f402b /tools/bpf/bpftool/common.c | |
parent | 2f1d774f7d356a7e95ac7c41373d518cf0d716c7 (diff) | |
download | linux-0b592b5a01bef5416472ec610d3191e019c144a5.tar.gz linux-0b592b5a01bef5416472ec610d3191e019c144a5.tar.bz2 linux-0b592b5a01bef5416472ec610d3191e019c144a5.zip |
tools: bpftool: add map create command
Add a way of creating maps from user space. The command takes
as parameters most of the attributes of the map creation system
call command. After map is created its pinned to bpffs. This makes
it possible to easily and dynamically (without rebuilding programs)
test various corner cases related to map creation.
Map type names are taken from bpftool's array used for printing.
In general these days we try to make use of libbpf type names, but
there are no map type names in libbpf as of today.
As with most features I add the motivation is testing (offloads) :)
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'tools/bpf/bpftool/common.c')
-rw-r--r-- | tools/bpf/bpftool/common.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c index b3a0709ea7ed..3318da8060bd 100644 --- a/tools/bpf/bpftool/common.c +++ b/tools/bpf/bpftool/common.c @@ -618,3 +618,24 @@ void print_dev_json(__u32 ifindex, __u64 ns_dev, __u64 ns_inode) jsonw_string_field(json_wtr, "ifname", name); jsonw_end_object(json_wtr); } + +int parse_u32_arg(int *argc, char ***argv, __u32 *val, const char *what) +{ + char *endptr; + + NEXT_ARGP(); + + if (*val) { + p_err("%s already specified", what); + return -1; + } + + *val = strtoul(**argv, &endptr, 0); + if (*endptr) { + p_err("can't parse %s as %s", **argv, what); + return -1; + } + NEXT_ARGP(); + + return 0; +} |