OSDN Git Service

bpftool: make key optional in lookup command
authorStanislav Fomichev <sdf@google.com>
Wed, 16 Jan 2019 19:10:00 +0000 (11:10 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 17 Jan 2019 09:30:31 +0000 (10:30 +0100)
Bpftool expects key for 'lookup' operations. For some map types, key should
not be specified. Support looking up those map types.

Before:
bpftool map create /sys/fs/bpf/q type queue value 4 entries 10 name q
bpftool map update pinned /sys/fs/bpf/q value 0 1 2 3
bpftool map lookup pinned /sys/fs/bpf/q
Error: did not find key

After:
bpftool map create /sys/fs/bpf/q type queue value 4 entries 10 name q
bpftool map update pinned /sys/fs/bpf/q value 0 1 2 3
bpftool map lookup pinned /sys/fs/bpf/q
key:   value: 00 01 02 03

Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/bpf/bpftool/Documentation/bpftool-map.rst
tools/bpf/bpftool/map.c

index 1f1dfe0..f34cace 100644 (file)
@@ -26,7 +26,7 @@ MAP COMMANDS
 |              **entries** *MAX_ENTRIES* **name** *NAME* [**flags** *FLAGS*] [**dev** *NAME*]
 |      **bpftool** **map dump**       *MAP*
 |      **bpftool** **map update**     *MAP* [**key** *DATA*] [**value** *VALUE*] [*UPDATE_FLAGS*]
-|      **bpftool** **map lookup**     *MAP*  **key** *DATA*
+|      **bpftool** **map lookup**     *MAP* [**key** *DATA*]
 |      **bpftool** **map getnext**    *MAP* [**key** *DATA*]
 |      **bpftool** **map delete**     *MAP*  **key** *DATA*
 |      **bpftool** **map pin**        *MAP*  *FILE*
@@ -75,7 +75,7 @@ DESCRIPTION
                  the bytes are parsed as decimal values, unless a "0x" prefix
                  (for hexadecimal) or a "0" prefix (for octal) is provided.
 
-       **bpftool map lookup**  *MAP*  **key** *DATA*
+       **bpftool map lookup**  *MAP* [**key** *DATA*]
                  Lookup **key** in the map.
 
        **bpftool map getnext** *MAP* [**key** *DATA*]
index 61453a1..4256842 100644 (file)
@@ -865,13 +865,9 @@ static int do_lookup(int argc, char **argv)
        if (fd < 0)
                return -1;
 
-       key = malloc(info.key_size);
-       value = alloc_value(&info);
-       if (!key || !value) {
-               p_err("mem alloc failed");
-               err = -1;
+       err = alloc_key_value(&info, &key, &value);
+       if (err)
                goto exit_free;
-       }
 
        err = parse_elem(argv, &info, key, NULL, info.key_size, 0, NULL, NULL);
        if (err)
@@ -1158,7 +1154,7 @@ static int do_help(int argc, char **argv)
                "                              [dev NAME]\n"
                "       %s %s dump       MAP\n"
                "       %s %s update     MAP [key DATA] [value VALUE] [UPDATE_FLAGS]\n"
-               "       %s %s lookup     MAP  key DATA\n"
+               "       %s %s lookup     MAP [key DATA]\n"
                "       %s %s getnext    MAP [key DATA]\n"
                "       %s %s delete     MAP  key DATA\n"
                "       %s %s pin        MAP  FILE\n"