From 7f9a74f91121812a4fb8cf17e14e54eec5d4f6d5 Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Wed, 11 Jun 2025 16:45:48 +0200 Subject: [PATCH] json: Dump flowtable hook spec only if present commit 9fa3fbed73a36111e308c9856514a032f5444564 upstream. If there is no priority.expr set, assume hook.num is bogus, too. While this is fixing JSON output, it's hard to tell what commit this is actually fixing: Before commit 627c451b23513 ("src: allow variables in the chain priority specification"), there was no way to detect flowtables missing hook specs (e.g. when printing flowtable delete monitor event). Signed-off-by: Phil Sutter Reviewed-by: Pablo Neira Ayuso --- src/json.c | 22 ++++++++++++++-------- tests/monitor/testcases/flowtable-simple.t | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/json.c b/src/json.c index 70f75480..3b3565c0 100644 --- a/src/json.c +++ b/src/json.c @@ -480,18 +480,24 @@ static json_t *flowtable_print_json(const struct flowtable *ftable) json_t *root, *devs = NULL; int i, priority = 0; + root = nft_json_pack("{s:s, s:s, s:s, s:I}", + "family", family2str(ftable->handle.family), + "name", ftable->handle.flowtable.name, + "table", ftable->handle.table.name, + "handle", ftable->handle.handle.id); + if (ftable->priority.expr) { + json_t *tmp; + mpz_export_data(&priority, ftable->priority.expr->value, BYTEORDER_HOST_ENDIAN, sizeof(int)); - } - root = nft_json_pack("{s:s, s:s, s:s, s:I, s:s, s:i}", - "family", family2str(ftable->handle.family), - "name", ftable->handle.flowtable.name, - "table", ftable->handle.table.name, - "handle", ftable->handle.handle.id, - "hook", hooknum2str(NFPROTO_NETDEV, ftable->hook.num), - "prio", priority); + tmp = nft_json_pack("{s:s, s:i}", + "hook", hooknum2str(NFPROTO_NETDEV, + ftable->hook.num), + "prio", priority); + json_object_update_new(root, tmp); + } for (i = 0; i < ftable->dev_array_len; i++) { const char *dev = ftable->dev_array[i]; diff --git a/tests/monitor/testcases/flowtable-simple.t b/tests/monitor/testcases/flowtable-simple.t index df8eccbd..b373cca2 100644 --- a/tests/monitor/testcases/flowtable-simple.t +++ b/tests/monitor/testcases/flowtable-simple.t @@ -7,4 +7,4 @@ J {"add": {"flowtable": {"family": "ip", "name": "ft", "table": "t", "handle": 0 I delete flowtable ip t ft O - -J {"delete": {"flowtable": {"family": "ip", "name": "ft", "table": "t", "handle": 0, "hook": "ingress", "prio": 0, "dev": "lo"}}} +J {"delete": {"flowtable": {"family": "ip", "name": "ft", "table": "t", "handle": 0}}} -- 2.47.3