netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH bpf-next 0/2] bpf: add bpffs/bpftool dump for prog_array and map_in_map maps
@ 2018-09-07  0:26 Yonghong Song
  2018-09-07  0:26 ` [PATCH bpf-next 1/2] bpf: add bpffs pretty print for program array map Yonghong Song
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Yonghong Song @ 2018-09-07  0:26 UTC (permalink / raw)
  To: ast, daniel, netdev; +Cc: kernel-team

The support to dump program array and map_in_map maps
for bpffs and bpftool is added. Patch #1 added bpffs support
and Patch #2 added bpftool support. Please see
individual patches for example output.

Yonghong Song (2):
  bpf: add bpffs pretty print for program array map
  tools/bpf: bpftool: support prog array map and map of maps

 kernel/bpf/arraymap.c   | 25 ++++++++++++++++++++++++-
 tools/bpf/bpftool/map.c | 11 +++--------
 2 files changed, 27 insertions(+), 9 deletions(-)

-- 
2.17.1

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH bpf-next 1/2] bpf: add bpffs pretty print for program array map
  2018-09-07  0:26 [PATCH bpf-next 0/2] bpf: add bpffs/bpftool dump for prog_array and map_in_map maps Yonghong Song
@ 2018-09-07  0:26 ` Yonghong Song
  2018-09-07  0:26 ` [PATCH bpf-next 2/2] tools/bpf: bpftool: support prog array map and map of maps Yonghong Song
  2018-09-11 21:20 ` [PATCH bpf-next 0/2] bpf: add bpffs/bpftool dump for prog_array and map_in_map maps Alexei Starovoitov
  2 siblings, 0 replies; 4+ messages in thread
From: Yonghong Song @ 2018-09-07  0:26 UTC (permalink / raw)
  To: ast, daniel, netdev; +Cc: kernel-team

Added bpffs pretty print for program array map. For a particular
array index, if the program array points to a valid program,
the "<index>: <prog_id>" will be printed out like
   0: 6
which means bpf program with id "6" is installed at index "0".

Signed-off-by: Yonghong Song <yhs@fb.com>
---
 kernel/bpf/arraymap.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/kernel/bpf/arraymap.c b/kernel/bpf/arraymap.c
index f9d24121be99..dded84cbe814 100644
--- a/kernel/bpf/arraymap.c
+++ b/kernel/bpf/arraymap.c
@@ -553,6 +553,29 @@ static void bpf_fd_array_map_clear(struct bpf_map *map)
 		fd_array_map_delete_elem(map, &i);
 }
 
+static void prog_array_map_seq_show_elem(struct bpf_map *map, void *key,
+					 struct seq_file *m)
+{
+	void **elem, *ptr;
+	u32 prog_id;
+
+	rcu_read_lock();
+
+	elem = array_map_lookup_elem(map, key);
+	if (elem) {
+		ptr = READ_ONCE(*elem);
+		if (ptr) {
+			seq_printf(m, "%u: ", *(u32 *)key);
+			prog_id = prog_fd_array_sys_lookup_elem(ptr);
+			btf_type_seq_show(map->btf, map->btf_value_type_id,
+					  &prog_id, m);
+			seq_puts(m, "\n");
+		}
+	}
+
+	rcu_read_unlock();
+}
+
 const struct bpf_map_ops prog_array_map_ops = {
 	.map_alloc_check = fd_array_map_alloc_check,
 	.map_alloc = array_map_alloc,
@@ -564,7 +587,7 @@ const struct bpf_map_ops prog_array_map_ops = {
 	.map_fd_put_ptr = prog_fd_array_put_ptr,
 	.map_fd_sys_lookup_elem = prog_fd_array_sys_lookup_elem,
 	.map_release_uref = bpf_fd_array_map_clear,
-	.map_check_btf = map_check_no_btf,
+	.map_seq_show_elem = prog_array_map_seq_show_elem,
 };
 
 static struct bpf_event_entry *bpf_event_entry_gen(struct file *perf_file,
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH bpf-next 2/2] tools/bpf: bpftool: support prog array map and map of maps
  2018-09-07  0:26 [PATCH bpf-next 0/2] bpf: add bpffs/bpftool dump for prog_array and map_in_map maps Yonghong Song
  2018-09-07  0:26 ` [PATCH bpf-next 1/2] bpf: add bpffs pretty print for program array map Yonghong Song
@ 2018-09-07  0:26 ` Yonghong Song
  2018-09-11 21:20 ` [PATCH bpf-next 0/2] bpf: add bpffs/bpftool dump for prog_array and map_in_map maps Alexei Starovoitov
  2 siblings, 0 replies; 4+ messages in thread
From: Yonghong Song @ 2018-09-07  0:26 UTC (permalink / raw)
  To: ast, daniel, netdev; +Cc: kernel-team

Currently, prog array map and map of maps are not supported
in bpftool. This patch added the support.
Different from other map types, for prog array map and
map of maps, the key returned bpf_get_next_key() may not
point to a valid value. So for these two map types,
no error will be printed out when such a scenario happens.

The following is the plain and json dump if btf is not available:
  $ ./bpftool map dump id 10
    key: 08 00 00 00  value: 5c 01 00 00
    Found 1 element
  $ ./bpftool -jp map dump id 10
    [{
        "key": ["0x08","0x00","0x00","0x00"
        ],
        "value": ["0x5c","0x01","0x00","0x00"
        ]
    }]

If the BTF is available, the dump looks below:
  $ ./bpftool map dump id 2
    [{
            "key": 0,
            "value": 7
        }
    ]
  $ ./bpftool -jp map dump id 2
    [{
        "key": ["0x00","0x00","0x00","0x00"
        ],
        "value": ["0x07","0x00","0x00","0x00"
        ],
        "formatted": {
            "key": 0,
            "value": 7
        }
    }]

Signed-off-by: Yonghong Song <yhs@fb.com>
---
 tools/bpf/bpftool/map.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c
index 9c55077ca5dd..af8ad32fa6e9 100644
--- a/tools/bpf/bpftool/map.c
+++ b/tools/bpf/bpftool/map.c
@@ -673,12 +673,6 @@ static int do_dump(int argc, char **argv)
 	if (fd < 0)
 		return -1;
 
-	if (map_is_map_of_maps(info.type) || map_is_map_of_progs(info.type)) {
-		p_err("Dumping maps of maps and program maps not supported");
-		close(fd);
-		return -1;
-	}
-
 	key = malloc(info.key_size);
 	value = alloc_value(&info);
 	if (!key || !value) {
@@ -732,7 +726,9 @@ static int do_dump(int argc, char **argv)
 				} else {
 					print_entry_plain(&info, key, value);
 				}
-		} else {
+			num_elems++;
+		} else if (!map_is_map_of_maps(info.type) &&
+			   !map_is_map_of_progs(info.type)) {
 			if (json_output) {
 				jsonw_name(json_wtr, "key");
 				print_hex_data_json(key, info.key_size);
@@ -749,7 +745,6 @@ static int do_dump(int argc, char **argv)
 		}
 
 		prev_key = key;
-		num_elems++;
 	}
 
 	if (json_output)
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH bpf-next 0/2] bpf: add bpffs/bpftool dump for prog_array and map_in_map maps
  2018-09-07  0:26 [PATCH bpf-next 0/2] bpf: add bpffs/bpftool dump for prog_array and map_in_map maps Yonghong Song
  2018-09-07  0:26 ` [PATCH bpf-next 1/2] bpf: add bpffs pretty print for program array map Yonghong Song
  2018-09-07  0:26 ` [PATCH bpf-next 2/2] tools/bpf: bpftool: support prog array map and map of maps Yonghong Song
@ 2018-09-11 21:20 ` Alexei Starovoitov
  2 siblings, 0 replies; 4+ messages in thread
From: Alexei Starovoitov @ 2018-09-11 21:20 UTC (permalink / raw)
  To: Yonghong Song; +Cc: ast, daniel, netdev, kernel-team

On Thu, Sep 06, 2018 at 05:26:03PM -0700, Yonghong Song wrote:
> The support to dump program array and map_in_map maps
> for bpffs and bpftool is added. Patch #1 added bpffs support
> and Patch #2 added bpftool support. Please see
> individual patches for example output.

Applied, Thanks

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-09-12  2:22 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-07  0:26 [PATCH bpf-next 0/2] bpf: add bpffs/bpftool dump for prog_array and map_in_map maps Yonghong Song
2018-09-07  0:26 ` [PATCH bpf-next 1/2] bpf: add bpffs pretty print for program array map Yonghong Song
2018-09-07  0:26 ` [PATCH bpf-next 2/2] tools/bpf: bpftool: support prog array map and map of maps Yonghong Song
2018-09-11 21:20 ` [PATCH bpf-next 0/2] bpf: add bpffs/bpftool dump for prog_array and map_in_map maps Alexei Starovoitov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).