Skip to content

Commit

Permalink
bpftool: Wrap struct_ops dump in an array
Browse files Browse the repository at this point in the history
When dumping a struct_ops, 2 dictionaries are emitted.

When using `name`, they were already wrapped in an array, but not when
using `id`. Causing `jq` to fail at parsing the payload as it reached
the comma following the first dict.

This change wraps those dictionaries in an array so valid json is emitted.

Before, jq fails to parse the output:
```
 $ sudo bpftool struct_ops dump id 1523612 | jq . > /dev/null
parse error: Expected value before ',' at line 19, column 2
```

After, no error parsing the output:
```
sudo ./bpftool  struct_ops dump id 1523612 | jq . > /dev/null
```

Signed-off-by: Manu Bretelle <[email protected]>
Signed-off-by: Daniel Borkmann <[email protected]>
Tested-by: Eduard Zingerman <[email protected]>
Acked-by: Eduard Zingerman <[email protected]>
Acked-by: Quentin Monnet <[email protected]>
Link: https://lore.kernel.org/bpf/[email protected]
  • Loading branch information
chantra authored and qmonnet committed Nov 14, 2023
1 parent 5978b98 commit b9530de
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/struct_ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,9 @@ static struct res do_one_id(const char *id_str, work_func func, void *data,

res.nr_maps++;

if (wtr)
jsonw_start_array(wtr);

if (func(fd, info, data, wtr))
res.nr_errs++;
else if (!wtr && json_output)
Expand All @@ -288,6 +291,9 @@ static struct res do_one_id(const char *id_str, work_func func, void *data,
*/
jsonw_null(json_wtr);

if (wtr)
jsonw_end_array(wtr);

done:
free(info);
close(fd);
Expand Down

0 comments on commit b9530de

Please sign in to comment.