All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH nft] cache: unset NFT_CACHE_SETELEM with --terse listing
@ 2021-10-02 11:50 Pablo Neira Ayuso
  0 siblings, 0 replies; only message in thread
From: Pablo Neira Ayuso @ 2021-10-02 11:50 UTC (permalink / raw)
  To: netfilter-devel

Skip populating the set element cache in this case to speed up listing.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
 src/cache.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/cache.c b/src/cache.c
index 584328ebc5e7..c602f93a3ec6 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -127,7 +127,8 @@ static unsigned int evaluate_cache_rename(struct cmd *cmd, unsigned int flags)
 	return flags;
 }
 
-static unsigned int evaluate_cache_list(struct cmd *cmd, unsigned int flags,
+static unsigned int evaluate_cache_list(struct nft_ctx *nft, struct cmd *cmd,
+					unsigned int flags,
 					struct nft_cache_filter *filter)
 {
 	switch (cmd->obj) {
@@ -143,7 +144,10 @@ static unsigned int evaluate_cache_list(struct cmd *cmd, unsigned int flags,
 			filter->table = cmd->handle.table.name;
 			filter->set = cmd->handle.set.name;
 		}
-		flags |= NFT_CACHE_FULL | NFT_CACHE_REFRESH;
+		if (nft_output_terse(&nft->output))
+			flags |= (NFT_CACHE_FULL & ~NFT_CACHE_SETELEM) | NFT_CACHE_REFRESH;
+		else
+			flags |= NFT_CACHE_FULL | NFT_CACHE_REFRESH;
 		break;
 	case CMD_OBJ_CHAINS:
 		flags |= NFT_CACHE_TABLE | NFT_CACHE_CHAIN;
@@ -155,6 +159,11 @@ static unsigned int evaluate_cache_list(struct cmd *cmd, unsigned int flags,
 	case CMD_OBJ_FLOWTABLES:
 		flags |= NFT_CACHE_TABLE | NFT_CACHE_FLOWTABLE;
 		break;
+	case CMD_OBJ_RULESET:
+		if (nft_output_terse(&nft->output))
+			flags |= (NFT_CACHE_FULL & ~NFT_CACHE_SETELEM) | NFT_CACHE_REFRESH;
+		else
+			flags |= NFT_CACHE_FULL | NFT_CACHE_REFRESH;
 	default:
 		flags |= NFT_CACHE_FULL | NFT_CACHE_REFRESH;
 		break;
@@ -200,7 +209,7 @@ unsigned int nft_cache_evaluate(struct nft_ctx *nft, struct list_head *cmds,
 			flags |= NFT_CACHE_TABLE;
 			break;
 		case CMD_LIST:
-			flags |= evaluate_cache_list(cmd, flags, filter);
+			flags |= evaluate_cache_list(nft, cmd, flags, filter);
 			break;
 		case CMD_MONITOR:
 			flags |= NFT_CACHE_FULL;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2021-10-02 11:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-02 11:50 [PATCH nft] cache: unset NFT_CACHE_SETELEM with --terse listing 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.