netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [BPF v1] tools: bpftool: Fix JSON output when lookup fails
@ 2019-06-05 19:17 Krzesimir Nowak
  2019-06-05 19:36 ` Andrii Nakryiko
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Krzesimir Nowak @ 2019-06-05 19:17 UTC (permalink / raw)
  To: bpf
  Cc: Alban Crequy, Iago López Galeiras, Krzesimir Nowak,
	Quentin Monnet, Alexei Starovoitov, Daniel Borkmann,
	Martin KaFai Lau, Song Liu, Yonghong Song, Jakub Kicinski,
	Stanislav Fomichev, Prashant Bhole, Okash Khawaja,
	David Calavera, netdev, linux-kernel

In commit 9a5ab8bf1d6d ("tools: bpftool: turn err() and info() macros
into functions") one case of error reporting was special cased, so it
could report a lookup error for a specific key when dumping the map
element. What the code forgot to do is to wrap the key and value keys
into a JSON object, so an example output of pretty JSON dump of a
sockhash map (which does not support looking up its values) is:

[
    "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x00"
    ],
    "value": {
        "error": "Operation not supported"
    },
    "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x01"
    ],
    "value": {
        "error": "Operation not supported"
    }
]

Note the key-value pairs inside the toplevel array. They should be
wrapped inside a JSON object, otherwise it is an invalid JSON. This
commit fixes this, so the output now is:

[{
        "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x00"
        ],
        "value": {
            "error": "Operation not supported"
        }
    },{
        "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x01"
        ],
        "value": {
            "error": "Operation not supported"
        }
    }
]

Fixes: 9a5ab8bf1d6d ("tools: bpftool: turn err() and info() macros into functions")
Cc: Quentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: Krzesimir Nowak <krzesimir@kinvolk.io>
---
 tools/bpf/bpftool/map.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c
index 3ec82904ccec..5da5a7311f13 100644
--- a/tools/bpf/bpftool/map.c
+++ b/tools/bpf/bpftool/map.c
@@ -716,12 +716,14 @@ static int dump_map_elem(int fd, void *key, void *value,
 		return 0;
 
 	if (json_output) {
+		jsonw_start_object(json_wtr);
 		jsonw_name(json_wtr, "key");
 		print_hex_data_json(key, map_info->key_size);
 		jsonw_name(json_wtr, "value");
 		jsonw_start_object(json_wtr);
 		jsonw_string_field(json_wtr, "error", strerror(lookup_errno));
 		jsonw_end_object(json_wtr);
+		jsonw_end_object(json_wtr);
 	} else {
 		const char *msg = NULL;
 
-- 
2.20.1


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

* Re: [BPF v1] tools: bpftool: Fix JSON output when lookup fails
  2019-06-05 19:17 [BPF v1] tools: bpftool: Fix JSON output when lookup fails Krzesimir Nowak
@ 2019-06-05 19:36 ` Andrii Nakryiko
  2019-06-05 20:10 ` Daniel Borkmann
  2019-06-06  8:35 ` Quentin Monnet
  2 siblings, 0 replies; 4+ messages in thread
From: Andrii Nakryiko @ 2019-06-05 19:36 UTC (permalink / raw)
  To: Krzesimir Nowak
  Cc: bpf, Alban Crequy, Iago López Galeiras, Quentin Monnet,
	Alexei Starovoitov, Daniel Borkmann, Martin KaFai Lau, Song Liu,
	Yonghong Song, Jakub Kicinski, Stanislav Fomichev,
	Prashant Bhole, Okash Khawaja, David Calavera, Networking,
	open list

On Wed, Jun 5, 2019 at 12:18 PM Krzesimir Nowak <krzesimir@kinvolk.io> wrote:
>
> In commit 9a5ab8bf1d6d ("tools: bpftool: turn err() and info() macros
> into functions") one case of error reporting was special cased, so it
> could report a lookup error for a specific key when dumping the map
> element. What the code forgot to do is to wrap the key and value keys
> into a JSON object, so an example output of pretty JSON dump of a
> sockhash map (which does not support looking up its values) is:
>
> [
>     "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x00"
>     ],
>     "value": {
>         "error": "Operation not supported"
>     },
>     "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x01"
>     ],
>     "value": {
>         "error": "Operation not supported"
>     }
> ]
>
> Note the key-value pairs inside the toplevel array. They should be
> wrapped inside a JSON object, otherwise it is an invalid JSON. This
> commit fixes this, so the output now is:
>
> [{
>         "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x00"
>         ],
>         "value": {
>             "error": "Operation not supported"
>         }
>     },{
>         "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x01"
>         ],
>         "value": {
>             "error": "Operation not supported"
>         }
>     }
> ]
>
> Fixes: 9a5ab8bf1d6d ("tools: bpftool: turn err() and info() macros into functions")
> Cc: Quentin Monnet <quentin.monnet@netronome.com>
> Signed-off-by: Krzesimir Nowak <krzesimir@kinvolk.io>
> ---

Acked-by: Andrii Nakryiko <andriin@fb.com>

>  tools/bpf/bpftool/map.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c
> index 3ec82904ccec..5da5a7311f13 100644
> --- a/tools/bpf/bpftool/map.c
> +++ b/tools/bpf/bpftool/map.c
> @@ -716,12 +716,14 @@ static int dump_map_elem(int fd, void *key, void *value,
>                 return 0;
>
>         if (json_output) {
> +               jsonw_start_object(json_wtr);
>                 jsonw_name(json_wtr, "key");
>                 print_hex_data_json(key, map_info->key_size);
>                 jsonw_name(json_wtr, "value");
>                 jsonw_start_object(json_wtr);
>                 jsonw_string_field(json_wtr, "error", strerror(lookup_errno));
>                 jsonw_end_object(json_wtr);
> +               jsonw_end_object(json_wtr);
>         } else {
>                 const char *msg = NULL;
>
> --
> 2.20.1
>

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

* Re: [BPF v1] tools: bpftool: Fix JSON output when lookup fails
  2019-06-05 19:17 [BPF v1] tools: bpftool: Fix JSON output when lookup fails Krzesimir Nowak
  2019-06-05 19:36 ` Andrii Nakryiko
@ 2019-06-05 20:10 ` Daniel Borkmann
  2019-06-06  8:35 ` Quentin Monnet
  2 siblings, 0 replies; 4+ messages in thread
From: Daniel Borkmann @ 2019-06-05 20:10 UTC (permalink / raw)
  To: Krzesimir Nowak, bpf
  Cc: Alban Crequy, Iago López Galeiras, Quentin Monnet,
	Alexei Starovoitov, Martin KaFai Lau, Song Liu, Yonghong Song,
	Jakub Kicinski, Stanislav Fomichev, Prashant Bhole,
	Okash Khawaja, David Calavera, netdev, linux-kernel

On 06/05/2019 09:17 PM, Krzesimir Nowak wrote:
> In commit 9a5ab8bf1d6d ("tools: bpftool: turn err() and info() macros
> into functions") one case of error reporting was special cased, so it
> could report a lookup error for a specific key when dumping the map
> element. What the code forgot to do is to wrap the key and value keys
> into a JSON object, so an example output of pretty JSON dump of a
> sockhash map (which does not support looking up its values) is:
> 
> [
>     "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x00"
>     ],
>     "value": {
>         "error": "Operation not supported"
>     },
>     "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x01"
>     ],
>     "value": {
>         "error": "Operation not supported"
>     }
> ]
> 
> Note the key-value pairs inside the toplevel array. They should be
> wrapped inside a JSON object, otherwise it is an invalid JSON. This
> commit fixes this, so the output now is:
> 
> [{
>         "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x00"
>         ],
>         "value": {
>             "error": "Operation not supported"
>         }
>     },{
>         "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x01"
>         ],
>         "value": {
>             "error": "Operation not supported"
>         }
>     }
> ]
> 
> Fixes: 9a5ab8bf1d6d ("tools: bpftool: turn err() and info() macros into functions")
> Cc: Quentin Monnet <quentin.monnet@netronome.com>
> Signed-off-by: Krzesimir Nowak <krzesimir@kinvolk.io>

Applied, thanks!

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

* Re: [BPF v1] tools: bpftool: Fix JSON output when lookup fails
  2019-06-05 19:17 [BPF v1] tools: bpftool: Fix JSON output when lookup fails Krzesimir Nowak
  2019-06-05 19:36 ` Andrii Nakryiko
  2019-06-05 20:10 ` Daniel Borkmann
@ 2019-06-06  8:35 ` Quentin Monnet
  2 siblings, 0 replies; 4+ messages in thread
From: Quentin Monnet @ 2019-06-06  8:35 UTC (permalink / raw)
  To: Krzesimir Nowak, bpf
  Cc: Alban Crequy, Iago López Galeiras, Alexei Starovoitov,
	Daniel Borkmann, Martin KaFai Lau, Song Liu, Yonghong Song,
	Jakub Kicinski, Stanislav Fomichev, Prashant Bhole,
	Okash Khawaja, David Calavera, netdev, linux-kernel

2019-06-05 21:17 UTC+0200 ~ Krzesimir Nowak <krzesimir@kinvolk.io>
> In commit 9a5ab8bf1d6d ("tools: bpftool: turn err() and info() macros
> into functions") one case of error reporting was special cased, so it
> could report a lookup error for a specific key when dumping the map
> element. What the code forgot to do is to wrap the key and value keys
> into a JSON object, so an example output of pretty JSON dump of a
> sockhash map (which does not support looking up its values) is:
> 
> [
>     "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x00"
>     ],
>     "value": {
>         "error": "Operation not supported"
>     },
>     "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x01"
>     ],
>     "value": {
>         "error": "Operation not supported"
>     }
> ]
> 
> Note the key-value pairs inside the toplevel array. They should be
> wrapped inside a JSON object, otherwise it is an invalid JSON. This
> commit fixes this, so the output now is:
> 
> [{
>         "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x00"
>         ],
>         "value": {
>             "error": "Operation not supported"
>         }
>     },{
>         "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x01"
>         ],
>         "value": {
>             "error": "Operation not supported"
>         }
>     }
> ]
> 
> Fixes: 9a5ab8bf1d6d ("tools: bpftool: turn err() and info() macros into functions")
> Cc: Quentin Monnet <quentin.monnet@netronome.com>
> Signed-off-by: Krzesimir Nowak <krzesimir@kinvolk.io>

Thanks for the fix!

Quentin


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

end of thread, other threads:[~2019-06-06  8:35 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-05 19:17 [BPF v1] tools: bpftool: Fix JSON output when lookup fails Krzesimir Nowak
2019-06-05 19:36 ` Andrii Nakryiko
2019-06-05 20:10 ` Daniel Borkmann
2019-06-06  8:35 ` Quentin Monnet

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).