* 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