Also print the number of allocated set elements if the set provided
an upper size limit and there is at least one element.
Example:
table ip t {
set s {
type ipv4_addr
size 65535 # count 1
flags dynamic
counter
elements = { 1.1.1.1 counter packets 1 bytes 11 }
}
...
JSON output is unchanged as this only has informational purposes.
This change breaks tests, followup patch addresses this.
Suggested-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Florian Westphal <fw@strlen.de>
* @refcnt: reference count
* @flags: bitmask of set flags
* @gc_int: garbage collection interval
+ * @count: count of kernel-allocated elements
* @timeout: default timeout value
* @key: key expression (data type, length))
* @data: mapping data expression
unsigned int refcnt;
uint32_t flags;
uint32_t gc_int;
+ uint32_t count;
uint64_t timeout;
struct expr *key;
struct expr *data;
if (nftnl_set_is_set(nls, NFTNL_SET_DESC_SIZE))
set->desc.size = nftnl_set_get_u32(nls, NFTNL_SET_DESC_SIZE);
+ if (nftnl_set_is_set(nls, NFTNL_SET_COUNT))
+ set->count = nftnl_set_get_u32(nls, NFTNL_SET_COUNT);
+
if (nftnl_set_is_set(nls, NFTNL_SET_DESC_CONCAT)) {
uint32_t len = NFT_REG32_COUNT;
const uint8_t *data;
}
if (set->desc.size > 0) {
- nft_print(octx, "%s%ssize %u%s",
+ nft_print(octx, "%s%ssize %u",
opts->tab, opts->tab,
- set->desc.size,
- opts->stmt_separator);
+ set->desc.size);
+ if (set->count > 0)
+ nft_print(octx, "%s# count %u", opts->tab,
+ set->count);
+ nft_print(octx, "%s", opts->stmt_separator);
}
}