From: Phil Sutter Date: Wed, 11 Jun 2025 14:45:48 +0000 (+0200) Subject: json: Dump flowtable hook spec only if present X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9fa3fbed73a36111e308c9856514a032f5444564;p=thirdparty%2Fnftables.git json: Dump flowtable hook spec only if present 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 --- diff --git a/src/json.c b/src/json.c index a46aed27..5bd5daf3 100644 --- a/src/json.c +++ b/src/json.c @@ -493,18 +493,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}}}