All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH nft] json: output set/map element count
@ 2026-04-19 15:57 Niklas Fiekas
  2026-08-20 11:31 ` Pablo Neira Ayuso
  0 siblings, 1 reply; 2+ messages in thread
From: Niklas Fiekas @ 2026-04-19 15:57 UTC (permalink / raw)
  To: netfilter-devel

Useful with --terse, when dumping all elements is too expensive.

Mirrors non-json dumps, which already include "... # count 12345".

Signed-off-by: Niklas Fiekas <niklas.fiekas@backscattering.de>
---
 doc/libnftables-json.adoc                                     | 4 ++++
 src/json.c                                                    | 4 ++++
 .../testcases/rule_management/dumps/0011reset_0.json-nft      | 1 +
 tests/shell/testcases/sets/dumps/0016element_leak_0.json-nft  | 1 +
 .../shell/testcases/sets/dumps/0017add_after_flush_0.json-nft | 1 +
 .../shell/testcases/sets/dumps/0018set_check_size_1.json-nft  | 1 +
 .../shell/testcases/sets/dumps/0019set_check_size_0.json-nft  | 1 +
 .../testcases/sets/dumps/0045concat_ipv4_service.json-nft     | 1 +
 .../testcases/sets/dumps/0057set_create_fails_0.json-nft      | 1 +
 tests/shell/testcases/sets/dumps/0060set_multistmt_1.json-nft | 1 +
 tests/shell/testcases/sets/dumps/interval_size.json-nft       | 2 ++
 11 files changed, 18 insertions(+)

diff --git a/doc/libnftables-json.adoc b/doc/libnftables-json.adoc
index 23a928df..697fdfa4 100644
--- a/doc/libnftables-json.adoc
+++ b/doc/libnftables-json.adoc
@@ -346,6 +346,7 @@ ____
 	"timeout":* 'NUMBER'*,
 	"gc-interval":* 'NUMBER'*,
 	"size":* 'NUMBER'*,
+	"count":* 'NUMBER'*,
 	"auto-merge":* 'BOOLEAN'
 *}}*
 
@@ -362,6 +363,7 @@ ____
 	"timeout":* 'NUMBER'*,
 	"gc-interval":* 'NUMBER'*,
 	"size":* 'NUMBER'*,
+	"count":* 'NUMBER'*,
 	"auto-merge":* 'BOOLEAN'
 *}}*
 
@@ -402,6 +404,8 @@ that they translate a unique key to a value.
 	Garbage collector interval in seconds.
 *size*::
 	Maximum number of elements supported.
+*count*::
+	Current number of elements. Not used in input.
 *auto-merge*::
 	Automatic merging of adjacent/overlapping set elements in interval sets.
 
diff --git a/src/json.c b/src/json.c
index 7312215d..dd1bdb04 100644
--- a/src/json.c
+++ b/src/json.c
@@ -203,6 +203,10 @@ static json_t *set_print_json(struct output_ctx *octx, const struct set *set)
 		if (set->desc.size) {
 			tmp = nft_json_pack("i", set->desc.size);
 			json_object_set_new(root, "size", tmp);
+			if (set->count) {
+				tmp = nft_json_pack("i", set->count);
+				json_object_set_new(root, "count", tmp);
+			}
 		}
 	}
 
diff --git a/tests/shell/testcases/rule_management/dumps/0011reset_0.json-nft b/tests/shell/testcases/rule_management/dumps/0011reset_0.json-nft
index bc242467..ebeec1d3 100644
--- a/tests/shell/testcases/rule_management/dumps/0011reset_0.json-nft
+++ b/tests/shell/testcases/rule_management/dumps/0011reset_0.json-nft
@@ -38,6 +38,7 @@
         "type": "ipv4_addr",
         "handle": 0,
         "size": 65535,
+        "count": 1,
         "flags": [
           "dynamic"
         ],
diff --git a/tests/shell/testcases/sets/dumps/0016element_leak_0.json-nft b/tests/shell/testcases/sets/dumps/0016element_leak_0.json-nft
index 96b9714a..bf09eada 100644
--- a/tests/shell/testcases/sets/dumps/0016element_leak_0.json-nft
+++ b/tests/shell/testcases/sets/dumps/0016element_leak_0.json-nft
@@ -22,6 +22,7 @@
         "type": "ipv4_addr",
         "handle": 0,
         "size": 2,
+        "count": 1,
         "elem": [
           "1.1.1.1"
         ]
diff --git a/tests/shell/testcases/sets/dumps/0017add_after_flush_0.json-nft b/tests/shell/testcases/sets/dumps/0017add_after_flush_0.json-nft
index 96b9714a..bf09eada 100644
--- a/tests/shell/testcases/sets/dumps/0017add_after_flush_0.json-nft
+++ b/tests/shell/testcases/sets/dumps/0017add_after_flush_0.json-nft
@@ -22,6 +22,7 @@
         "type": "ipv4_addr",
         "handle": 0,
         "size": 2,
+        "count": 1,
         "elem": [
           "1.1.1.1"
         ]
diff --git a/tests/shell/testcases/sets/dumps/0018set_check_size_1.json-nft b/tests/shell/testcases/sets/dumps/0018set_check_size_1.json-nft
index d226811c..e16c7b4b 100644
--- a/tests/shell/testcases/sets/dumps/0018set_check_size_1.json-nft
+++ b/tests/shell/testcases/sets/dumps/0018set_check_size_1.json-nft
@@ -22,6 +22,7 @@
         "type": "ipv4_addr",
         "handle": 0,
         "size": 2,
+        "count": 2,
         "elem": [
           "1.1.1.1",
           "1.1.1.2"
diff --git a/tests/shell/testcases/sets/dumps/0019set_check_size_0.json-nft b/tests/shell/testcases/sets/dumps/0019set_check_size_0.json-nft
index d226811c..e16c7b4b 100644
--- a/tests/shell/testcases/sets/dumps/0019set_check_size_0.json-nft
+++ b/tests/shell/testcases/sets/dumps/0019set_check_size_0.json-nft
@@ -22,6 +22,7 @@
         "type": "ipv4_addr",
         "handle": 0,
         "size": 2,
+        "count": 2,
         "elem": [
           "1.1.1.1",
           "1.1.1.2"
diff --git a/tests/shell/testcases/sets/dumps/0045concat_ipv4_service.json-nft b/tests/shell/testcases/sets/dumps/0045concat_ipv4_service.json-nft
index 8473c333..39343478 100644
--- a/tests/shell/testcases/sets/dumps/0045concat_ipv4_service.json-nft
+++ b/tests/shell/testcases/sets/dumps/0045concat_ipv4_service.json-nft
@@ -33,6 +33,7 @@
         ],
         "handle": 0,
         "size": 65536,
+        "count": 1,
         "flags": [
           "timeout",
           "dynamic"
diff --git a/tests/shell/testcases/sets/dumps/0057set_create_fails_0.json-nft b/tests/shell/testcases/sets/dumps/0057set_create_fails_0.json-nft
index 79d7257e..9d43ce1b 100644
--- a/tests/shell/testcases/sets/dumps/0057set_create_fails_0.json-nft
+++ b/tests/shell/testcases/sets/dumps/0057set_create_fails_0.json-nft
@@ -22,6 +22,7 @@
         "type": "ipv4_addr",
         "handle": 0,
         "size": 65535,
+        "count": 1,
         "elem": [
           "1.1.1.1"
         ]
diff --git a/tests/shell/testcases/sets/dumps/0060set_multistmt_1.json-nft b/tests/shell/testcases/sets/dumps/0060set_multistmt_1.json-nft
index aea0fe49..7ba55f5f 100644
--- a/tests/shell/testcases/sets/dumps/0060set_multistmt_1.json-nft
+++ b/tests/shell/testcases/sets/dumps/0060set_multistmt_1.json-nft
@@ -34,6 +34,7 @@
         "type": "ipv4_addr",
         "handle": 0,
         "size": 65535,
+        "count": 3,
         "flags": [
           "dynamic"
         ],
diff --git a/tests/shell/testcases/sets/dumps/interval_size.json-nft b/tests/shell/testcases/sets/dumps/interval_size.json-nft
index 3ae54e08..d8551406 100644
--- a/tests/shell/testcases/sets/dumps/interval_size.json-nft
+++ b/tests/shell/testcases/sets/dumps/interval_size.json-nft
@@ -29,6 +29,7 @@
         },
         "handle": 0,
         "size": 1,
+        "count": 1,
         "flags": [
           "interval"
         ],
@@ -58,6 +59,7 @@
         },
         "handle": 0,
         "size": 1,
+        "count": 1,
         "flags": [
           "interval"
         ],
-- 
2.53.0


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

end of thread, other threads:[~2026-08-20 11:31 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-19 15:57 [PATCH nft] json: output set/map element count Niklas Fiekas
2026-08-20 11:31 ` Pablo Neira Ayuso

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.